1、Java 面向对象编程-配套教学用试题库作者:孙卫琴参考书籍:Java 面向对象编程电子工业出版社出版,孙卫琴著Java 技术支持网址:Java 视频教程观看网址: 在线直播课程:https:/一、 单选(80)1. 在一个 Java 源文件中,import、class 和 package 声明语句的先后顺序是什么? (A)package,import, class(B)任意顺序 (C)package,class ,import(D)import,package, class答案: A解答:在一个 Java 源文件中,package 语句必须位于第一行,其次是 import 语句,接下来才是类
2、的声明。2. 以下哪段代码会通过编译? (A) float f=12; (B) char c=“1“; (C) byte b=197; (D) boolean f=null; 答案: A解答:选项 B 中的“1“是一个字符串直接数,不能把它赋值给字符变量 c;选项 C 中的 197 超出了 byte 类型的取值范围,不能把它直接赋值给 byte 类型的变量 b,正确的做法是采用强制类型转换:byte b=(byte)197;选项 D 中的变量 f 为 boolean 类型变量,它的取值只能为true 或者 false。3. byte 类型的取值范围是什么?(A) -28 28 (B) 0 25
3、5(C) 取决于 Java 虚拟机的实现(D) -128 127答案: D解答:byte 类型的取值范围是-128 127。4. 以下程序定义了一个 Sample 类:public class Sample public static void main(String args) System.out.println(args2) ;运行命令“java Sample One Two Three”,会出现什么情况?(A) 打印“One” (B ) 打印“Two ”(C ) 打印“Three” (D) 抛出异常:java.lang.ArrayIndexOutOfBoundsException 答案
4、: C解答:Java 数组的索引从零开始,因此 args2对应参数“Three” 。5. 假定在 C:盘根目录下存在 a.txt 文件。以下程序代码能否通过编译,如果通过编译,运行时会出现什么情况?FileInputStream fin=new FileInputStream(“C:a.txt“);System.out.println(fin instanceof InputStream);System.out.println(fin instanceof Reader);(A) 编译时出错(B) 运行时出错(C) 运行时打印“true”和“false” (D) 运行时打印“true”和“tr
5、ue”答案: A解答:FileInputStream 类和 Reader 类不在同一个继承分支上,不能用 instanceof 操作符比较,代码“fin instanceof Reader”会导致编译错误。6. 以下程序代码能否通过编译,如果通过编译,运行“java Sample”时会出现什么情况?public class Sampleprivate int var;public static void main(String args) System.out.println(“Value is: “ + var); (A) 运行时打印“Value is: 0”。(B) 编译时出错:变量 va
6、r 可能没有被初始化。(C) 编译时出错:在 main()方法中不允许直接引用非静态的变量 var。(D) 运行时出错:变量 var 可能没有被初始化。 答案: C解答:在 main()方法中不允许直接引用实例变量 var。7. 以下程序代码能否通过编译,如果通过编译,运行“java Sample”时会出现什么情况?01: public class Sample02:03: private void test() 04: 05: String aStr = “One“;06: String bStr = new String();07: String cStr = new String(“Th
7、ree“);08: String dStr = aStr;09: System.out.println(aStr + “,“ + bStr + “,“ + cStr + “,“ + dStr );10: 11: 12: public static void main(String args) 13: new Sample().test();14: 15: (A) 第 5 行编译时出错。(B ) 运行时出错:变量 dStr 可能没有被初始化。(C ) 运行时出错:第 9 行抛出 java.lang.NullPointerException。(D) 运行时打印“One,Three,One ”。 答
8、案: D解答:“new String()”创建了一个空字符串,因此变量 bStr 引用空字符串“,变量 dStr 和变量 aStr 都引用字符串“One” 。8. 运行以下程序代码,会打印什么结果?public class Sampleprivate void test() String aStr = “ One “;String bStr = aStr;aStr.toUpperCase();aStr.trim();System.out.println(“ + aStr + “,“ + bStr + “+1+2);public static void main(String args) new
9、 Sample().test(); (A) ONE, One 12(B ) One , One 3(C ) ONE,ONE12(D) One , One 12答案: D解答:String 类的 toUpperCase()和 trim()方法都会返回一个新的 String 对象,当不会改变当前String 对象的内容,因此程序执行完 aStr.toUpperCase()和 aStr.trim()方法之后,变量 aStr 引用的字符串保持不变。9. 运行以下程序代码,会打印什么结果?int a=1,b=1;b=+a;a=b+;System.out.println(“a=“+a+“ b=“+ b);
10、 (A) a=1 b=1(B) a=1 b=2(C) a=2 b=3(D) a=2 b=2答案: C解答:对于表达式“b=+a” ,先把变量 a 加 1,再把变量 a 赋值给变量 b;对于表达式“a=b+”,先把变量 b 赋值给变量 a,再把变量 b 加 1。10. 以下程序代码能否通过编译,如果通过编译,运行“java Sample”时会出现什么情况?01: public class Sample02:03: int array;04:05: private void test() 06: System.out.println(“Value is: “ + array0);07: 08: 0
11、9: public static void main(String args) 10: new Sample().test();11: 12: (A) 编译错误:变量 array 可能没有被初始化。(B) 运行时出错:变量 array0可能没有被初始化。(C ) 运行时出错:第 6 行抛出 java.lang.NullPointerException。(D) 运行时打印“Value is: 0”。答案: C解答:必须先通过 new 语句创建数组,然后才能访问数组中的元素。以上 array 变量的初始值为 null,因此无法通过它来访问数组的元素。11. 以下程序代码能否通过编译,如果通过编译,
12、运行“java Sample”时会出现什么情况?01: public class Sample02:03: String array = new String3;04:05: private void test() 06: System.out.println(“Value is: “ + array0);07: 08: 09: public static void main(String args) 10: new Sample().test();11: 12: (A) 编译时出错:变量 array 可能没有被初始化。(B) 运行时出错:变量 array0可能没有被初始化。(C ) 运行时出
13、错:第 6 行抛出 java.lang.NullPointerException。(D) 运行时打印“Value is: null”。 答案: D解答:用 new 语句创建数组时,数组中的每个元素被初始化为其数据类型的默认值。以上array 数组中的元素为 String 类型,因此元素的初始值为 null。12. 以下哪个选项用八进制来表示十进制整数 10?(A) 0x10(B) 012(C) 010(D) 080答案: B解答:Java 中八进制的直接数以“0”开头。13. 数字“0x21”转换为十进制整数是多少?(A) 17(B) 21(C) 33(D) 021答案: C解答:Java 中
14、十六进制的直接数以“0x”开头。 “0x21”为十六进制的直接数,对应十进制整数:2*16+1,即 33。14. 以下程序代码能否通过编译,如果通过编译,运行“java Sample”时会出现什么情况?public abstract class Sampleprivate boolean f;public static void main(String args) System.out.println(new Sample().f); (A)运行时打印“false” 。(B)编译时出错:变量 f 有可能没有被初始化。(C)运行时出错:抛出 java.lang.NullPointerExcept
15、ion。(D)编译时出错:Sample 类是抽象类,不允许被实例化。答案: D解答:Sample 类被声明为抽象类,main()方法中试图创建 Sample 类的实例,这是非法的。15. 以下程序代码能否通过编译,如果通过编译,运行“java Sample”时会出现什么情况?public class Sampleprivate static final int var;Sample()var=1;public static void main(String args) System.out.println(“Value is: “ + var); (A) 编译时出错:在构造方法中不允许给 st
16、atic final 类型的成员变量赋值。 (B ) 编译时出错:main() 方法中无法访问 private 类型的变量 var。(C) 运行时出错:变量 var 没有被初始化。(D) 运行时打印“Value is: 1” 。 答案: A解答:在构造方法中不允许给 static final 类型的成员变量赋值。static final 类型的成员变量必须在声明时被显式初始化。16. 以下程序代码能否通过编译,如果通过编译,运行“java Sample”时会出现什么情况?public class Sampleprivate int var;private void test() int var
17、=2;System.out.println(“Value is: “ + this.var);public static void main(String args) new Sample().test(); (A) 运行时打印“Value is: 0”。 (B) 运行时出错:变量 var 有可能没有被初始化。(C) 编译时出错:变量 var 有可能没有被初始化。(D) 运行时打印“Value is: 2”答案: A解答:test()方法中的 this.var 引用当前 Sample 对象的成员变量 var,而不是 test()方法中定义的局部变量 var。 17. 以下是接口 I 的定义:i
18、nterface I void setValue(int val); int getValue(); 以下哪段代码能编译通过?(A) class A extends I int value; void setValue(int val) value = val; int getValue() return value; (B)interface B extends I void increment(); (C) abstract class C implements I int getValue() return 0; abstract void increment(); (D) interf
19、ace D implements I void increment(); 答案: B解答:接口中的方法默认都是 public 的。选项 A 中的类 A 的 getValue()和 setValue()方法必须声明为 public 的,并且类 A 应该实现接口 I,而不是扩展接口 I;选项 C 中的类 C 的getValue()方法必须声明为 public 的;选项 D 中的接口 D 试图实现接口 I,这是非法的。18. 表达式“6 | 3”的值为多少?(A) true(B) false(C) 9(D) 7答案: D解答:表达式“6 | 3” 中的“| ”是位或操作符。19. 学校里每个班级包括
20、若干名学生。按照 UML 的理论,班级与学生之间是什么关系?(A)依赖(B)关联 (C)实现(D)泛化答案: B解答:班级与学生之间存在特定的对应关系,这种关系可看作关联关系。20. 以下程序代码能否通过编译,如果通过编译,运行“java Sample”时会出现什么情况?public class Sampleprivate void test() System.out.println(6 public static void main(String args) new Sample().test(); (A) 运行时打印“true ”。(B) 运行时打印“false” 。(C) 编译时出错。(
21、D) 运行时打印“9” 。答案: C解答:“ public static void main(String args) new Sample().test(); (A) 6(B ) 1(C ) 3(D) 编译时出错:操作符 “”的右边的操作元不能大于 32。答案: C解答:“”是算术右移位操作符, “6 33”等价于“61” 。22. “System.out.println(Math.ceil(-2.1);”的打印结果是什么? (A) -2 (B) -2.0 (C) -3 (D) -3.0答案: B解答:“Math.ceil(-2.1)”返回一个 double 类型的数,它的值为比-2.1 大
22、的最小整数。23. wait()、notify() 和 notifyAll()方法是在哪个类中定义的?(A)Thread(B)Runnable(C)Object(D)ThreadLocal答案: C解答:在 Object 类中定义了 public 的 wait()、notify()和 notifyAll()方法。24. 以下程序代码能否通过编译,如果通过编译,运行“java Sample”时会出现什么情况?public class Sampleprivate void test() System.out.println(“Result:“ + 6 - 6); public static voi
23、d main(String args) new Sample().test(); (A) 运行时打印“Result:0” 。(B) 运行时打印“Result:66” 。(C) 运行时出错:无法把 int 类型数据转换为字符串。(D) 编译时出错:操作符 “-”的操作元的类型不匹配。答案: D解答:对于表达式“Result:“ + 6 6,先计算 “Result:“ + 6,得到字符串“Result:6“,然后再计算“Result:6“ 6, String 类型与 int 类型之间无法进行减法运算,因此编译出错。 25. 以下代码能否通过编译,如果通过编译,运行时得到什么打印结果?Object o = new String(“abcd“);String s = o;System.out.println(o);(A)运行时打印“abcd” 。(B)运行时打印“java.lang.Objectde6ced” 。(C)运行时出错:抛出 java.lang.ClassCastException。(D)编译时出错:变量 o 不能直接赋值给变量 s。答案: D解答:变量 o 为 Object 类型,把它赋值给变量 s 时,必须进行强制类型的转换:String s=(String)o。