java Chapter3练习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第 3 章面向对象程序设计
一、判断题
1.()下面程序输出数字0。

2.()Java语言为所有的Java程序自动导入包“ng”,因此Java程序可以直接用“ng”中的类和接口。

位于类继承关系层次结构树的根部的类Object就是在包“ng”中的一个类。

3.()有时候为了避免引起混淆,构造方法的方法名可以不与所属类名同名。

4.()构造方法一般不允许有任何返回值,因此需要在返回类型处标注为void。

5.()任何类都必须显示地定义该类的构造方法,以便对类的成员进行各种初始化操作。

6.()运行下面程序将在控制台窗口中输出a。

7.()下面的程序将输出“Creating Rock 2”。

8.()Java语言对内存的释放是采用垃圾自动回收机制。

Java虚拟机自动判断并收集“垃圾”,但一般不会立即释放它们的存储空间。

9.()Java系统提供了方法“System.gc()”来强制立即回收“垃圾”,即当调用该方法时,系统会立即回收“垃圾”。

10.()程序可以借助于finalize方法来精确记录在程序执行过程中内存资源的释放情况。

11.()如果在定义一个类的时候没有用到关键字extends,则这个类没有直接父类。

12.()Java语言规定:任何一类的构造方法必须调用其父类的构造方法(包括隐式调用),并且调用父类构造方法的语句必须是子类构造方法的第一条语句。

13.()在同一类中,不允许存在具有相同方法名和相同参数类型列表的方法,即使该方法的返回类型不相同。

14.()如果一个类不是内部类,则它的访问属性不能是private或者protected。

15.()抽象方法不能含有方法体,并且必须在抽象类中。

16.()抽象类是不能实例化的。

抽象类的实例化,应当通过其不具有抽象属性的子类来创建。

17.()下面的程序输出整数3。

18.()设在一个java包.tsinghua.kit中含源程序文件J_Data.java,其内容如下:
在另一个包中含有源程序Exer3_1_18.java,其内容如下:
假设类路径设置及源程序文件所在的路径都是正确的,则上面的程序可以正常进行编译
与运行,最终可以输出3。

二、填空题
1.面向对象的计算机语言一般应有3个基本特征,分别是_________________、___________________和___________________。

2.在下面的源代码中,类Exer3_2_2的域是__________,构造方法是_____________,当该类的实例对象在被释放之前可能被系统自动调用的方法是___________。

3.在下面程序编译后,按“Java Exer3_2_3 1 2 3”方式运行的结果是:__________。

4.运行下面程序会输出______________。

5.运行下面程序,将会输出__________________。

6.语句“J_Example a =new J_Example()”定义了变量a,想释放变量a所指向的实例对象的内存空间,请写出相应的一条或多条语句:___________________。

7.在源程序的下划线处填上相应的语句,完成该程序,并判断该程序的最终输出结果是__________________。

8.下面程序的输出结果是________________。

9.下面程序的输出是________________。

10.下面程序的输出结果是__________________________。

11.下面程序的输出结果是________________。

三、选择题
1.关于下面代码,结论正确的是()。

(A)类J_Subclasss的构造方法具有public属性;
(B)类J_Subclasss的构造方法不含参数;
(C)类J_Subclasss的构造方法包括调用this();
(D)类J_Subclasss的构造方法包括调用super();
2.在下列的类定义中,可以通过“new J_Class()”生成J_Class实例的是()。

(A)
(B)
(C)
(D)
3.关于下面程序,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“21”
(B)程序可以通过编译并正常运行,结果输出“221”
(C)程序无法通过编译
(D)程序可以通过编译,但无法正常运行
4.关于下面的程序,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“5”
(B)程序可以通过编译并正常运行,结果输出“23”
(C)程序无法通过编译
(D)程序可以通过编译,但无法正常运行
5.关于下面的程序,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“123”
(B)程序可以通过编译并正常运行,结果输出“13”
(C)程序可以通过编译并正常运行,结果输出“213”
(D)程序无法通过编译
6.关于下面程序代码,结论正确的是()。

(A)程序无法通过编译,因为Exer3_3_6没有定义无参数的构造方法(B)程序无法通过编译,因为J_SubClass没有定义构造方法
(C)程序无法通过编译,因为没有实现J_SubClass(int i)构造方法(D)程序可以通过编译
7.下面程序的输出是________________。

(A)3null (B)3constructor
(C)2constructor (4)2null
8.下面程序的输出是________________。

(A)3null (B)3constructor
(C)2constructor (D)2null
9.关于java的垃圾回收机制,下面结论正确的是()。

(A)程序可以任意指定释放内存的时间
(B)正确的程序写法是不能依赖于垃圾回收的时间或顺序
(C)程序可以明确地标识某个局部变量的引用不再被使用
(D)程序可以显式地立即释放对象所占有的内存
10.在下面程序代码中,为使实例引用a能访问(调用)到类J_Base的成员方法mb_method(),划线处应填入()。

(A)a.mb_method();
(B)a.super.mb_method();
(C)a.super.super.mb_method();
(D)以上都不对
11.关于下面的程序代码,结论正确的是()。

(A)运行上面的程序,结果输出“data =3”
(B)上面程序含有编译错误
(C)在运行上面程序时,第11行的语句会抛出一个异常
(D)在运行上面程序时,第12行的语句会抛出一个异常
12.关于下面程序代码(在同一个文件中),结论正确的是()。

(A)无法通过编译,因为语句有错误
(B)可以通过编译,但在运行时将报错
(C)可以通过编译,也可以正常运行
(D)无法通过编译,因为在同一个文件中类的个数太多
13.关于下面的程序代码,结论正确的是()。

(A)无法通过编译,因为语句中有错误
(B)可以通过编译,但在运行时将出错
(C)可以通过编译,也可以正常运行
(D)无法通过编译,因为同一个文件中类的个数太多
14.为使下面程序输出“Sub”,应在下划线处填入的语句是()。

(A)System.out.println(app.mb_getString());
(B)System.out.println((J_Base)app.mb_getString());
(C)System.out.println((J_SubClass)app.mb_getString());
(D)System.out.println(((J_SubClass)app).mb_getString());
15.为使程序输出“Sub”,应在下划线位置填的语句是()。

(A)System.out.println(app.mb_getString());
(B)System.out.println((J_Base)app.mb_getString());
(C)System.out.println((J_SubClass)app.mb_getString());
(D)System.out.println(((J_SubClass)app).mb_getString());
16.为使程序输出“Sub”,应在下划线填入的语句是()。

(A)System.out.println(app.mb_getString());
(B)System.out.println((J_Base)app.mb_getString());
(C)System.out.println((J_SubClass)app.mb_getString());
(D)System.out.println(((J_SubClass)app).mb_getString());
(E)以上选项都不正确
17.下面程序的输出结果是__________________。

(A)22 (B)55 (C)25 (D)52
18.如果将其语法定义填入下列代码第9行,会使以下代码编译错误的是()。

(A)public float getNum() {return 4.0f;}
(B)public void getNum() {}
(C)public void getNum(double d) {}
(D)public double getNum(float d) {return 4.0d;}
19.已知字母'a'和字母'b'所对应的数值分别是97和98,关于下面程序代码,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“Name: a; Age:98”
(B)程序可以通过编译并正常运行,结果输出“Name: b; Age:97”
(C)程序可以通过编译并正常运行,结果输出“Name: b; Age:98”
(D)程序可以通过编译并正常运行,结果输出“Name: a; Age:97”
20.关于下面程序代码,结论正确的是()。

(B)程序可以通过编译并正常运行,结果输出“Index=0; Age=98”
(C)程序可以通过编译并正常运行,结果输出“Index=0; Age=0”
(D)程序可以通过编译并正常运行,结果输出“Index=98; Age=98”
(E)程序无法通过编译
21.关于下面程序代码,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“Index=98; Age=0”
(B)程序可以通过编译并正常运行,结果输出“Index=0; Age=98”
(C)程序可以通过编译并正常运行,结果输出“Index=0; Age=0”
(D)程序可以通过编译并正常运行,结果输出“Index=98; Age=98”
(E)程序无法通过编译
22.关于下面程序代码,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“Index=98; Age=0”
(B)程序可以通过编译并正常运行,结果输出“Index=0; Age=98”
(C)程序可以通过编译并正常运行,结果输出“Index=0; Age=0”
(E)程序无法通过编译
23.已知“123456789123456789”在类型long的表示范围之内,但不在类int 的表示范围之内,关于下面代码结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“Index=123456789123456789; Age=0”
(B)程序可以通过编译并正常运行,结果输出“Index=0; Age=123456789123456789”
(C)程序可以通过编译并正常运行,结果输出“Index=0; Age=0”
(D)程序可以通过编译并正常运行,结果输出“Index=123456789123456789; Age=123456789123456789”
(E)程序无法通过编译
24.关于下面程序代码,结论正确的是()。

(A)无法通过编译
(B)陷入死循环,直到栈溢出报错
(C)输出结果是:J_SubClass::mb_method: Begin
J_SuperClass::mb_run
J_SuperClass::mb_method
J_SuperClass::mb_method: End (D)输出结果是:J_SuperClass::mb_method
25.将选项中的代码插入下面程序中下划线处,会导致编译错误的是()。

(A)public int mb_sum(int a, int b) {
return a +b;
}//方法mb_method结束
(B)public int mb_sum(long a, long b) {
return a +b;
}//方法mb_method结束
(C)abstract int mb_sum();
(D)private long mb_sum(long a, long b) {
return a +b;
}//方法mb_method结束
26.关于下面程序,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“12”
(B)程序可以通过编译并正常运行,结果输出“11”
(C)程序无法通过编译,因为类型转换不合法
(D)程序无法通过编译,因为J_animal的定义不对27.关于下面程序,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“23”
(B)程序可以通过编译并正常运行,结果输出“11”
(C)程序无法通过编译,因为类型转换不合法
(D)程序无法通过编译,因为J_animal的定义不对
28.下面程序的输出是_____________。

(A)0 (B)1 (C)2 (D)编译错误
29.下面程序的输出是()。

(A)12 (B)14 (C)32 (D)34
30.设在一个java包kit1中含有源程序文件J_Super.java,其内容如下:
在另一个含有源程序文件Exer3_3_30.java,其内容如下:
假设类路径设置及源程序文件所在的路径都是正确的,则关于上面程序,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“12”
(B)程序可以通过编译并正常运行,结果输出“21”
(C)程序可以通过编译并正常运行,结果输出“2”
(D)程序无法通过编译
31.设在一个java包kit1中含有源程序文件J_Super.java,其内容如下:
在另一个含有源程序文件Exer3_3_31.java,其内容如下:
假设类路径设置及源程序文件所在的路径都是正确的,则关于上面程序,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“12”
(B)程序可以通过编译并正常运行,结果输出“21”
(C)程序可以通过编译并正常运行,结果输出“2”
(D)程序无法通过编译
32.设在一个java包kit1中含有源程序文件J_Super.java,其内容如下:
在另一个含有源程序文件Exer3_3_32.java,其内容如下:
假设类路径设置及源程序文件所在的路径都是正确的,则关于上面程序,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“12”
(B)程序可以通过编译并正常运行,结果输出“21”
(C)程序可以通过编译并正常运行,结果输出“2”
(D)程序无法通过编译
33.设在一个java包.tsinghua.kit1中含有源程序文件J_Super.java,其内容如下:
在另一个含有源程序文件Exer3_3_33.java,其内容如下:
假设类路径设置及源程序文件所在的路径都是正确的,则关于上面程序,结论正确的是()。

(A)程序可以通过编译并正常运行,结果输出“12”
(B)程序可以通过编译并正常运行,结果输出“21”
(C)程序可以通过编译并正常运行,结果输出“2”
(D)程序无法通过编译
34.要求设计一个类,它拥有一个特殊的成员域,该成员域必须能够被这个类的子类访问到,但是不能被不在同一个包内的其它类访问。

下面设计中满足要求的是()。

(A)该成员域的封装属性设置为public
(B)该成员域的封装属性设置为private
(C)该成员域的封装属性设置为protected
(D)该成员域不需要特殊的封装属性
35.假设在Java源程序文件“MyClass.java”中只含有一个类,而且这个类必须能够被位于一个庞大的软件系统中的所有Java类访问到,那么下面哪些声明有可能是符合要求的类声明有()。

(A) private class MyClass extends Object
(B) public class myclass extends Object
(C) public class MyClass
(D) public class MyClass extends Object
36.关于下面的程序,结论正确的是()。

(A)程序可以通过编译并正常运行,但结果无任何输出
(B)程序可以通过编译,但无法正常运行
(C)程序无法通过编译,因为在类的定义中缺少构造方法
(D)程序无法通过编译,因为类的封装性不对
37.下面程序的运行结果是()。

(A)x=0 (B)x=某一个随机数
(C)x=m_x (D)无法通过编译
38.下面程序代码会产生编译错误,能修正编译错误的做法是()。

(A)将private int m_data改为protected int m_data (B)将private int m_data改为public int m_data
(C)将private int m_data改为static int m_data
(D)将private int m_data改为int m_data
39.关于下面程序,结论正确的是()
(A)程序可以通过编译并正常运行,结果输出“12”
(B)程序无法通过编译,因为具有final属性的方法不能被覆盖(C)程序无法通过编译,因为方法调用有问题
(D)程序可以通过编译,但无法正常运行
40.下面程序代码中定义了一个接口,在备选项中实现子该接口并且不是抽象的是()。

(A)classs J_Class implements J_Interface {
int mb_method() {}
int mb_function() {}
}//类J_Class结束
(B)class J_Class extends J_Interface {
int mb_method(int data) {}
int mb_function(int index) { }
}//类J_Class结束
(C)class J_Class implements J_Interface {
public int mb_method(int data) { }
public int mb_function(int index) {}
}//类J_Class结束
(D)class J_Class implements J_Interface {
public int mb_method(int index) {
return 2 *index;
}
public int mb_function(int data) {
return data /2;
}
}//类J_Class结束
41.编译下面程序后产生的文件有()。

(1)J_SuperClass.class
(2)Exer3_3_41.class
(3)Exer3_3_41$J_InnerClass1.class
(4)Exer3_3_41$1.class
(5)Exer3_3_41$2.class
(6)Exer3_3_41$1J_InnerClass2.class
(A)1, 2, 3, 6 (B)1, 2
(C)1, 2, 3, 4, 5, 6 (D)1, 3, 4, 5 42.关于下面程序,结论正确的是()。

(A)程序无法通过编译
(B)程序可以通过编译,但无法正常运行
(C)运行程序可以输出“Sum(0..10)=45”
(D)运行程序可以输出“Sum(0..9)=45”
43.下面程序的输出结果是()。

(A)99 (B)199 (C)299 (D)99100
44.下面代码中,可以通过编译并正常运行的是()。

(A)Character c =new Character('x');
(B)int primitive =1234;
Integer wrappedInt =new Integer(primitive);
(C)Boolean wB =new Boolean("junk");
(D)Lont wLong =new Long("here");
45.已知
Integer a =new Integer(0)
Integer b =new Integer(0)
Long c =new Long(0);
则下面表达式中值为true的是()。

(A) a==b (B) a.equals(b)
(C) a.equals(c) (D) a.equals(0)
46.已知“double d =Math.random();”,则下面说法中最贴切的是()。

(A) d >= 1.0
(B) 0.0 <= d < 1.0
(C) 0.0 <= d < Double.MAX_VALUE
(D) Double.MIN_VALUE <= d <= Double.MAX_VALUE
四、简答题
1.如果下面的程序可以正常运行,则请写出程序运行的输出结果,否则,请写出含错误的语句的行号,并修正含有错误的语句。

2.如果下面的程序可以正常运行,则请写出程序运行的输出结果。

否则,请写出含错误的语句的行号,并修正含有错误的语句。

3.判断下面程序片断是否含有语法错误。

如果有错误,请指出错误之处,并说明原因。

4.判断下向程序片断是否含有语法错误。

如果有错误,请指出错误之处,并说明原因。

5.判断下面程序片断是否含有语法错误,如果有错误,请指出错误之处,并说明原因。

6.指出下面程序会出现编译错误的行数及其原因
五、编程题
1.请编写一个计算最小素数的程序。

要求由程序的参数指定一个正整数,然后由程序输出大于该整数的最小素数。

2.请采用面向对象的程序设计方法编写一个计算计算图形面积的程序。

程序应当能够计算并输出正方形、等边三角形和圆的面积。

程序的参数以数对的形式进行解释,即序号为奇数的参数表示图形的类型,表示类型的参数的下一个参数表示该图形的参数,如正方形的边长或等边三角形的边长或圆的半径。

以面向对象的程序设计方法编写程序就应当至少编写4个类:主控程序类、正方形类、等边三角形类和圆类进行求解。

为了考虑程序的未来扩展,还可以设计形状抽象类或接口。

3. 请采用面向对象的程序设计方法编写一个字符填充图形的程序。

程序应当能够输出用指定的字符填充的正方形、等边三角形或圆。

程序的第一个参数指定所要填充的图形;第二个参数指定图形的参数,如正方形、等边三角形的边长,或圆的半径;第三个参数指定字符。

以面向对象的程序设计方法编写程序就应当至少编写4个类:主控程序类、正方形类、等边三角形类和圆类进行求解。

为了考虑程序的未来扩展,还可以设计形状抽象类或接口。

4. 请采用Java 的包编写一个函数值计算的程序。

要求将下面的函数 (1))cos()sin()(1x x x f += (2)1)(2
2++=x x x f
(3)123)(2
3++=x x x f
(4)14)(2
4-=x x f (5))4cos()3sin()(5x x x f = (6))3cos()2sin()(6x x x f = (7))3cos()2sin()(7x x x f +=
以及自己定义的一些函数分成若干类,并封闭到相应的Java 类中。

分类方法可以自行确定,分类个数至少为2个。

每种类别分别对应一个Java 类;每个函数分别对应Java 类的一个方法。

这些Java 类要求打包到Java 的一个包中。

然后编写主程序调用这些方法并输出结果。

程序的第一个参数指定所要调用的函数序号,第二个参数指定函数的参数,程序输出该函数的计算结果。

5. 请编写程序求解三位魔幻数问题。

要求由程序参数指定一个正整数,然后将该该数对1000取模得到一个三位n 。

这个三位数的高位可以是0。

将这个三位数的数字重新排列,得到一个最大的三位数和一个最小的三位数。

用最大的三位数减最小的三位数,得到一个新的三位数。

再将新的三位数重新排列,得最大和最小两个三位数,接着用最大的数减最小的数,又得到一个新的三位数,如此一直继续。

要求程序能够输出这一计算过程。

请仔细观察输出结果,并改进程序。

下面是此计算过程的一个样例: N=989 99=998-899 891=990-99 792=981-189 693=972-279

六、趣味编程
1.请编写程序求解2008的个位数问题。

要求程序参数指定一个正整数n,然后由程序输出1n+2n+3n+…+2008n的个位数。

2.请采用面向对象的程序设计方法编写程序求解篮球错排问题。

已知10个篮子一字排开,从左至右分别标着号:1,2,…,10;10个球也有标号,分别也是1,2,…,10。

现要将这10个球全部放入这10个篮子中,每个篮子放置1个球,要求球的号不能与其所在的篮子号相同,在相邻的篮子内的球的球号不能相邻。

例如,如果在相邻的两个篮子内的球的球号分别为9和10,则是不允许的。

要求输出所有符合要求的放球方式。

对于每种符合要求的放球方式,都应输出在每个篮子中的球号。

3.请采用面向对象的程序设计方法编写程序,求解小狗来回跑问题。

父亲和儿子带着小狗去野外旅游。

因为父亲有事,所以儿子带着小狗先走10分钟。

在这10分钟里,儿子和小狗的速度均为80米/分钟。

在10分钟后及父亲追上儿子之前,儿子以两种速度交替前进,即先以75米/分钟走10分钟,再以200米/分钟的速度小跑10分钟。

在10分钟后及父亲追上儿子之前,小狗开始以500米/分钟的速度往返于父亲与儿子之间。

当父亲追上儿子之后,儿子父亲和小狗一同以75米/分钟前进。

要求由程序的参数指定儿子出发后的分钟数,程序计算并输出这时儿子、父亲和小狗离开家的距离、行进的方向和速度以及小狗在儿子和父亲之间往返的次数。

相关文档
最新文档