Java习题解答 下载本文

第1章 Java语言概述

习 题 一

一、简答题

1.Java语言的诞生日是哪一天?它有哪些特点与优势? 2.Java语言程序分为哪几种?Java Application程序和Java Applet程序的主要区别是什么?

3.Java Application程序在结构上有哪些特点?如何编译、运行?被编译后生成什么文件?该文件机器可以直接识别吗?如何执行?

4.安装JDK后如何对JAVA_HOME、PATH和CLASSPATH环境变量进行设置?它们的作用是什么?

5.Java程序在书写上应注意哪些事项?有哪些编码规范?

6.为什么要对程序进行注释?Java中有哪几种注释?文档注释符与多行注释符有何不同? 二、选择题

1.下面关于Java Application 程序结构特点描述中,错误的是( D )。 A.一个Java Application程序由一个或多个文件组成,每个文件中可以定义一个或多个类,每个类由若干个方法和变量组成。

B.Java程序中声明有public类时,则Java程序文件名必须与public类的类名相同,并区分大小写,扩展名为.java。

C.组成Java Application程序的多个类中,有且仅有一个主类。 D.一个.java文件中定义多个类时,允许其中声明多个public类。 2.编译Java程序后生成的面向JVM的字节码文件的扩展名是( B )。 A..java B..class C..obj D..exe 3.下面关于Java 语言特点的描述中,错误的是( A )。 A.Java是纯面向对象编程语言,支持单继承和多继承。

B.Java支持分布式的网络应用,可透明地访问网络上的其他对象。 C.Java支持多线程编程。

D.Java程序与平台无关、可移植性好。

4.Java SE的命令文件(java、javac、javadoc等)所在目录是( C )。 A.%JAVA_HOME%\\jre B.%JAVA_HOME%\\lib C.%JAVA_HOME%\\bin D.%JAVA_HOME%\\demo

5.下列关于运行字节码文件的命令行参的描述中,正确的是( C )。 A.命令行的命令字被存放在args[0]中。

B.数组args[]的大小与命令行的参数的个数无关。

C.第一个命令行参数(紧跟命令字的参数)被存放在args[0]中。 D.第一个命令行参数被存放在args[1]中。 6.paint()方法使用哪种类型的参数? ( A )

A.Graphics B.Graphics2D C.String D.Color 7.Java的核心包中,提供编程应用的基本类的包是( B )。

A.java.util B.java.lang C.java.applet D.java.rmi

8.编译Java程序时,用于指定生成class文件位置的选项是( A )。 A.-d B.-g C.-verbose D.-nowarn 9.下列标识符(名字)命名原则中,正确的是( C )。 A.类名的首字母小写 B.接口名的首字母小写

C.常量全部大写 D.变量名和方法名的首字母大写 10.下面哪些选项是正确的main方法说明?( D )

A.void main() B.private static void main(String args[])

C.public main(String args[]) D.public static void main(String args[])

11.下面哪种注释方法能够支持javadoc命令?( C )

A.// B./*...*/ C./**...*/ D./**...**/ 三、判断题

1.Java语言具有较好的安全性和可移植性及与平台无关等特性。( √ ) 2.Java语言的源程序不是编译型的,而是编译解释型的。( √ )

3.Java Application程序中,必有一个主方法main(),该方法有没有参数都可以。( √ )

4.java.util.Scanner(System.in)可以接收用户从键盘输入的简单数据。( √ )

5.Java程序中不区分大小写字母。( × )

6.机器不能直接识别字节码文件,它要经过JVM中的解释器边解释边执行。( √ )

7.System类中的println()方法分行显示信息,而print()方法不分行显示信息。( √ )

8.当前路径的标识是“.”。 ( √ )

9.java命令不区分大小写,而javac命令区分大小写。( × )

10.printf()和 format()方法使用指定格式字符串和参数,将格式化字符串写入到PrintStream类型的输出流(System.out对象)中。( √ )

11.在运行字节码文件时,使用java命令,一定要给出字节码文件的扩展名.class。( × ) 四、编程题

1.分别用UltraEdit、NetBeans、Eclipse、JBuilder和JCreator编写一个Java Application程序,使该程序运行后输出字符串“Nothing is too difficult if you put your head into it .”。

2.编写一个具有交互功能的Java Application程序,提示从键盘输入应付金额和实付金额后,计算并输出找零或欠付金额。

3.编写一个Java Applet程序,使该程序运行后输出字符串“Don’t put off till tomorrow what should be done today.”。

第2章 Java语言基础

习 题 二

一、填空题

1.已知:int a =8,b=6; 则:表达式++a-b++的值为( 3 )。 2.已知:boolean b1=true,b2; 则:表达式! b1 && b2 ||b2的值为( false )。

3.已知:double x=8.5,y=5.8; 则:表达式x++>y--值为( true )。 4.已知:int a[ ]={2,4,6,8}; 则:表达式(a[0]+=a[1])+ ++a[2]值为( 13 )。

5.执行int x, a = 2, b = 3, c = 4; x = ++a + b++ + c++; 结果是( x=10,a=3,b=4,c=5 )。

6.Java中的显式类型转换既能(从低类型向高类型转换)也能从高类型向低类型转换,而隐式类型转换只有前者。

7.在Java中,字符串和数组是作为(对象)出现的。 8.执行下列程序代码的输出结果是( 10,11,11 )。

int a = 10; int i, j; i = ++a; j = a--; System.out.printf(\

9.执行完boolean x=false; boolean y=true; boolean z=(x&&y)&&(!y) ; int f=z==false?1:2;

这段代码后,z与f的值分别是( false )和( 1 )。 二、选择题

1.下面哪些标识符在Java语言中是合法的?( AB )

A.persons$ B.TwoUsers C.*point D.instanceof F.end-line

2.下列( D )是合法标识符。

A.2end B.-hello C.=AB D.整型变量 3.已知int i = 2 147 483 647; ++i; 则i的值等于( A )。

A.- 2 147 483 648 B.2 147 483 647 C.2 147 483 648 D.-1

4.若x = 5,y = 8,则表达式x|y的值为( B )。 A.3 B.13 C.0 D.5

5.若定义有变量float f1,f2 = 8.0F,则下列说法正确的是( B )。 A.变量f1,f2均被初始化为8.0 B.变量f1没有被初始化,f2被初始化为8.0

C.变量f1,f2均未被初始化 D.变量f2没有被初始化,f1被初始化为8.0

6.基本数据类型short的取值范围是( B )。

A.(-256)~ 255 B.(-32 768)~ 32 767 C.(-128)~ 127 D.0~65 535

7.下列( B )是不能通过编译的语句。

A.double d = 545.0; B.char a1 = “c”; C.int i = 321; D.float f1 =45.0f;

8.若定义有short s; byte b; char c; 则表达式s * b + c的类型为( C )。

A.char B.short C.int D.byte 9.下列循环语句的循环次数是( B )。 int i=5;

do { System.out.println(i--);

i--;

}while(i!=0);

A.5 B.无限 C.0 D.1

10.下列代码哪几行会出错?( C )

1) public void modify() { 2) int I, j, k; 3) I = 100;

4) while (I > 0) { 5) j = I * 2;

6) System.out.println(\7) k = k + 1; 8) I--; 9) } 10 }

A.line 4 B.line 6 C.line 7 D.line 8 11.下列关于数组的定义形式,哪些是错误的?( ABC )

A.int[ ]c=new char[10]; B.int[ ][3]=new int[2][ ]; C.int[ ]a; a=new int; D.char b[ ]; b=new char[80];

12.执行String[] s=new String[10];语句后,哪些结论是正确的?( BC )

A.s[0] 为 未定义 B.s.length 为10 C.s[9] 为 null D.s[10] 为 \

13.下列关于Java语言的数组描述中,错误的是( D )。 A.数组的长度通常用length表示 B.数组下标从0开始

C.数组元素是按顺序存放在内存的 D.数组在赋初值和赋值时都不判界 14.下面的表达式哪些是正确的? ( ACE ) A.String s=\你好\

B.String s=\你好\C.String s=\你好\

D.String s=\你好\

E. String s=null; int i=(s!=null)&&(s.length()>0)?s.length():0; 15.下列代表十六进制整数的是( C )。

A.012345 B.2008 C.0xfa08 D.fb05 16.在switch(expression)语句中,expression的数据型不能是( C )。 A.char B.short C.double D.byte 17.下列说法正确的是( AC )。

A.表达式“1+2>3”的值是false B.表达式“1+2||3”是非法的表达式 C.表达式“i+j=1”是非法的表达式 D.表达式“1+2>3”的值是true

18.指出正确的表达式( B )。

A.byte=128; B.long l=0xfffL; C.Boolean=null; D.double=0.9239d;

19.public class T18 {

static int arr[] = new int[10];

public static void main(String a[]) { System.out.println(arr[1]); } }

哪个语句是正确的?( C )

A.编译时将产生错误 B.编译时正确,运行时将产生错误 C.输出零 D.输出空

20.若String s = \e','l','l','o'} ; 则下列哪些表达式返回true?( AB )

A.s.equals(t); B.t.equals(new String(\C.t.equals(c); D.s==t; 21.执行下面的代码段:

switch(m){ case 0: System.out.println(\

case 1: System.out.println(\ case 2:

default: System.out.println(\

}

下列m的哪些值将引起\的输出?( CD ) A.0 B.1 C.2 D.3

22.下列关于“<<”和“>>”的运算,哪些是正确的?( AC ) A.0000 0100 0000 0000 0000 0000 0000 0000<<5 的运行结果是

1000 0000 0000 0000 0000 0000 0000 0000

B.0000 0100 0000 0000 0000 0000 0000 0000<<5的运行结果是

1111 1100 0000 0000 0000 0000 0000 0000

C.1100 0000 0000 0000 0000 0000 0000 0000>>5的运行结果是

1111 1110 0000 0000 0000 0000 0000 0000

D.1100 0000 0000 0000 0000 0000 0000 0000>>5的运行结果是

0000 0110 0000 0000 0000 0000 0000 0000 三、判断题

1.Java语言使用的是Unicode字符集,每个字符在内存中占8位。( × )

2.Java语言中不同数据类型的长度是固定的,不随机器硬件不同而改变。( √ )

3.所有的变量在使用前都必须进行初始化。( × )

4.已知byte i = (byte)127; i = i +1;这两个语句能被成功编译。( √ )

5.String str=\char chr=str.charAt(9); ( × ) 6.char[] chrArray={ 'a', 'b', 'c', 'd', 'e', 'f', 'g'}; char chr=chrArray[6]; ( √ )

7.int i,j; boolean booleanValue=(i==j); ( × )

8.int intArray[]={0,2,4,6,8}; int length=int Array.length();( × )

9.String str=\( × )

10.short shortValue=220; byte byteValue=shortValue; ( × ) 11.int[] intArray[60]; ( × )

12.char[] str=\( × )

13.说明或声明数组时不分配内存大小,创建数组时分配内存大小。( √ )

14.强制类型转换运算符的功能是将一个表达式的类型转换为所指定的类型。( √ ) 四、分析题

1.分析下面的程序,写出运行结果。 public class Exercises5_1 {

String str = new String(\ char[] ch = { 'L', 'i', 'k', 'e' };

public static void main(String args[]) { Exercises5_1 ex = new Exercises5_1(); ex.change(ex.str, ex.ch); System.out.print(ex.str + \ System.out.print(ex.ch); }

public void change(String str, char ch[]) { str = \ ch[1] = 'u'; } }

运行结果是:( Hi ! Luke )

2.分析下面的程序,写出运行结果。 public class Exercises5_2 {

public static void main(String[] args) { int n = 1, m, j, i; for (i = 3; i <= 30; i += 2) { m = (int) Math.sqrt((double) i);

for (j = 2; j <= m; j++) if ((i % j) == 0) break; if (j >= m + 1) { System.out.print(i + \ if (n % 5 == 0) System.out.print(\ n++; } } } }

运行结果是:( )

3 5 7 11 13 17 19 23 29

3.分析下面的程序,写出运行结果: public class Exercises5_3 { public static void main(String args[]) { String str1 = new String(); String str2 = new String(\ char chars[] = { 'a', ' ', 's', 't', 'r', 'i', 'n', 'g' }; String str3 = new String(chars); String str4 = new String(chars, 2, 6); byte bytes[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 }; String str5 = new String(bytes); StringBuffer strb = new StringBuffer(str3); System.out.println(\ System.out.println(\ System.out.println(\ System.out.println(\ System.out.println(\ System.out.println(\ }

}

运行结果是:( )

The String str1 is

The String str2 is String 2 The String str3 is a string The String str4 is string The String str5 is 0123456789 The String strb is a string

五、改错题

1.找出下面代码的错误部分,说明错误类型及原因,并更正。

public int m1 (int number[20]){ number = new int[20]; for(int i=0;i

改正后程序:

public int[] m1(int number[]) { // number = new int[20];

for (int i = 1; i < number.length - 1; i++) }

number[i] = number[i - 1] + number[i + 1];

return number;

2.找出下面代码的错误部分,说明错误类型及原因,并更正。

(1) int x = 1;

while (x <= 10); { i++; } 改正后程序:

int x = 1, i = 0; while (x <= 10) { i++; }

(2) switch (n) { case 1: system.out.println(\ case 2: system.out.println(\ break;

}

改正后程序:

int n = 1; switch (n) { case 1:

System.out.println(\); break;

System.out.println(\); break;

case 2:

}

六、简答题

1.Java的关键字有哪些?

2.标识符有何用途?Java中定义标识符的规则有哪些?

3.Java定义了哪些基本数据类型?基本数据类型和引用数据类型的特点是什么?字节型和字符型数据有何区别?长度为32位的基本数据类型有哪些?

4.整型常量有哪三种表示形式?浮点型变量有哪两种表示形式?布尔型常量可以转换成其他数据类型吗?

5.在Java 语言中,表示字符串常量和字符常量时应注意哪些问题? 6.在Java转义字符表示中,ASCII码值对应的字符如何表示?Unicode字符集中对应的字符如何表示?

7.什么是表达式语句?什么是空语句?什么是块语句?可以把块语句视为一条语种吗?

8.if语句中,<条件表达式>一定是逻辑型表达式吗? switch语句中,<语句序列>里一定有break语句吗?

9.while循环语句与do-while循环语句有何不同?

10.for循环语句中,关键字for后面括号内的表达式是否可以使用多个用逗号分隔的表达式?for-each语句的特点是什么?

11.break语句和continue语句有哪两种形式?

12.创建数组元素为基本数据类型的数组时,系统都会指定默认值吗?布尔型的默认值是什么?

13.在Java中怎样定义和使用一维数组、二维数组? 14.字符串类String 和StringBuffer类有何不同?

15.Java中的数组实际上是一个隐含的“数组类”的对象,而数组名实际上是该对象的一个引用,这种说法对吗?

16.字符数组与字符串有本质的不同,而字符串实际上是String类和StringBuffer类的对象,这种说法对吗? 七、编程题

1.编写一个程序,求1!+2!+?+10!的值。 2.编程求100以内的全部素数。

3.使用异或运算符“^”实现两个整数的交换。 4.编写一个程序,打印输出下列5×5螺旋方阵:

1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9

5.给出任意两个日期,编程计算它们相距的天数。 6.编程输出下列图形:

* *** *****

*** *

7.编程验证哥德巴赫猜想,即任何大于6的偶数可以表示为两素数之和,如10=3+7。

8.百鸡百钱问题,公鸡每只3元,母鸡每只5元,小鸡3只1元,用100元钱买100只鸡,公鸡、母鸡和小鸡各买多少?

9.编写一个程序,利用数组把10个数用直接交换方法从小到大排序。 10.编写一个程序,用选择法对数组a[]={9, 5, 3, 12, 22, 35, 88, 11, 90, 1}进行由小到大的排序。

11.找出一个二维数组的鞍点,即该位置上的元素在该行上最大、在列上最小(也可能没有)。

12.编写一个程序,打印输出10行杨辉三角形。

13.编写一个程序,实现字符串的大小写字母的相互转换。 14.编写一个程序,找出两个字符串中所有相同的字符。 15.编写一个程序,对字符串数组按字典序重新排列。

16.编写一个程序,分析输出字符串中的单词,并统计单词个数。

17.编写一个程序,将字符串“.ymene tsrow sih si nam yrevE”反转。

第3章 Java语言面向对象基础

习 题 三

一、填空题

1.类是一组具有相同(属性)和(行为)的对象的抽象。(实例)是由某个特定的类所描述的一个个具体的对象。

2.(接口)只描述系统所提供的服务,而不包含服务的实现细节。

3.模型应具有(抽象性)、(可理解性)、(精确性)、(确定性)和廉价性等基本特性。

4.UML定义了(用例图)、(静态图)、(交互图)、行为图和实现图五类模型图。

5.在UML类图中分别用( + )、( # )、( ~ )和( - )表示属性与方法的公有、保护、默认和私有访问控制权限。

6.在UML中,类之间主要有(关联)、(依赖)、(聚集)、(泛化)和实现五种关系。

7.构造方法的方法名与(类名)相同,若类中没有定义任何的构造方法,则运行时系统会自动为该类生成一个(默认构造)方法。

8.在方法体内定义的变量是(局部变量),其前面不能加(public),且必须(初始化)。

9.数组元素作实参时对形参变量的数据传递是(单向值传递),数组名作实参时对形参变量的数据传递是(双向引用传递)。

10.对象作方法形参时,方法实参也用对象,实现(引用)调用。 11.( new)是一个特殊的方法,用于创建一个类的实例。

12.对象拷贝有(对象引用复制)、(浅复制)和(深复制)三种。

13.(类)方法不能直接访问其所属类的(实例)变量和(实例)方法,只可直接访问其所属类的(类)变量和(类)方法。

14.(类)变量在内存中只有一个拷贝,被该类的所有对象共享;每当创建一个实例,就会为(实例)变量分配一次内存,(实例)变量可以在内存中有多个拷贝,互不影响。

15.Java使用固定于首行的(package)语句来创建包。 16.在运行时,由java解释器自动引入,而不用import语句引入的包是(java.lang)。

17.发布Java应用程序或类库时,通常可以使用JDK中自带的(JAR)命令打包。 二、简答题

1.名词解释:OO、OOSE、OOA、OOD、OOP;抽象、对象、类、实例、方法、属性、消息、接口、封装、继承、多态性;模型、UML、类图、对象图、用例图、顺序图、协作图、状态图、活动图、包图、构件/组件图、部署图。

2.简述面向对象的基本思想、主要特征和基本要素。 3.为什么要对类进行封装?封装的原则是什么?

4.类的封装性、继承性和多态性各自的内涵是什么? 5.简述依赖、关联和聚集的区别。

6.什么是对象?什么是类?二者有何关系?

7.Java中类定义的一般格式是什么?定义类的修饰符有哪些?各自的特点是什么?

8.Java中成员变量定义的一般格式是什么?成员变量有哪些修饰符? 9.Java中成员方法定义的一般格式是什么?成员方法有哪些修饰符? 10.简述构造方法的特点与作用。

11.Java中创建对象的一般格式是什么?如何初始化对象?如何给对象赋值?

12.什么是类变量(静态变量)?什么是实例变量?它们的存储特性、访问方法、主要区别是什么?

13.什么是类方法(静态方法)?什么是实例方法?它们的存储特性、访问方法、主要区别是什么?

14.什么是包?如何创建包?如何引用包?

15.Import语句和package语句的功能分别是什么? 16.举例说明JAR包的创建、加载与运行方法。 三、选择题

1.下面关于封装性的描述中,错误的是( D )。

A.封装体包含属性和行为 B.被封装的某些信息在外不可见

C.封装提高了可重用性 D.封装体中的属性和行为的访问权限相同

2.下面关于类方法的描述,错误的是( B )。

A.说明类方法使用关键字static B.类方法和实例方法一样均占用对象的内存空间

C.类方法能用实例和类名调用 D.类方法只能处理类变量或调用类方法 3.下面关于包的描述中,错误的是( A )。

A.包是若干对象的集合 B.使用package语句创建包 C.使用import语句引入包 D.包分为有名包和无名包两种 4.下述哪些说法是正确的?( BC )

A.用static关键字声明实例变量 B.实例变量是类的成员变量 C.局部变量在方法执行时创建 D.局部变量在使用之前必须初始化 5.下面哪些代码段是正确的Java源程序?( BCD )

A.import java.io.*; B.import java.io.*;

package testpackage; class Person{/* do som

ething... */}

public class Test{/* do something... */} public class Tes

t{/* do something... */}

C.import java.io.*; D.package testpackage;

import java.awt.*; public class Test{/* d

o something... */}

public class Test{/* do something... */} 四、判断题

1.类是一种类型,也是对象的模板。( √ ) 2.类中说明的方法可以定义在类体外。( × ) 3.实例方法中不能引用类变量。( × )

4.创建对象时系统将调用适当的构造方法给对象初始化。( √ )

5.使用运算符new创建对象时,赋给对象的值实际上是一个引用值。( √ )

6.对象赋值实际上是同一个对象具有两个不同的名字,它们都有同一个引用值。( √ )

7.对象可作方法参数,对象数组不能作方法参数。( × ) 8.class是定义类的惟一关键字。( √ )

9.Java语言会自动回收内存中的垃圾。( √ ) 五、分析题

分析下面的程序,写出运行结果。

import java.awt.*; import java.applet.*; class MemberVar {

static int sn = 30; final int fn; final int fk = 40;

}

MemberVar() { fn = ++sn; }

public class Exercises5_1 extends Applet { }

public void paint(Graphics g) { MemberVar obj1 = new MemberVar(); MemberVar obj2 = new MemberVar();

g.drawString(\ g.drawString(\ g.drawString(\ g.drawString(\}

运行结果是:( ) obj1.fn=31 obj1.fk=40 obj2.fn=32 obj2.fk=40 六、改错题

1.下面的程序中有若干个语法错误,找出后请改正。 public class MyMainClass{

public static void main( ) { TheOtherClass obj = new TheOtherClass(\ale\

System.out.println(obj.name+' '+obj.gender+' '+obj.nationality);

}

System.out.println(\}

public class TheOtherClass{ private String name,gender,nationality; public TheOtherClass(String name,String gender,String nationality) {

this.name=name; this.gender=gender; this.nationality=nationality;

} }

改正后程序:

public class MyMainClass {

public static void main(String args[]) {

}

TheOtherClass obj = new TheOtherClass(\, \, \); System.out.println(obj.name + ' ' + obj.gender + ' ' + obj.nationality); System.out.println(\); }

class TheOtherClass {

public String name, gender, nationality;

public TheOtherClass(String name, String gender, String nationality) { this.name = name; this.gender = gender;

this.nationality = nationality; } }

2.下面的程序中有若干个语法错误,找出后请改正。

public class Car{ private String carName; public int mileage; private static final int TOP_SPEED=50; abstract void alert(); public static int getTopSpeed(){ return TOP_SPEED;

}

public static void setCarName(){ carName=\}

public static void setMileage(){ mileage=180; } }

改正后程序:

public abstract class Car {

private String carName; public int mileage;

private static final int TOP_SPEED = 50; abstract void alert();

public static int getTopSpeed() { return TOP_SPEED; }

public void setCarName() { carName = \; }

public void setMileage() { mileage = 180; }

}

七、编程题

1.设计(用UML的类图表示)并实现一点类Point,该类的构成包括点的x和y两个坐标,其构造方法、设置和修改坐标、求解两点距离的方法等,编写应用程序生成该类的对象并对其进行操作。

2.设计(用UML的类图表示)并实现一个矩形类Rectangle,包括其构造方法、求解矩形面积和周长的方法等,实例化后输出相应的信息。

3.计算出Fibonacci数列的前n项,Fibonacci数列的第一项和第二项都是1,从第三项开始,每项的值都是该项的前两项之和。即:

F(n) = F (n-1) + F(n-2) n≥3 F(1) = F(2) = 1 n=1,2

4.参照“图3-4”实现Student类的定义,然后生成该类的对象后进行相关操作。

第4章 Java语言面向对象高级程序设计

习 题 四

一、填空题

1.在面向对象系统中,消息分为(公有消息)和(私有消息)两类。 2.类的访问控制符有(public)和(默认default)两种,(public)类具有跨包访问性而(default)类不能被跨包访问。

3.类成员的访问控制符有(public)、(protected)、(private)和默认四种。

4.public类型的类成员可被(同一类)、同一包中的(子类与非子类)和不同包中的 (子类与非子类)的代码访问引用。

5.protected类型的类成员可被(同一类)、同一包中的(子类与非子类)和不同包中的(子类)的代码访问引用。

6.default类型的类成员只能被(同一类)、同一包中的(子类与非子类)的代码访问引用。

7.private类型的类成员只能被其所在类中的代码访问引用,它只具有(类)域访问性。

8.系统规定用(this())表示当前类的构造方法,用(super())表示直接父类的构造方法,在构造方法中两者只能选其一,且须放在第一条语句。

9.若子类和父类在同一个包中,则子类继承父类中的(public)、(protected)和(默认)成员,将其作为子类的成员,但不能继承父类的(private)成员。

10.若子类和父类不在同一个包中,则子类继承了父类中的(public)和(protected)成员,将其作为子类的成员,但不能继承父类的(默认)和(private)成员。

11.(子类对象)直接赋值给(父类对象)时,子类对象可自动转换为父类对象,(父类对象)赋值给(子类对象)时,必须将父类对象强制转换为子类对象。

12.Java的多态性主要表现在(方法重载)、(方法覆盖)和(变量覆盖)三个方面。

13.重写后的方法不能比被重写的方法有(更严格)的访问权限,重写后的方法不能比被重写的方法产生更多的异常。

14.Java语言中,定义子类时,使用关键字(extends)来给出父类名。如果没有指出父类,则该类的默认父类为(Object类)。

15.Java语言中,重载方法的选择是在编译时进行的,系统根据(参数个数)、(参数类型)和参数顺序寻找匹配方法。

16.实现接口中的抽象方法时,必须使用(完全相同)的方法头,并且还要用(public)修饰符。

17.接口中定义的数据成员均是(常量数据成员),所有成员方法均为(抽象方法)方法,且没有(构造)方法。

18.this代表(当前对象自身)的引用,super表示的是当前对象的直接父类对象。

19.如果一个类包含一个或多个abstract方法,则它是一个(abstract)类。

20.Java不直接支持多继承,但可以通过(接口)实现多继承。类的继承具有(传递)性。

21.没有子类的类称为(最终类),不能被子类重载的方法称为(最终方法),不能改变值的量称为常量,又称为(最终变量)。

22.一个接口可以通过关键字extends来继承(多个)其他接口。

23.接口中只能包含(public static final)类型的成员变量和(public abstract)类型的成员方法。

24.一般地,内部类又分为定义在方法体外的(成员类)和定义在方法体内的(局部类)两种。

25.静态内部类可直接通过外部类名引用,其一般格式是(new 外部类名.内部类构造方法( );)。

26.匿名类一般分为(语句匿名类)和(参数匿名)类两种。

27.面向对象的软件设计中,根据目的不同模式可分为(创建型)、(结构型)和(行为型)三种。 二、简答题

1.什么是继承?什么是父类?什么是子类?继承的特性可给面向对象编程带来什么好处?什么是单继承?什么是多重继承?

2.如何创建一个类的子类?

3.若在一个public类中的成员变量及成员方法的访问控制符为protected,则此类中的成员可供什么样的包引用?

4.什么是多态?使用多态有什么优点?Java中的多态有哪几种?重载方法与覆盖方法分别属于哪种多态?

5.什么是重载方法?什么是覆盖方法?它们的主要区别是什么? 6.什么是成员变量的继承?什么是成员变量的覆盖?

7.举例说明什么是上转型对象,上转型对象的操作原则是什么? 8.简述接口定义的一般格式。

9.什么是接口?如何定义接口?接口与类有何区别? 10.一个类如何实现接口?实现某接口的类是否一定要重载该接口中的所有抽象方法?

11.比较接口与抽象类的异同。

12.什么是抽象类?什么是抽象方法?各自有什么特点? 13.什么是最终类?什么是最终变量?什么是最终方法? 14.简述内部类的类型。

15.简述在外部类的内部与外部对实例成员类实例化的方法。 16.简述定义语句匿名类和参数匿名的一般格式。 17.什么是适配器模式?什么是装饰模式? 三、选择题

1.下面关于类的继承性的描述中,错误的是( C )。 A.继承是在已有的基础上生成新类的一种方法 B.Java语言要求一个子类只有一个父类 C.父类中成员的访问权限在子类中将被改变

D.子类继承父类的所有成员,但不包括私有的成员方法

2.在成员方法的访问控制修饰符中,规定访问权限包含该类自身,同包的其他类和其他包的该类子类的修饰符是( B )。

A.默认 B.protected C.private D.public 3.在类的修饰符中,规定只能被同一包类所使用的修饰符是( B )。

A.public B.默认 C.final D.abstract

4.下列关于子类继承父类的成员描述中,错误的是( C )。

A.当子类中出现成员方法头与父类方法头相同的方法时,子类成员方法覆盖父类中的成员方法。

B.方法重载是编译时处理的,而方法覆盖是在运行时处理的。 C.子类中继承父类中的所有成员都可以访问。

D.子类中定义有与父类同名变量时,在子类继承父类的操作中,使用继承父类的变量;子类执行自己的操作中,使用自己定义的变量。

5.定义一个类名为“MyClass.java”的类,并且该类可被一个工程中的所有类访问,则下面哪些声明是正确的?( AB )

A.public class MyClass extends Object B.public class MyClass

C.private class MyClass extends Object D.class MyClass extends Object

6.下列关于继承性的描述中,错误的是( C )。 A.一个类可以同时生成多个子类 B.子类继承了父类中除私有的成员以外的其他成员

C.Java支持单重继承和多重继承 D.Java通过接口可使子类使用多个父类的成员

7.下列关于抽象类的描述中,错误的是( C )。

A.抽象类是用修饰符abstract说明的 B.抽象类是不可以定义对象的 C.抽象类是不可以有构造方法的 D.抽象类通常要有它的子类 8.设有如下类的定义: public class parent {

int change() {} }

class Child extends Parent { }

则,下面哪些方法可加入Child类中?( AB ) A.public int change(){ } B.int chang(int i){ }

C.private int change(){ } D.abstract int chang(){ }

9.下列关于构造方法的叙述中,错误的是( D )。

A.构造方法名与类名必须相同 B.构造方法没有返回值,且不用void声明

C.构造方法只能通过new自动调用 D.构造方法不可以重载,但可以继承

10.下面叙述中,错误的是( C )。

A.子类继承父类 B.子类能替代父类 C.父类包含子类 D.父类不能替代子类

11.下列对多态性的描述中,错误的是( B )。

A.Java语言允许方法重载与方法覆盖 B.Java语言允许运算符重载 C.Java语言允许变量覆盖 D.多态性提高了程序的抽象性和简洁性

12.下面关于接口的描述中,错误的是( A )。

A.一个类只允许继承一个接口 B.定义接口使用的关键字是interface C.在继承接口的类中通常要给出接口中定义的抽象方法的具体实现 D.接口实际上是由常量和抽象方法构成的特殊类

13.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的?( C )

A.ArrayList myList=new Object(); B.ArrayList myList=new List();

C.List myList=new ArrayList(); D.List myList=new List();

14.下列哪些方法与方法public void add(int a){}为合理的重载方法?( ACD )

A.public void add(char a) B.public int add(int a) C.public void add(int a,int b) D.public void add(float a)

15.MAX_LENGTH是int型public成员变量,变量值保持为常量100,其定义是( C )。

A.public int MAX_LENGTH=100; B.final public int MAX_LENGTH=100;

C.public final int MAX_LENGTH=100; D.final int MAX_LENGTH=100; 四、判断题

1.Java语言中,构造方法是不可以继承的。( √ )

2.子类的成员变量和成员方法的数目一定大于等于父类的成员变量和成员方法的数目。( × )

3.抽象方法是一种只有说明而无具体实现的方法。( √ ) 4.Java语言中,所创建的子类都应有一个父类。( √ )

5.调用this 或super构造方法的语句必须放在第一条语句。( √ ) 6.一个类可以实现多个接口,接口可以实现“多重继承”。 ( √ ) 7.实现接口的类不能是抽象类。( √ )

8.使用构造方法只能给实例成员变量赋初值。( √ )

9.Java 语言不允许同时继承一个类并实现一个接口。( × ) 五、分析题

1.分析下面的程序,写出运行结果。

public class Exercises6_1 extends TT{ public void main(String args[]){

Exercises6_1 t = new Exercises6_1(\ }

public Exercises6_1(String s){ super(s);

System.out.println(\ }

public Exercises6_1(){ this(\ } }

class TT{

public TT(){

System.out.println(\ }

public TT(String s){ this();

System.out.println(\ } }

运行结果是:( ) What a pleasure! I am Tom

How do you do?

2.分析下面的程序,写出运行结果。

public class Exercises6_2 { private static int count; private String name; public class Student { private int count; private String name; public void Output(int count) { count++; this.count++; Exercises6_2.count++; Exercises6_2.this.count++; System.out.println(count + \this.count + \

+ Exercises6_2.count + \ercises6_2.this.count++);

} }

public Student aStu() { return new Student(); }

public static void main(String args[]) { Exercises6_2 g3 = new Exercises6_2(); g3.count = 10; Exercises6_2.Student s1 = g3.aStu(); s1.Output(5); } }

运行结果是:( ) 6 1 12 12

3.分析下面的程序,写出运行结果。

class Exercises6_3 { class Dog { private String name; private int age; public int step; Dog(String s, int a) { name = s; age = a; step = 0; } public void run(Dog fast) {

fast.step++; } }

public static void main(String args[]) { Exercises6_3 a = new Exercises6_3(); Dog d = a.new Dog(\ d.step = 29; d.run(d); System.out.println(\ }

}

运行结果是:( ) 30

4.分析下面的程序,写出运行结果。

class Aclass { void go() { System.out.println(\ }

public class Bclass extends Aclass {

void go() { System.out.println(\

public static void main(String args[]) { Aclass a = new Aclass(); Aclass a1 = new Bclass(); a.go(); a1.go(); } }

运行结果是:( )

Aclass Bclass

六、改错题

1.找出下面代码的错误部分,说明错误类型及原因,并更正之。 public class Car {

private String carName; public int mileage;

private static final int TOP_SPEED = 200; abstract void alert();

public static int getTopSpeed() { return TOP_SPEED;

}

public static void setCarName() { carName = \奥迪\ }

public static void setMileage() {

mileage = 180; } }

错误:因为含有抽象方法的类,必须是抽象类;静态方法只能访问静态成员。

更正:

public abstract class Car { }

private String carName; public int mileage;

private static final int TOP_SPEED = 200; abstract void alert();

public static int getTopSpeed() { return TOP_SPEED; }

public void setCarName() { carName = \奥迪\; }

public void setMileage() { mileage = 180; }

2.下列代码不能编译的原因是:( )。 class A {

private int x;

public static void main(String args[]) { new B(); } class B { B() {System.out.println(x); } } }

因为在A类的main方法中,还没有A的实例就要试图生成内部类的实例。 更正如下:

public class A { }

private int x;

public static void main(String args[]) { A a = new A(); a.new B(); }

class B { B() { } }

System.out.println(x);

七、编程题

1.先在一个包中编写第一个类ClassA,要求该类中具有四种不同访问权限的成员,再在另一个包中编写第二个类ClassB,并在该类中编写一个方法以访问第一个类中的成员。总结类成员访问控制的基本规则。

2.设计一个汽车类Car,实现构造方法的重载,然后利用这些构造方法,实例化不同的对象,输出相应的信息。

3.设计一个乘法类Multiplication,在其中定义三个同名的mul方法:第一个方法是计算两个整数的积;第二个方法是计算两个浮点数的积;第三个方法是计算三个浮点数的积。然后以Java Applet程序方式调用这三个同名的方法mul,输出其测试结果。

4.已知编一个抽象类AbstractShape如下所示: abstract class AbstractShape { final double PI=3.1415926;

public abstract double getArea(); public abstract double getGirth(); }

请编写AbstractShape类的一个子类,使该子类实现计算圆面积方法getArea()和周长的方法getGirth()。

5.按下列要求编程:

(1)编写一个抽象类,至少有一个常量和一个抽象方法。

(2)编写二个抽象类的子类,重写定义抽象类中的抽象方法。 (3)编写一个主类使用3个类,进行某种运算。

6.设计一个形状Shapes接口,在其中定义计算面积的getArea( )方法和求周长的getPerimeter( )方法,然后设计一个Circle类以实现Shapes接口中的两个方法,最后以Java Application程序方式测试前述接口及其实现类,输出其测试结果。

7.使用继承和接口技术,编写一个程序,求解几何图形(如直线、三角形、矩形、圆和多边形)的周长和面积。

8.使用继承和接口技术,编写一个程序,求解一元多次方程(如一元一次、一元二次和一元高次方程)的解。

9.使用内部类技术构造一个线性链表。

10.参照例4-30以组合方式创建某类的适配器。

第5章 Java标准类库

习 题 五

一、简答题

1.计算调用下列方法的结果。

Math.sqrt(4); // 2.0 Math.pow(4, 3); // 64.0 Math.max(2, Math.min(3, 4)); // 3

2.下列程序中构造了一个set并且调用其方法add(),输出结果是( 2 )。

import java.util.*; public class T1_2 {

public int hashCode() { return 1; }

public boolean equals(Object b) { return true; }

public static void main(String args[]) { Set set = new HashSet(); set.add(new T1_2()); set.add(new String(\ set.add(new T1_2()); System.out.println(set.size()); } }

3.Collection有哪几种主要接口? (Collection、List、Map、Set) 4.基本的集合接口有哪些?

5.映射、集合和列表的含义是什么? 6.HashMap类和TreeMap类有何区别? 7.HashSet类和Treeset类有何区别?

8.ArrayList类和LinkedList类有何区别? 二、选择题

1.可实现有序对象的操作有哪些?( CD )

A.HashMap B.HashSet C.TreeMap D.LinkedList 2.迭代器接口(Iterator)所定义的方法是( ABC )。 A.hasNext() B.next()

C.remove() D.nextElement() 3.下列方法属于java.lang.Math类的有(方法名相同即可)( ABCD )。 A.random() B.abs() C.sqrt() D.pow() 4.指出正确的表达式有( AB )。

A.double a=2.0; B.Double a=new Double(2.0); C.byte A= 350; D.Byte a = 120; 5.System类在哪个包中?( B )

A.java.awt B.java.lang C.java.util D.java.io 6.关于Float,下列说法正确的是( ACD )。

A.Float在java.lang包中 B.Float a=1.0是正确的赋值方法

C.Float是一个类 D.Float a= new Float(1.0)是正确的赋值方法 三、判断题

1.Map接口是自Collection接口继承而来。( × )

2.集合Set是通过键-值对的方式来存储对象的。( × )

3.Integer i = (Integer.valueOf(\( √ )

4.String s = (Double.valueOf(\( √ ) 5.Integer I = Integer.parseInt(\( √ ) 6.Arrays类主要对数组进行操作。( √ ) 7.在集合中元素类型必须是相同的。( √ ) 8.集合中可以包含相同的对象。( × )

9.枚举接口定义了具有删除功能的方法。( × ) 四、编程题

1.编程生成10个1~100之间的随机数,并统计每个数出现的概率。 2.使用HashMap类保存由学号和学生姓名所组成的键-值对,比如\188\和\,然后按学号的自然顺序将这些键-值对一一打印出来。

3.编写一个程序,使用Map实现对学生成绩单的存储和查询,并将成绩排序存储到TreeSet中,求出平均成绩、最高分和最低分。

4.编写一个程序,实现将十进制整数转换为二进制、八进制和十六进制形式。

5.编写一个程序,在其中调用操作系统的注册表编辑器“regedit.exe”。 6.使用java.text.SimpleDateFormat类将系统日期格式化为“2007年8月20日”的形式输出。

7.编写程序实现:定义一个Float类型的数组,随机往其中填充元素,并打印该数组内容。

第6章 Java GUI程序设计

习 题 六

一、填空题

1.Swing的事件处理机制包括(事件源)、事件和事件监听者。

2.Java事件处理包括建立事件源、(建立事件监听器)和将事件源注册到监听器。

3.在Swing中,可以根据不同用户的习惯,设置不同的界面显示风格,Swing提供了三种显示风格,分别是(Metal风格)风格、( Motif风格)风格和(Windows风格)风格。

4.Swing的顶层容器有(JFrame)、JApplet、JWindow和JDialog。 5.(根面板)由一个玻璃面板、一个内容面板和一个可选择的菜单条组成。 二、简答题

1.试述AWT的事件处理机制。

2.什么是Swing?它比AWT有什么优点?使用上有何区别? 3.布局管理器的作用是什么?在JDK中哪些常用布局管理器?各有何特点? 4.什么是容器组件?组件与容器有何区别? 5.试述Swing常用组件的创建与使用。 三、选择题

1.Swing组件必须添加到Swing顶层容器相关的( B )。

A.分隔板上 B.内容面板上 C.选项板上 D.复选框内

2.Panel和Applet的默认布局管理器是( A )。

A.FlowLayout B.CardLayout C.BorderLayout D.GridLayout

3.容器类java.awt.container的父类是( C )。

A.java.awt.Frame B.java.awt.Panel C.java.awt.Componet D.java.awt.Windows

4.哪些布局管理器使用的是组件的最佳尺寸?( AE ) A.FlowLayout B.BorderLayout C.GridLayout D.CardLayout E.GridBagLayout

5.关于AWT和Swing说法正确的是( CD )。

A.Swing是AWT的子类 B.AWT在不同操作系统中显示相同的风格

C.AWT和Swing都支持事件模型 D.Swing在不同的操作系统中显示相同的风格

6.关于使用Swing的基本规则,下列说法正确的是( D )。 A.Swing组件可直接添加到顶级容器中 B.要尽量使用非Swing的重要级组件

C.Swing的Jbutton不能直接放到Frame上 D.以上说法都对

7.在Java编程中,Swing包中的组件处理事件时,下面( A )是正确的。

A.Swing包中的组件也是采用事件的委托处理模型来处理事件的

B.Swing包中的组件产生的事件类型,也都带有一个J字母,如JMouseEvent

C.Swing包中的组件也可以采用事件的传递处理机制

D.Swing包中的组件所对应的事件适配器也是带有J字母的,如JMouseAdapter 四、判断题

1.容器是用来组织其他界面成分和元素的单元,它不能嵌套其他容器。( × )

2.一个容器中可以混合使用多种布局策略。( × )

3.在Swing用户界面的程序设计中,容器可以被添加到其他容器中去。( √ )

4.使用BorderLayout布局管理器时,GUI组件可以按任何顺序添加到面板上。( √ )

5.在使用BorderLayout时,最多可以放入五个组件。( √ )

6.每个事件类对应一个事件监听器接口,每一个监听器接口都有相对应的适配器。( × )

7.Java中,并非每个事件类都只对应一个事件。( √ ) 五、编程题

1.编写一个JApplet程序,包含一个JLabel对象,并显示用户的姓名。 2.JButton与Button有何不同?编写一个图形界面的Application程序,包含一个带图标的JButton对象。当用户单击这个按钮时,Application程序把其标题修改为“单击按钮”。

3.JPasswordField是谁的子类?它有什么特点?编写JApplet程序接受并验证用户输入的账号和密码,一共提供3次输入机会。

4.编程包含一个单选按钮组和一个普通按钮,单选按钮组中包含三个单选,文本说明分别为“普通”、“黑体”和“斜体”。选择文本标签为“普通”的单选按钮时,普通按钮中的文字为普通字体,选择文本标签为“黑体”的单选按钮时,普通按钮中文字的字体为黑体,选择文本标签为“斜体”的单选按钮时,普通按钮中文字的字体为斜体。

5.编程包含一个下拉列表和一个按钮,下拉列表中有10、14、18三个选项。选择10时,按钮中文字的字号为10,选择14时,按钮中文字的字号为14,选择18时,按钮中文字的字号为18。

第7章 Java Applet及其应用

习 题 七

一、填空题

1.Applet生命周期方法有init()、( start() )、stop()和destroy()。 2.与显示相关的Applet方法有(paint() )、repaint()和update()。 二、简答题

1.init()方法在Java Applet中起什么作用? 2.Java Applet中的主要方法是哪几个? 3.Java Applet生命周期包括哪几个阶段?

4.Java Applet在安全性方面进行了哪些限制?

5.Java Applet是怎样嵌入HTML文件中的?在HTML文件中至少有哪些说明?

6.Java Applet和Application有何区别?是否可以将Java Applet改写成Java Application程序? 三、选择题

1.下列操作中,不属于Applet安全限制的是( A )。 A.与同一个页面中的Applet通信 B.加载本地库

C.运行本地可执行程序 D.读写本地文件系统

2.为了向一个Applet传递参数,可以在HTML文件的APPLET标志中使用PARAM选项。在Applet程序中获取参数时,应使用的方法是( B )。

A.getDocumentBase() B.getParameter( ) C.getCodeBase D.getImage()

3.下面关于Applet的说法正确的是( C )。

A.Applet能访问本地文件 B.Applet也需要main方法 C.Applet必须继承自java.awt.Applet D.Applet程序不需要编译 4.编译Java Applet源程序文件产生的字节码文件的扩展名为( B )。 A.java B. class C. html D. exe

5.在Java Applet程序用户自定义的Applet子类中,常常重载( D )方法在Applet的界面中显示文字、图形和其他界面元素。

A.start( ) B.stop( ) C.init( ) D.paint( ) 6.在编写Java Applet程序时,若需要对发生的事件作出响应和处理,一般需要在程序的开头写上( D )语句。

A.import java.awt.* ; B.import java.applet.* ; C.import java.io.* ; D.import java.awt.event.* ;

7.在浏览器中执行Applet 程序四个方法里最先执行的是( A )。 A.init() B.start() C.destroy() D.stop() 四、判断题

1.Applet的执行离不开一定的HTML文件。( √ )

2.Applet可以运行本地机器上的可执行程序( × )

3.Java Applet不能够存取客户机磁盘上的文件。( √ ) 4.Applet可以运行在浏览器中。( √ )

5.Applet的两个方法getCodeBase( )和getDocumentBase( )的返回值都是URL类的对象,且二者返回的都是相同的URL地址。( × )

6.Applet是一种特殊的Panel,它是Java Applet程序的最外层容器。( √ )

7.Java Applet是由独立的解释器程序来运行的。( × ) 8.Java Applet只能在图形界面下工作。( √ ) 五、编程题

1.编写一个Java Applet程序,绘制直线、各种矩形、多边形、圆和椭圆等图形。

2.编写Applet小程序,利用Applet显示一幅图像。

3.编写Applet小程序,利用Applet连续不断地播放音乐。

4.在上述编程题2的基础上编写Applet小程序,当鼠标经过该图像时播放一个声音。

第8章 Java异常处理技术

习 题 八

一、简答题

1.什么是异常?简述Java的异常处理机制。

2.系统定义的异常与用户自定义的异常有何不同?如何使用这两类异常? 3.在Java的异常处理机制中,try程序块、catch程序块和finally程序块各起到什么作用?try-catch-finally语句如何使用?

4.说明throws与throw的作用。 5.如何创建、抛出自定义异常? 二、选择题

1.请问所有的异常类皆继承哪一个类?( A ) A.java.lang.Throwable B.java.lang.Exception C.java.lang.Error D.java.io.Exception 2.哪个关键字可以抛出异常?( B )

A.transient B.throw C.finally D.catch

3.对于已经被定义过可能抛出异常的语句,在编程时( A )。 A.必须使用try/catch语句处理异常,或用throw将其抛出。 B.如果程序错误,必须使用 try/catch语句处理异常。 C.可以置之不理。

D.只能使用try/catch语句处理。

4.下面程序段的执行结果是什么?( B ) public class Foo{

public static void main(String[] args){ try{

return;}

finally{System.out.println(\ } } }

A.编译能通过,但运行时会出现一个例外。 B.程序正常运行,并输出 \Finally\。

C.程序正常运行,但不输出任何结果。 D.因为没有catch语句块,所以不能通过编译。

5.下面是一些异常类的层次关系: java.lang.Exception

java.lang.RuntimeException

java.lang.IndexOutOfBoundsException

java.lang.ArrayIndexOutOfBoundsException

java.lang.StringIndexOutOfBoundsException

假设有一个方法X,能够抛出两个异常,Array Index和String Index异常,假定方法X中没有try-catch语句处理这些异常,下面哪个答案是正确的?( A B )

A.方法X 应该声明抛弃ArrayIndexOutOfBoundsException和StringIndexOutOfBounds- Exception。

B.如果调用X的方法捕获IndexOutOfBoundsException,则ArrayIndexOutOfBounds- Exception和StringIndexOutOfBoundsException都可以被捕获。

C.如果方法X声明抛弃IndexOutOfBoundsException,则调用X的方法必须用try-catch语句捕获。

D.方法X不能声明抛弃异常。

6.下面的方法是一个不完整的方法,其中的方法unsafe()会抛出一个IOException,那么在方法的①处应加入哪条语句,才能使这个不完整的方法成为一个完整的方法?( DE )

① ____________________________

② { if(unsafe()) {//do something?} ③ else if(safe()) {//do the other?} ④ }

A.public IOException methodName() B.public void methodName() throw IOException

C.public void methodName() D.public void methodName() throws IOException

E.public void methodName() throws Exception

7.如果下列的方法能够正常运行,在控制台上将显示什么?( ACD ) public void example( ){ try{

unsafe();

System.out.println(\ }

catch(SafeException e)

{System.out.println(\ finally{System.out.println(\ System.out.println(\ }

A.Test 1 D. Test 4

B. Test 2 C.Test 3

三、判断题

1.捕获异常try语句后面通常跟有一个或多个catch()方法用来处理try块内生成的异常事件。( √ )

2.使用try-catch-finally语句只能捕获一个异常。( × ) 3.try-catch语句不可以嵌套使用。( × )

4.Error类所定义的异常是无法捕获的。( √ )

5.IOException异常是非运行时异常,必须在程序中抛弃或捕获。( √ )

6.用户自定义异常类是通过继承Throwable类来创建的。( × ) 7.当一个方法在运行过程中产生一个异常,则这个方法会终止,但是整个程序不一定终止运行。( √ ) 四、程序填空

public class ServerTimedOutException extends Exception {

private int port;

public ServerTimedOutException(String message, int port) { super(message); this.port = port; }

public int getPort() { return port;

} }

class Client {// 在下行横线处填上声明抛弃ServerTimedOutException例外的语句 }

public void connectMe(String serverName) ______________________ { int success;

int portToConnect = 80;

success = open(serverName, portToConnect); if (success == -1) { } }

private int open(String serverName, int portToConnect) { return 0; }

// 在下行横线处填上抛出ServerTimedOutException例外的语句 _______________________________________

五、编程题

1.编写一个程序,从键盘读入5个整数存储在数组中,要求在程序中处理数组越界的异常。

2.编写Java Aplication,求解从命令行以参数形式读入两个数之积,若缺少操作数或运算符,则抛出自定义异常OnlyOneException与NoOperationException并退出程序。

3.编写一个简单的计算器程序,能够计算两个变量进行四则运算的结果。在计算中及时捕获各种算术异常,保证在输入各种数字的时候程序才能够计算出结果。

4.定义一个邮件地址异常类,当用户输入的邮件地址不合法时,抛出异常(其中邮件地址的合法格式为**** @****,也就是说必须是在@符号左右出现一个或多个其他字符的字符串)。

第9章 Java多线程技术

习 题 九

一、简答题

1.线程与进程有什么关系?

2.线程有几种状态,引起线程中断的主要原因有哪些?

3.一个线程执行完run()方法后,进入了什么状态?该线程还能再调用start()方法吗?

4.建立线程的方法有哪几种?Runnable接口在线程创建中的作用? 5.Runnable接口中包括哪些抽象方法?Thread类有哪些主要的成员变量和方法?

6.线程在什么样的状态时,调用isAlive()方法返回的值是false? 7.在多线程中引入同步机制的原因是什么?

8.在什么方法中可以使用wait()、notify()及notifyAll()方法? 9.线程调用interrupt()的作用是什么?线程什么时候会发生死锁? 10.线程联合有什么功能?线程分为哪两类? 二、选择题

1.运行下列程序,会产生什么结果?( A )

1) public class Exercises3_1 extends Thread implements runable {

2) public void run() {

3) System.out.println(\4) }

5) public static void main(String args[]) {

6) Thread t = new Thread(new Exercises3_1()); 7) t.start();

8) } 9) }

A.第一行会产生编译错误 B.第六行会产生编译错误 C.第六行会产生运行错误 D.程序会运行和启动

2.线程在生命周期中要经历五种状态,若线程当前是新建状态,则它可以到达的下一个状态是( B )。

A.运行状态 B.可运行状态 C.阻塞状态 D.终止状态 3.下列关于Java多线程并发控制机制的叙述中,错误的是( D )。 A.Java中没有提供检测与避免死锁的专门机制,但应用程序可以采用某些策略防止死锁的发生

B.共享数据的访问权限都必须定义为private

C.Java中对共享数据操作的并发控制是采用加锁技术 D.线程之间的交互,提倡采用suspend()/resume()方法 4.哪个关键字可以对对象加互斥锁?( C )

A.transient B.serialize C.synchronized D.static

5.下面哪些方法可用于创建一个可运行的多线程类?( AB )

A.public class T implements Runable { public void run(){ ?} } B.public class T extends Thread { public void run(){ ?} } C.public class T implements Thread { public void run(){?} } D.public class T implements Thread { public int run(){?.} }

E.public class T implements Runable { protected void run(){?} } 6.下面哪些方法可以在任何时候被任何线程调用?( ABC )

A.sleep() B.yield() C.synchronized(this) D.notify() E.wait() F.notifyAll()

7.下列哪些情况可以终止当前线程的运行?( BCD )

A.当创建一个新线程时 B.当该线程调用sleep()方法时

C.抛出一个异常时 D.当一个优先级高的线程进入就绪状态时 三、判断题

1.一个Java多线程的程序不论在什么计算机上运行,其结果始终是一样的。( × )

2.Java线程有五种不同的状态,这五种状态中的任何两种状态之间都可以相互转换。( × )

3.所谓线程同步就是若干个线程都需要使用同一个synchronized修饰的方法。( √ )

4.使用Thread子类创建线程的优点是可以在子类中增加新的成员变量,使线程具有某种属性,也可以在子类中新增加方法,使线程具有某种功能。但是,Java不支持多继承,Thread类的子类不能再扩展其他的类。( √ )

5.Java虚拟机(JVM)中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别,分别用Thread类中的类常量表示。每个Java线程的优先级都在常数1和10之间,即Thread.MIN_PRIORITY和Thread.MAX_PRIORITY之间。如果没有明确地设置线程的优先级别,每个线程的优先级都为常数8。( × )

6.当线程类所定义的run( )方法执行完毕,线程的运行就会终止。( √ )

7.线程的启动是通过引用其start()方法而实现的。( √ ) 四、编程题

1.请采用实现Runnable接口的多线程技术,用50个线程,生成10000个[1-1000]间的随机整数。

2.运用多线程技术在上下分割的两个窗口中,分别从左到右与从右到左移动字符串。

第10章 Java输入输出技术

习 题 十

一、简答题

1.什么叫流?简述流的分类。

2.能否将一个对象写入一个随机访问文件?

3.BufferedReader流能直接指向一个文件对象吗?为什么? 4.字节流和字符流之间有什么区别?

5.简述可以用哪几种方法对文件进行读写。

6.从字节流到字符流的转化过程中,有哪些注意事项? 二、选择题

1.实现字符流的写操作类是( B ),实现字符流的读操作类是( A )。

A.FileReader B.Writer C.FileInputStream D.FileOutputStream

2.要从“file.dat”文件中读出第10个字节到变量c中,下列哪个方法适合? ( C )

A.FileInputStream in=new FileInputStream(\ead();

B.RandomAccessFile in=new RandomAccessFile(\(9); int c=in.readByte();

C.FileInputStream in=new FileInputStream(\ int c=in.read();

D.FileInputStream in=new FileInputStream(\ int c=in.read();

3.构造BufferedInputStream的合适参数是哪些?( AC )

A.BufferedInputStream B.BufferedOutputStream C.FileInputStream

D.FileOuterStream E.File

4.在编写Java Application程序时,若需要使用到标准输入输出语句,必须在程序的开头写上( C )语句。

A.import java.awt.* ; B.import java.applet.Applet ;

C.import java.io.* ; D.import java.awt.Graphics ;

5.下列流中哪个不属于字符流?( D )

A.InputStreamReader B.BufferedReader C.FilterReader D.FileInputStream 6.字符流与字节流的区别在于( D )。

A.前者带有缓冲,后者没有 B.前者是块读写,后者是字节读写 C.二者没有区别,可以互换使用 D.每次读写的字节数不同 三、判断题

1.文件缓冲流的作用是提高文件的读/写效率。( √ ) 2.通过File类可对文件属性进行修改。( √ ) 3.IOException必须被捕获或抛出。( √ )

4.Java系统的标准输入对象是System.in,标准输出对象有两个,分别是标准输出System.out和标准错误输出System.err。( √ )

5.对象串行化机制是指将程序中对象的状态转化为一个字节流,存储在文件中。( √ )

6.Serializable接口是个空接口,它只是一个表示对象可以串行化的特殊标记。( √ ) 四、编程题

1.使用File类列出某一个目录下创建日期晚于2007-8-10的文件。 2.使用File类创建一个多层目录d:\\java\\ch10\\src。 3.读取一个Java源程序,输出并统计其中所用的关键字。

4.编写应用程序,使用文件输出流向文件中分别写入如下类型的数据:int、double和字符串。

5.编写应用程序,列出指定目录下的所有文件和目录名,然后将该目录下的所有文件后缀名为.txt的文件过滤出来显示在屏幕上。

6.写一程序,读入命令行第一个参数指定的文本文件,将其所有字符转换为大写后写入第二个参数指定的文件中。

第11章 网络编程技术

习 题 十 一

一、填空题

1.URL类的类包是(java.net.URL)。

2.URL.getFile()方法的作用是(获得URL实例的文件名)。 3.URL.getPort()方法的作用是(获得URL实例的端口号)。 4.Sockets技术是构建在( TCP )协议之上。 5.Datagrams技术是构建在( UDP )协议之上。 6.ServerSocket.accept()返回( Socket )对象,使服务器与客户端相连。 7.为了实现组播通信,java.net包中有相应的( MulticastSocket )类。 8.RMI的英文全称是( Remote Method Invocation,远程方法调用)。 9.启动RMIRegistry服务器的命令是( Start RMIRegistry )。 二、简答题

1.名词解释:TCP、UDP、IP地址、端口号、URL、套接字、RMI。 2.简述并比较URL类的四种构造方法。

3.客户/服务器模式有什么特点?Socket类和ServerSocket类的区别是什么?

4.TCP通信的特点是什么?画图说明基于Socket通信的C/S模型与基本算法。

5.UDP通信的特点是什么?画图说明基于Datagram套接字通信的发送和接收流程。

6.画图说明RMI的体系结构。

7.简述基于RMI的分布式通信编程的基本步骤。 三、选择题

1.若对Web页面进行操作,一般会用到的类是( CD )。

A.Socket B.DatagramSocket C.URL D.URLConnection 2.在套接字编程中,客户方需用到Java类( C )来创建TCP连接。 A.ServerSocket B.DatagramSocket C.Socket D.URL

3.在套接字编程中,服务器方需用到Java类( C )来监听端口。 A.Socket B.URL

C.ServerSocket D.DatagramSocket 4.URL类的getHost方法的作用是( A )。

A.返回主机的名字 B.返回网络地址的端口 C.返回文件名 D.返回路径名 5.URL类的getRef方法的作用是( A )。

A.返回网页的特定地址 B.返回主机的名字 C.返回路径名 D.返回协议的名字

6.Socket类的getOutputStream方法的作用是( B )。

A.返回文件路径 B.返回文件写出器 C.返回文件大小 D.返回文件读入器

7.Socket类的getInputStream方法的作用是( D )。 A.返回文件路径 B.返回文件写出器 C.返回文件大小 D.返回文件读入器

8.DatagramSocket类的receive方法的作用是( B )。

A.根据网络地址接收数据包 B.根据网络地址与端口接收数据包 C.根据端口接收数据包 D.根据网络地址与端口发送数据包 四、程序填空

1.下面是基于套接字的服务端程序接收客户程序请求后创建连接,服务程序将收到的信息在屏幕上打印出来,并回送给客户程序,请在标号处完成程序编写。

package comsoft.nc.tcp.socket; import java.io.*;

import java.net.*;

public class ServerSocketDemo {

public static final int PORT = 28080;

public static void main(String[] args) throws IOException { (1)new ServerSocket(PORT)

ServerSocket serversocket = (1) ; System.out.println(\serversocket: \+ serversocket); try {

(2)serversocket.accept()

Socket socket = (2) ; try {

System.out.println(\accepted from: \+ socket); (3)socket.getInputStream()

BufferedReader in = new BufferedReader(new InputStreamReader( (3) )); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); while (true) {

String str = in.readLine();

if (str.equals(\Communications\{ break; }

System.out.println(\from Client: \+ str); out.println(\from Server: \ + str ); } }

finally {

System.out.println(\Closing...\ socket.close(); } } finally {

(4)serversocket.close() (4) ; } } }

2.下面是基于套接字的客户端程序,客户程序向服务程序发出连接请求,在连接创建后向服务程序发送信息并接收服务程序的回声在屏幕上打印出来,请在标号处完成程序编写。

import java.io.*; import java.net.*;

public class ClientSocketDemo {

public static void main(String[] args) throws IOException {

InetAddress ipaddress = InetAddress.getByName(null); System.out.println(\(1)new Socket

Socket socket = (1) (ipaddress, ServerSocketDemo.PORT);

try {

System.out.println(\(2)socket.getInputStream()

BufferedReader in = new BufferedReader(new InputStreamReader( (2) ));

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); for (int i = 0; i < 10; i++) { (3)out.println

(3) (\(4)in.readLine()

String str = (4) (); System.out.println(str); }

out.println(\ }

finally {

System.out.println(\ socket.close(); } } } 五、编程题

1.编写一个包含TextField和Label的Java Application程序,其中TextField用于接收用户输入的主机名,Label用于将这个主机的IP地址显示出来。

2.编写Java Applet程序,接受用户输入的网页地址,并与程序中事先保存的地址相比较若两者相同则使浏览器指向该网页。

3.编写Java Applet程序,访问并显示或播放在指定URL地址处的图像和声音资源。

4.用Socket编程,从服务器读取几个字符,再写入本地机器且进行显示。 5.使用IP组播协议实现在组播组中发送与接收数据。

6.使用RMI设计一个分布式计算程序,由服务程序对客户程序提供的一组数据进行排序,然后由客户程序从屏幕输出。

第12章 JDBC与数据库访问技术

习 题 十 二

一、填空题

1.JDBC的基本层次结构由(Java程序)、( JDBC API)、(JDBC驱动程序管理器)、(驱动程序)和数据库五部分组成。

2.根据访问数据库的技术不同,JDBC驱动程序相应地分为(JDBC-ODBC Bridge)、(JDBC-Native API Bridge)、( JDBC-Middleware)和(Pure JDBC Driver)四种类型。

3.JDBC API所包含的接口和类非常多,都定义在(java.sql)包和(javax.sql)包中。

4.使用(Class.forName( ))方法加载和注册驱动程序后,由(DriverManager)类负责管理并跟踪JDBC驱动程序,在数据库和相应驱动程序之间建立连接。

5.(java.spl.Connection)接口负责建立与指定数据库的连接。 6.(PreparedStatement)接口的对象可以代表一个预编译的SOL语句,它是(Statement)接口的子接口。

7.(ResultSet)接口表示从数据库中返回的结果集。 二、简答题

1.名词解释:数据库、关系型数据库、字段、记录、SQL、DDL、DML、DCL、JDBC、BLOB。

2.简述数据定义语言、数据操纵语言和数据查询语言的功能。 3.简述四类JDBC驱动程序的特点。

4.画图表示JDBC中的各种接口与类之间的关系。

5.简述使用JDBC连接ODBC数据源、Microsoft SQL Server、Oracle、MySQL 和IBM DB2等数据库所对应的JDBC驱动程序名和数据库连接的URL值。

6.简述使用JDBC访问数据库的基本算法。

7.简述Statement接口和PreparedStatement接口的主要区别。

8.简述JDBC 4.0的新增特性。 三、程序填空

下面的程序采用JDBC方式,在MS SQL Server数据库管理系统的DBStudent数据库中,对学生表tblstudent的学号为\和 \的学生的成绩进行修改,并将修改后的结果在屏幕输出,请完成程序编写。

package comsoft.db.jdbc.mssqlserver; import java.sql.*;

public class UpdateRecord {

public static void main(String[] args) {

String JDBCDriver = \iver\

// 声明JDBC驱动程序类型

String conURL = \+

\定义JDBC的URL对象

String[] sno = { \ int[] score = { 100, 99}; try {

(1)Class.forName(JDBCDriver) (1) ; }

catch (ClassNotFoundException e) {

System.out.println(\ }

try {

(2)DriverManager.getConnection

Connection con = (2) (conURL); // 修改数据库中数据表的内容 (3)con.prepareStatement

PreparedStatement psmt = (3) (

\ int i = 0, idlen = sno.length; do {

psmt.setInt(1, score[i]); psmt.setString(2, sno[i]); (4)psmt.executeUpdate()

if ( (4) == 1) {

System.out.println(\修改数据表:tblstudent中学号为 \

[i] + \的记录成功!\

}

else {

System.out.println(\错误=数据表:tblstudent中没有学号为 \

sno[i] + \的记录!\

} ++i; }

while (i < sno.length); psmt.close();

// 查询数据库并把数据表的内容输出到屏幕上 Statement smt = con.createStatement();

ResultSet rset = smt.executeQuery(\\

while (rset.next()) {

System.out.println(rset.getString(\String(\

\set.getInt(\

}

smt.close(); con.close(); }

catch (SQLException e) {

System.out.println(\ } } } 四、编程题

1.设有客户数据表Customer(CNO,name,sex,principalship,company,telephone,address,

background),其中每个字段的类型和含义如下: 字段名 类型 CNO Varchar(20) 编号(primary key)

Name Varchar(20) Sex Varchar(4) Principalship Varchar(10) Company Varchar(40) Telephone Varchar(20) 公司电话

Address Varchar(40) Background Varchar(80) 公司背景

(1)使用JDBC在Access或SQL Server或Oracle或MySQL中创建数据库CRMDB。

字段

姓名 性别 职务

公司/单位

公司地址

(2)使用JDBC在数据库CRMDB中建立上述数据表Customer。 (3)使用JDBC将下面的数据添加到Customer表中。 CNO Name Sex Principalship Company Telephone Address Background

2007001 胡振 男 总经理 华夏大邦 8226858 上海 上市公司

2007002 李兴 男 经理 九洲方圆 6182755 北京 上市公司

2008001 江中 女 董事长 时代在线 8372168 长沙 2008002 郭华 女 董事长 光华集团 8221089 深圳 上市公司

(4)从Customer表中查找“时代在线”公司的基本信息。 (5)将“胡振”的电话改为“021-8226859”。

(6)从Customer表中查找全部“男”客户的信息。 (7)删除“2007002”号记录。

2.在Microsoft SQL Server中依次创建数据库DBPhoto和数据表tblPhoto(id varchar(50) primary key not null,name varchar(100),description varchar(200),photo image not null)\,然后将你的一组照片存储到tblPhoto表中,并能方便地存取与浏览照片。

3.创建一个以JDBC-ODBC和纯Java的第三方JDBC驱动程序方式连接MS SQL Server 2000、Oracle、MySQL和IBM DB2等各种不同类型数据库的连接工具类。

上市公司

第13章 JavaBean组件技术

习 题 十 三

一、简答题

1.名词解释:软件组件、软件组件模型。 2.简述什么是JavaBean。

3.简述JavaBean的创建语法,它由哪几部分组成?具有什么特性? 4.简述JavaBean的事件操作。 二、选择题

1.JavaBean就是( C )。

A.JSP B.Servlet C.类 D.对象 2.JavaBean的属性必须用( C )修饰。

A.public B.protected C.private D.默认

3.JavaBean的方法必须用( A )修饰。

A.public B.protected C.private D.默认 4.Bound属性应用的接收器是( B )。

A.WindowListener B.PropertyChangeListener C.ActionListener D.CarpetListener 5.Constrained属性应用的接收器是( D )。

A.KeyListener B.PropertyChangeListener C.WindowListener D.VetoableChangeListener 三、编程题

1.编写一个能显示日历的JavaBean。

2.编写一个提供累加和累乘方法的JavaBean。 3.编写一个可以作为动作接收器的JavaBean。

参 考 文 献

[1] J2SE 5.0 Documentation.http://java.sun.com/javase/downloads/inde

x_jdk5.jsp

TM

[2] The JavaTutorials, Learning the Java Language.http://java.sun.c

om/docs/books/tutorial

[3] [美] Bruce Eckel.JAVA编程思想(英文版·第4版).北京:机械工业

出版社,2007

[4] [美]Roger Garside, John Mariani著.Java教程(英文版· 第2版).北

京:机械工业出版社,2003

[5] 李芝兴等编著.Java程序设计之网络编程.北京:清华大学出版社,2006 [6] 吕凤翥,马皓编著.Java语言程序设计.北京:清华大学出版社, 2006 [7] 孙卫琴编著.Java面向对象编程.北京:电子工业出版社, 2006

[8] [美]Cay S. Horstmann, Gary Cornell著,叶乃文,邝劲筠译.Java 2核心技术卷Ⅰ:基础知识(原书第7版).北京:机械工业出版社,2006

[9] [美]Cay S. Horstmann, Gary Cornell著,陈昊鹏,王浩,姚建平等译.Java 2核心技术卷Ⅱ:高级特性(原书第7版).北京:机械工业出版社,2006 [10] 吴其庆编著.Java编程思想与实践.北京:冶金工业出版社, 2006

[11] 张白一等编著.面向对象程序设计JAVA(第二版).西安:西安电子科技

大学出版社,2005

[12] 王晓悦编著.精通Java —JDK、数据库系统开发、Web开发.北京:人民

邮电出版社,2007

[13] 吴亚峰,王鑫磊编著.精通NetBeans —Java桌面、Web与企业级程序开发

详解.北京:人民邮电出版社,2007