《Java 程序设计》习题答案 下载本文

字符变量中存放一个字符,字符串常量中存放一串字符。

6.什么是强制类型转换?在什么情况下需要用到强制类型转换?

答:强制类型的基本方式是指用以下方式显式地进行数据类型的转换:

(类型)表达式

一般地说,在赋值运算符两侧的类型不一致的情况下,则需要进行自动或强制类型转换。变量从占用内存较少的短数据类型转化成占用内存较多的长数据类型时,可以不做显式的类型转换,Java会自动转换;而将变量从较长的数据类型转换成较短的数据类型时,则必须做强制类型转换。

7.Java有哪些算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符?试列举单目和三目运算符。

答:在Java中,按照运算符功能来分,基本的运算符有下面几类:

1.算术运算符(+,-,*,/,%,++,--) 2.关系运算符(>,<,>=,<=,==,!=) 3.布尔逻辑运算符(!,&&,||,&,|) 4.位运算符(>>,<<,>>>,&,|,^,~) 5.赋值运算符(=,及其扩展赋值运算符如+=) 6.条件运算符( ?:)

7.其他 (包括分量运算符·,下标运算符 [],实例运算符instanceof,内存分配运算符new,强制类型转换运算符 (类型),方法调用运算符 () 等) 其中,单目运算符如-,!,而三目运算符只有一个,即条件运算符(?: )。

8.编写一个字符界面的Java Application程序,接受用户输入的一个浮点数,把它的整数部分和小数部分分别输出。

答:见程序。

9.编写一个字符界面的Java Application程序,接受用户输入的10个整数,比较并输出其中的最大值和最小值。

答:见程序。

10.编写一个字符界面的Java Application程序,接受用户输入的字符,以“#”标志输入的结束;比较并输出按字典序最小的字符。

答:见程序。

11.结构化程序设计有哪三种基本流程?分别对应Java中的哪些语句?

答:任何程序都可以且只能由三种基本流程结构构成,即顺序结构、分支结构和循环结构。顺序结构直接书写,分支结构用if及switch语句书写,循环结构用for、while及do语句来书写。

12.编写一个Java程序,接受用户输入的一个l-12之间的整数(如果输入的数据不满足这个条件,则要求用户重新输入),利用switch语句输出对应月份的天数。

答:见程序。

3-5

13.在一个循环中使用break,continue和return语句有什么不同的效果?

答:break是结束循环;continue是直接进行下一次循环;return则是结束整个函数的调用。

14.编写图形界面下的Java Applet程序,接受用户输入的两个数据为上、下限,然后10个一行输出上、下限之间的所有素数。

答:见程序。

15.编写程序输出用户指定数据的所有素数因子。 答:见程序。

16.什么是数组?数组有哪些特点?Java中创建数组需要使用哪些步骤?如何访问数组的一个元素?数组元素的下标与数组的长度有什么关系?

答:数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来惟一地确定数组中的元素。

数组要进行定义和分配空间后才能使用。 一维数组的定义方式为:

type arrayName[ ]; 或 type [ ] arrayName;

分配内存空间则要用到运算符new,其格式如下:

arrayName = new type[arraySize];

当定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每一个元素了。数组元素的引用方式为:

arrayName[index]

数组元素的下标从0开始,一直到数组的长度减1。

17.数组元素怎样进行缺省的初始化?

答:数组元素可以在定义数组的同时进行初始化。例如:

int a[ ] = {1,2,3,4,5};

用逗号(,)分隔数组的各个元素,系统自动为数组分配一定的空间。

18.编程求一个整数数组的最大值、最小值、平均值和所有数组元素的和。 答:见程序。 19.求解“约瑟夫问题”:12个人排成一圈,从1号报数,凡是数到5的人就出队列(出局),然后继续报数,试问最后一人出局的是谁。

答:见程序。

20.用“埃氏筛法”求2-100以内的素数。2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,以此类推??最后剩下的就是素数。

答:见程序。

3-6

第4章 类、包和接口

习 题

1.使用抽象和封装有哪些好处?

答:抽象可以提供事物的本质特征。封装(Encapsulation)是这样一种编程机制,它把代码和其操作的数据捆绑在一起,从而防止了外部对数据和代码的干扰和滥用,保证了数据和代码的安全性。

2.编写一个Java程序片断定义一个表示学生的类student,包括域“学号”、”班号”、“姓名”、“性别”、“年龄”;方法“获得学号”、“获得班号”、“获得性别”、“获得年龄”、“修改年龄”。

答:见程序。

3.为student类定义构造方法初始化所有的域,增加一个方法public String toString()把Sttldent类对象的所有域信息组合成一个字符串。编写Application程序检验新增的功能。

答:见程序。

4.什么是最终类,如何定义最终类?试列举最终类的例子。

答:最终类是指类被final修饰符所修饰和限定的类,最终类不能被继承,即不可能有子类。如Java中的String类就是最终类。

5.如何定义静态域?静态域有什么特点?如何访问和修改静态域的数据?

答:对域使用static修饰,则定义了静态域。静态域最本质的特点是:它们是类的域,不属于任何一个类的具体对象实例。它不保存在某个对象实例的内存区间中,而是保存在类的内存区域的公共存储单元。

在Java中,静态域(类变量)可以通过类名直接访问,也可以通过实例对象来访问,两种方法的结果是相同的。

6.什么是静态初始化器?它有什么特点? 与构造方法有什么不同?

静态初始化器是由关键字static引导的一对大括号{}括起的语句组。它的作用与类的构造方法有些相似,都是用来完成初始化的工作,但是静态初始化器在三点上与构造方法有根本的不同:

(1) 构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化。 (2) 构造方法是在用new运算符产生新对象时由系统自动执行;而静态初始化器一般不

能由程序来调用,它是在所属的类加载入内存时由系统调用执行。

(3)不同于构造方法,静态初始化器不是方法,没有方法名、返回值和参数列表。 (4)同static方法一样,它不能访问实例域和实例方法。

7.如何定义方法?在面向对象程序设计中方法有什么作用?

答:方法是类的动态属性,标志了类所具有的功能和操作,用来把类和对象的数据封装在 一起。Java的方法与其他语言中的函数或过程类似,是一段用来完成某种操作的程序

4-7

片断。方法由方法头和方法体组成,其一般格式如下:

修饰符1 修饰符2 ?? 返回值类型 方法名(形式参数列表) throws异常列表{

方法体各浯句; }

8.什么是抽象方法?它有何特点?如何定义抽象方法?如何使用抽象方法?

答:被abstract所修饰的方法叫抽象方法,抽象方法的作用在为所有子类定义一个统一的接口。对抽象方法只需声明,而不需实现,即用分号(;)而不是用{},格式如下:

abstract returnType abstractMethod( [paramlist] );

9.如何定义静态方法?静态方法有何特点?静态方法处理的域有什么要求?

答:用static修饰符修饰的方法是仅属于类的静态方法,又称为类方法。与此相对,不用static修饰的方法,则为实例方法。类方法的本质是该方法是属于整个类的,不是属于某个实例的。

静态方法中,不能访问实例变量。在类方法中不能使用this 或super。

10.什么是访问控制符?有哪些访问控制符?哪些可以用来修饰类?哪些用来修饰域和方法?试述不同访问控制符的作用。

答:访问控制符是指public/private/protected等表示访问控制(Access Control)的修饰符,其作用是更好地控制类及其域、方法的存取权限,更好地实现信息的封装与隐藏,

方法的访问控制符包括private, protected, public和“默认访问控制符”。

类中限定为private的成员(域或方法)只能被这个类本身访问,即私有访问控制。 类中的成员缺省访问控制符时,称为缺省访问控制。缺省访问控制的成员可以被这个类本身和同一个包中的类所访问,即包访问控制。

类中限定为protected的成员可以被这个类本身,它的子类(包括同一个包中以及不同包中的子类)以及同一个包中所有其他的类访问。

类中限定为public的成员可以被所有的类访问。

Java中还有一种访问控制符为private proteced,它限定能被本类及其子类可以访问,而包中的其他非子类的类不能访问。

类的访问控制符或者为public,或者缺省。(但内部类可以有private、protected等访问控制符。)

如果类用public修饰,则该类可以被其他类所访问;若类缺省访问控制符,则该类只能被同包中的类访问。

11.修饰符是否可以混合使用?混合使用时需要注意什么问题?

答:修饰符可以混合使用,如public static。但也要注意一些规则,如final及abstract不能修饰同一个方法。

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

答:继承(Inheritance)是一个对象获得另一个对象的属性的过程。它的重要性源于它支持按层次分类概念。这与现实世界是一致的,大多数知识因为层次化分类而变得容易掌握(即

4-8