JAVA程序设计案例教程 周怡 张英 主编第9章 习题答案
- 格式:doc
- 大小:46.00 KB
- 文档页数:6
第7章包与异常处理习题参考答案:一、判断题1.在编程中,可以不用进行异常的处理,因为有时发生的异常并不会影响程序的正常运行_____×__。
2.异常处理一般可用try ……catch语句进行处理的____√___。
3.try ……catch语句不能进行嵌套使用_×______。
4.如果觉得系统给出的异常类不够使用,也可能定义自己的异常类,自己定义的异常类一般继承Exception类(或其子类)___√____。
5.try……catch……finally语句中,三个关键字必须同时使用,才能达到异常处理的效果_____×__。
6.使用import 导入一包时,可以将这个包的子包也一并导入__×_____。
二、选择题1.异常是指___D____。
A.程序中的语法错误B.程序的编译错误C.程序执行过程中遇到的事先没有预料到的情况D.程序执行过程中遇到的事先没有预料到的情况,或程序事先定义好的可能出现的意外情况2.如果一个程序中有多个catch语句,程序会__C_____。
A.每个catch都会执行一次B.把每个符合条件的catch语句都执行一次C.找到适合的异常类型后就不再执行其它catch语句D.找到适合的异常类型后还要执行其它catch语句3.下列关于finally说法正确的是__C_____。
A.finally语句应该放在所有catch语句的前面B.finally语句应该放在所有catch语句的后面C.无论程序是否找到合适的catch匹配,都会去执行finallyD.如果程序在前面找到了多个适合的catch匹配,就不再执行finally语句了4.在一个方法内抛出异常时,应该使用下列哪个子句____A___。
A. throwB. catchC. finallyD. throws5.下列描述中,错误的一个是____B___。
A. 异常抛出点后的代码在抛出异常后不再执行B. 一个try代码段后只能跟有一个catch代码段C. try 一般要和catch联合使用D. 在编写程序过程中,要考虑对异常的处理6.一个catch语句段一定要和下列哪一项配合使用__A_____。
习题12一、单选题1. 答案:B 难度:容易参考出处:12.1节2. 答案:D 难度:较难参考出处:12.1.1节3. 答案:B 难度:一般参考出处:12.1.1节4. 答案:C 难度:一般参考出处:12.2.1节5. 答案:C 难度:一般参考出处:12.2.3节6.答案:D 难度:较难参考出处:12.2.2节7.答案:B 难度:一般参考出处:12.1节8.答案:A 难度:一般参考出处:12.2.2节9.答案:C 难度:一般参考出处:12.2节二、填空题1. 答案:记录难度:一般参考出处:12.1.1节2. 答案:数据库难度:容易参考出处:12.1节3. 答案:数据库难度:容易参考出处:12.1节4. 答案:表难度:容易参考出处:12.2.1节5.答案:向导自定义难度:较难参考出处:12.2.3节6.答案:close()方法难度:容易参考出处:12.3.3节三、问答题1.Java是通过什么来访问数据库的?JDBC2.JDBC是什么?JDBC是JAVA系统提供给用户在JAVA程序中操纵数据库的Java API,可以为不同数据库提供统一访问,它是一组由Java语言编写的类和接口组成。
3.以JDBC-ODBC方式访问数据库时,如何加载驱动程序?用Class.forName(“驱动程序名”)这种方式4.简述JDBC-ODBC方式访问数据库的基本步骤。
首先设置数据源,然后用Class.forName(“驱动程序名”)加载驱动程序,再以DriverManager.getConnection()方法连接数据库,接着用连接对象的方法createStatement()创建SQL语句对象。
以上过程完成后即可执行实际的SQL语句对数据库进行操作。
最后,要关闭SQL语句对象和数据库连接。
四、判断题1.答案:X难度:容易参考出处:12.2.3节2.答案:√难度:容易参考出处:12.2.5节3.答案:√难度:容易参考出处:12.2.3节4.答案:√难度:容易参考出处:12.2.1节5.答案:X难度:容易参考出处:12.3.3节6. 答案:√难度:容易参考出处:12.3.3节五、程序设计题1. 打开Access,创建一个空的数据库PatientDatabase.mdb。
第9章多线程4、C5、D6、package cn.ntu.zhanbin;public class ThreadOutput implements Runnable {static ThreadOutput to = new ThreadOutput();public static void main(String[] args) {//创建两个线程Thread t1 = new Thread(new ThreadOutput());Thread t2 = new Thread(new ThreadOutput());t1.start();t2.start();}public void run() {synchronized (to) {to.print();}}void print() {for (int i = 0; i < 6; i++) {System.out.print(10 + i);if (i < 5) {System.out.print(",");}try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("");}}--------------------------------------------------------------------- 8、package cn.ntu.zhanbin;public class ThreadAlphabet extends Thread {public static void main(String[] args) {//创建3个线程ThreadAlphabet ta1 = new ThreadAlphabet("线程1:");ThreadAlphabet ta2 = new ThreadAlphabet("线程2:");ThreadAlphabet ta3 = new ThreadAlphabet("线程3:");ta1.start();ta2.start();ta3.start();}ThreadAlphabet(String name) {super(name);//调用父类的构造函数}public void run() {//获取当前线程名String name = Thread.currentThread().getName();//输出for (int i = 0; i < 26; i++) {System.out.println(name + (char) (i + 65));try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}}}--------------------------------------------------------------------- 9、package cn.ntu.zhanbin;public class PrintOdds implements Runnable {private int bound;//创建一个静态PrintOdds对象,并设置边界范围为20static PrintOdds po = new PrintOdds(20);public PrintOdds(int b) {bound = b;}public void print() {for (int i = 1; i < bound; i+=2) {System.out.println(i);}}public void run() {po.print();}public static void main(String[] args) {Thread t = new Thread(po);t.start();}}第10章数据库编程说明:课本中连接数据库和关闭数据库的操作都是调用的P201的例10-1的ConnectionManager,而书中的类只写了getConnection()方法,各个关闭操作的方法均未给出。
第9章习题解答1.与输入/输出有关的流类有哪些?答:与输入/输出有关的流类主要有InputStream、OutputStream和Reader、Writer类及其子类。
除此以外,与流有关的类还有File类、FileDescriptor类、StreamTokenizer类和RandomAccessFile类。
2.字节流与字符流之间有哪些区别?答:字节流是面向字节的流,流中的数据以8位字节为单位进行读写,是抽象类InputStream和OutputStream的子类,通常用于读写二进制数据,如图像和声音。
字符流是面向字符的流,流中的数据以16位字符(Unicode字符)为单位进行读写,是抽象类Reader和Writer的子类,通常用于字符数据的处理。
3.什么是节点流?什么是处理流或过滤流?分别在什么场合使用?答:一个流有两个端点。
一个端点是程序;另一个端点可以是特定的外部设备(如键盘、显示器、已连接的网络等)和磁盘文件,甚至是一块内存区域(统称为节点),也可以是一个已存在流的目的端。
流的一端是程序,另一端是节点的流,称为节点流。
节点流是一种最基本的流。
以其它已经存在的流作为一个端点的流,称为处理流。
处理流又称过滤流,是对已存在的节点流或其它处理流的进一步处理。
对节点流中的数据只能按字节或字符读写。
当读写的数据不是单个字节或字符,而是一个数据块或字符串等时,就要使用处理流或过滤流。
4.标准流对象有哪些?它们是哪个类的对象?答:标准流对象有3个,它们是:System.in、System.out和System.err。
System.in 是InputStream类对象,System.out和System.err是PrintStream类对象。
5.顺序读写与随机读写的特点分别是什么?答:所谓顺序读写是指在读写流中的数据时只能按顺序进行。
换言之,在读取流中的第n个字节或字符时,必须已经读取了流中的前n-1个字节或字符;同样,在写入了流中n-1个字节或字符后,才能写入第n个字节或字符。
第10章习题答案一、是非题1.T2. F3. F4. F5. F6.T二、选择题1.D2.B3.C4.D5.D6.ACD7.B三、填空题1.java解释器2.Applet类3.play()4.Image5.标记6. <param>标记s四、简答题1.首先运行方式不同,application是一个完整的JAVA程序,可以单独运行,applet需要镶嵌于HTML或者在JAVA小程序查看器中运行,其次运行工具不同,application由虚拟机运行,applet由网页或者查看器运行,再结构不同,application必须有MAIN方法,applet不需要MAIN方法。
2.Applet的生命周期分为四个阶段,各阶段分别由init,start,stop和destroy四种方法来具体体现。
1)init()方法Init方法是Applet运行的起点。
如果需要执行初始化任务,可以在Applet的子类中重载该方法,该方法仅仅被运行一次,一般常常用来初始化小应用程序。
2)start()方法此方法通知Applet开始执行,当调用init方法或者在Web页中再次访问时被调用。
3)stop()方法此方法通知Applet停止执行,当浏览器切换到其他网页,或者关闭浏览器运行时需要调用此方法。
4)destroy()方法此方法通知Applet,它正在被收回,应该释放已分配给它的所有资源,stop方法总是在该方法调用之前被调用。
3.HTML由若干标记组成,所有标记用一对尖括号<>括起。
常用标记如下:此外,为了把Applet嵌入到HTML文件,还需要用到<applet>与</ applet >标记。
在此标记中,code后接对应的字节码文件名。
这样就把applet嵌入到HTML文件中了。
在html中这两个标记是必须的。
4.HTML可以通过<param>标记向Applet传递参数,而Applet则通过getParameter()方法来接收参数。
《Java程序设计》课后习题参考答案Java程序设计课后习题参考答案1. 介绍在 Java 程序设计课程中,课后习题是帮助学生巩固知识、加深理解和提高编程能力的重要环节。
本文将为大家提供《Java程序设计》课后习题的参考答案,以帮助学生更好地学习和掌握 Java 编程。
2. 基本概念Java 程序设计课后习题涵盖了从基础到高级的各种知识点,包括但不限于变量、数据类型、条件语句、循环语句、数组、类、对象、继承、多态等内容。
通过解答这些习题,学生可以加深对这些概念的理解,并且通过实际操作来巩固他们的编程能力。
3. 习题解答策略当解答课后习题时,以下几个策略可以帮助你更好地理解和解决问题:3.1 仔细阅读题目要求。
确保自己充分理解题目所要求的功能和目标。
3.2 分析问题。
在着手解答问题之前,先理清思路,分析问题的要点和关键部分。
3.3 设计算法。
根据问题的要求,设计一个合适的算法来解决问题。
3.4 编写代码。
用 Java 编程语言将你设计的算法转化为代码实现。
3.5 测试和调试。
对编写的代码进行测试和调试,确保程序能够正常运行,并且得到正确的结果。
4. 习题参考答案示例下面我们将列举几个常见的习题参考答案示例,以帮助大家更好地理解和学习 Java 程序设计:4.1 变量与数据类型:习题要求定义一个整型变量并赋值为10,然后输出该变量的值。
```public class VariableExample {public static void main(String[] args) {int num = 10;System.out.println("变量的值为:" + num);}}```4.2 条件语句:习题要求判断一个数是否是偶数,如果是,则输出“偶数”,否则输出“奇数”。
```public class EvenOddExample {public static void main(String[] args) {int num = 5;if (num % 2 == 0) {System.out.println("偶数");} else {System.out.println("奇数");}}}```4.3 循环语句:习题要求输出1到10之间的所有偶数。
习题1一、选择题1. 一个Java程序运行从上到下的环境次序是(C)A. 操作系统、Java程序、Java虚拟机、硬件B. Java虚拟机、Java程序、硬件、操作系统C. Java程序、Java虚拟机、操作系统、硬件D. Java程序、操作系统、Java虚拟机2. 以下关于JVM的说法,其中(C)是正确的。
A. JVM又称Java虚拟机,属于Java语言程序的编译工具,不支持Java程序的执行。
B. JVM与操作系统无关,但与计算机硬件有直接关系,不同的硬件需要不同的JVM。
C. Java字节码程序可以在任何安装有JVM的机器上无障碍地运行。
D. JVM的核心是JDK API,没有它,任何Java程序都不能正常运行。
3. 以下的计算机高级语言中,其中的(D)语言不支持面向对象对象程序设计。
A. C++B. Viaual BasicC. C#D. Truebo C4. 以下关于Java语言的说法,其中(D)是不正确的。
A. Java是完全面向对象的程序设计语言,其具有很强的安全性和跨平台能力。
B. Java语言所具有的很高的“移植性”,主要缘于其“Java虚拟机”的运行机制。
C. 在JDK下编译Java源程序的命令名为javac,运行Java程序的命令是java。
D. 由于Java源程序采用简单文本文件协议存储,所以其源程序文件的扩展名可以是.txt。
二、填空题1. SUN公司于1999.6在其推出的JDK1.3中,将Java划分为J2EE、J2SE和J2ME等三个平台对外发布。
2. Java程序编译后得到的字节码文件的扩展名(文件名后缀)为.class。
3. Java程序可以分为Application 和App let两种类型,其中后者主要用于WEB 浏览器中运行。
4. Java的应用可以分为桌面应用,Web及企业级应用,和嵌入式应用三类。
三、简答题1. Java程序设计语言有哪些优点和缺点?一,跨平台性,通过JVM的编译可以在任何的操作系统中运行java程序,而其它一般的语言如果换一个操作系统则无法运行,必须重新编译。
习题8一、选择题1.下面C 不是容器类。
A.JPanel B.JFrame C.Canvas D.JApplet解析:JPanel是—个无边框的中间层容器;JFrame(容器)扩展java.awt.Frame的外部窗体;java.awt包提供我们一个组件: Canvas画布(不是容器),它是一个可以在上面绘画的简单组件;Swing提供的顶层容器类之一:JApplet小应用程序。
2.JFrame默认的布局管理器是A 。
A.BorderLayout B.FlowLayout C.null D.GridLayout解析:对于JFrame和JWindow这样的顶层框架来说,默认的布局管理器是边界布局(BorderLayout)。
3.要使一组JRadioButton类对象具有单选性质,必须使用C 类。
A.JButton B.JButtonGroup C.ButtonGroup D.JPanel解析:JRadioButton组件实现一个单选按钮,用户可以很方便地查看单选按钮的状态。
JradioButton类可以单独使用,也可以与ButtonGroup类联合使用。
当单独使用时,该单选按钮可以被选定和取消选定;当与ButtonGroup类联合使用时,则组成了一个单选按钮组,此时用户只能选定其中的一个单选按钮,取消选定的操作由ButtonGroup类自动完成。
4.在其他方法中要调用paint方法,可以通过使用D 方法来实现。
A.构造B.super C.paint D.repaint解析:C不是其他方法;repaint() 方法一定会调用paint。
5.要在JFrame上添加菜单,首先应添加B 。
A.下拉式菜单B.菜单栏C.菜单项D.常规菜单解析:有了菜单栏,才有菜单项,很多菜单项才会有下拉式菜单。
6.ActionListener是C 监听器接口。
A.键盘事件B.鼠标事件C.动作事件D.调整事件解析:动作事件,例如用鼠标单击命令式按钮。
第9章继承与派生课后习题参考答案一、单项选择题1.下列有关派生类的叙述中,错误的是(D)。
A.一个派生类至少有一个基类B.派生类的默认继承方式是privateC.一个派生类可以作为另一个派生类的基类D.派生类只继承了基类的公有成员和保护成员2.下列有关类继承的叙述中,错误的是(B)。
A.继承可以实现软件复用B.派生类没有继承基类的私有成员C.虚基类可以解决由多继承产生的二义性问题D.派生类构造函数要负责调用基类的构造函数3.有如下类定义:class XX{int xdata;public:XX(int n=0):xdata(n){}};class YY:public XX{int ydata;public:YY( int m=0,int n=0):XX(m),ydata(n){}};YY类的对象包含的数据成员的个数为(B)。
A.1B.2C.3D.44.设类的定义如下,且int型数据在内存中用4个字节存储,则类B 的对象占据内存空间的字节数为(C)。
class A{int b;protected:int a;};class B:public A{{int c;public:int getC(){return c;}};A.4B.8C.12D.165.如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问权限分别是(D)。
A.private和publicB.private和protectedC.protected和publicD.protected和protected6.可以用p.a的形式访问派生类对象p的基类成员a,则a是(D)。
A.私有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.公有继承的公有成员7.设有如下类定义:class Base {protected:void fun(){}//…};class Derived:Base{//…};则Base类中的成员函数fun(),在Derived类中的访问权限是(C)。
第9章
习题答案
一、是非题
(1)T
(2)T
(3) F
(4) F (进入可运行状态,运行需要等待CPU调度)
(5)T
(6)T
二、选择题
(1) B
(2) D
(3) B
(4) A
(5) B
(6) B
(7) D
三、简答题
(1)继承Thread类或者实现Runnable接口
(2)执行完线程中的run() 代码后,线程就自动结束并自我销毁,无法再次调用start (3)多线程会访问到相同的资源,如果不做同步控制,会导致访问资源的混乱
(4)wait和sleep都可以阻塞线程,不同的是wait阻塞线程不占用CPU资源,而sleep 阻塞线程时需要占用CPU资源
(5)notify()方法可以通知单个线程,而notifyAll()方法则通知所有等待线程。
(6)同步的实现有两种,分别是synchronized,wait与notify
四、填空题
(1)线程
(2)确定,不确定
(3)线程
(4)并行执行
(5)继承Thread和实现Runnable
五、编程题
1.
class Thread1 extends Thread
{
public void run()
{
for(int i = 0; i < 10; i++)
{
System.out.println("我在接听电话");
}
}
}
class Thread2 extends Thread
{
public void run()
{
for(int i = 0; i < 10; i++)
{
System.out.println("我在写年终总结");
}
}
}
public class Exer_1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2();
t1.run();
t2.run();
}
}
2.
class odd implements Runnable {
private Exer2 t;
public odd(Exer2 t) {
this.t = t;
}
public void run() {
// TODO Auto-generated method stub
int num = 1;
while (num < 1000) {
// 两个线程都用t对象作为锁,保证每个交替期间只有一个线程在打印
synchronized (t) {
if (t.state != 2) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(num);
num += 2;
t.state = 1;
t.notifyAll();
}
}
}
}
class even implements Runnable {
private Exer2 t;
public even(Exer2 t) {
this.t = t;
}
public void run() {
int num = 0;
// TODO Auto-generated method stub
while (num < 1000) {
// 两个线程都用t对象作为锁,保证每个交替期间只有一个线程在打印
synchronized (t) {
if (t.state != 1) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(num);
num += 2;
t.state = 2;
t.notifyAll();
}
}
}
}
public class Exer2 {
public int state = 1;
/**
* @param args
*/
public static void main(String[] args) { // TODO Auto-generated method stub
Exer2 t = new Exer2();
new Thread(new odd(t)).start();
new Thread(new even(t)).start();
}
}
3.
public class Exer3
{
private int number;
public synchronized void increase()
{
if(number != 0)
{
try
{
wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
number++;
System.out.println(number);
notify();
}
public synchronized void decrease()
{
if(number == 0)
{
try
{
wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
number--;
System.out.println(number);
notify();
}
}
4.
class BookingClerk implements Runnable
{
private int ticketsNum = 10;
public synchronized void booking(int num)
{
if(this.ticketsNum < num)
{
System.out.println("票不足");
}
else
{
this.ticketsNum-=num;
System.out.println("成功订购"+num+"张票,还剩"+this.ticketsNum+"张票");
}
}
public void run() {
// TODO Auto-generated method stub
for(;;)
booking(1);
}
}
public class Exer4 {
public static void main(String[] args)
{
new Thread(new BookingClerk()).start();
new Thread(new BookingClerk()).start();
}
}。