《Java面向对象程序设计》思考题及答案

sonyanan

贡献于2012-09-11

字数:0 关键词: Java开发 Java

《Java 面向对象编程》思考题及答案.........................................................................................................................................................................2 第 1 章 面向对象的开发方法概述...............................................................................2 第 2 章 第一个 Java 应用 .............................................................................................3 第 3 章 数据类型和变量...............................................................................................6 第 4 章 操作符 ..............................................................................................................8 第 5 章 流程控制 ........................................................................................................10 第 6 章 继承 ................................................................................................................13 第 7 章 Java 语言中的修饰符 ....................................................................................17 第 8 章 接口 ................................................................................................................21 第 9 章 异常处理 ........................................................................................................23 第 10 章 类的生命周期...............................................................................................27 第 11 章 对象的生命周期...........................................................................................28 第 12 章 内部类 ..........................................................................................................30 第 13 章 多线程与并发...............................................................................................33 第 14 章 数组 ..............................................................................................................35 第 15 章 Java 集合 ......................................................................................................37 第 16 章 输入输出 ......................................................................................................39 第 17 章 图形用户界面...............................................................................................41 第 18 章 Swing 组件 ...................................................................................................43 第 19 章 Java 常用类 ..................................................................................................44 《Java 面向对象编程》思考题及答案v1.0 作者:孙卫琴 技术支持网址: www.javathinker.org 制作时间:2009/2/10 备注:以下思考题来自《Java 面向对象编程》第一版,并且修改了原书中部分思考题内 容中的错误或者作了一些调整。因此,如果此处列出的思考题与原书中列出的思考题不一致 时,以此处的思考题为准。如果大家对思考题以及答案有异议,欢迎到 JavaThinker 论坛的 Java 分论坛上指正: http://www.javathinker.org/bbs/topic.jsp?db=7&topic=5623 http://www.javathinker.org/bbs/topic.jsp?db=7 第 1 章 面向对象的开发方法概述 1.面向对象的软件开发有哪些优点? [答案] 面向对象的软件开发具有以下优点: l 把软件系统看成是各种对象的集合,这更接近人类的自然思维方式。 l 软件需求的变动往往是功能的变动,而功能的执行者——对象一般不会有大的变 化。这使得按照对象设计出来的系统结构比较稳定。 l 对象包括属性(数据)和行为(方法),对象把数据以及方法的具体实现方式一起 封装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立 性,从而提高了软件的可维护性。 l 支持封装、抽象、继承和多态,提高了软件的可重用性、可维护性和可扩展性。 2.在软件系统中,为什么说一个孤立的不对外提供任何服务的对象是没有意义的? [答案] 开发软件系统的目的,就是为了让它提供特定服务。从使用者的角度出发,整个软件系 统就是一个服务提供者。大的系统由多个子系统组合而成。在系统内部,每个子系统(对象 或对象的组合)也都是服务提供者,它们为其它子系统或者所属的大系统提供服务,各个系 统之间通过发送消息来互相获得服务。因此,一个孤立的不对外提供任何服务的系统是没有 任何意义的。 3.列举一些现实生活中的例子,来说明什么是依赖关系、什么是聚集关系,以及什么 是关联关系。 [答案] 依赖关系:人依赖食物;电视机依赖电;理发师依赖剪刀和吹风机;鱼依赖水 聚集关系:电脑由显示器、主机和键盘等聚集而成; 关联关系:公司和员工;银行和客户;老公和老婆 4.列举一些现实生活中的例子,来说明什么是封装,什么是接口。 [答案] 封装:电脑主机的组件被封装在机箱内;电视机的内部构件也被封装在大壳子内 接口:电脑的键盘上的按键是电脑向人提供的接口;电脑上的 USB 插口是向移动硬盘 提供的接口;电脑上的光盘驱动器是向光盘提供的接口。 5.抽象的最主要的特征是什么? [答案] 抽象是指从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形 成 一个 新的事物的思维过程。抽象是一种由具体到抽象、由复杂到简洁的思维方式。 6.在建立对象模型时,要经历哪些抽象思维过程? [答案] (1)从问题领域的事物到软件模型中对象的抽象 (2)从对象到类的抽象 (3)从子类到父类的抽象 7.类就是程序员自定义的类型,这句话对吗? [答案] 对的。 对象模型中的类可看作是开发人员自定义的数据类型,Java 虚拟机的运行时环境封装了 把自定义的数据类型映射到计算机的内置数据类型的过程,使得开发人员不必受到计算机的 内置数据类型的限制,对任意一种问题领域,都可以方便的根据识别对象、再 进行分类(创 建任意的数据类型)的思路来建立对象模型。 8.小王本来体重 70Kg,经过减肥,体重降到 45Kg,试从这个问题领域中识别对象、 类、属性、行为、状态,和状态变化。 [答案] 对象:小王 类:人 属性:体重 行为:减肥 状态:减肥前状态:小王体重 70Kg;减肥后状态:小王体重 45Kg 状态变化:减肥行为使得小王的体重发生了变化 9.在 UML 框图中,哪些框图描述了系统的动态结构,哪些框图描述了系统的静态结 构? [答案] 状态转换图、时序图和协作图则构成了系统的动态结构;用例图、类框图、组件图和部 署图等四个图形,构成了系统的静态结构; 第 2 章 第一个 Java 应用 1.把一个类放在包里有什么作用? [答案] 把类放到特定的包中,有三大作用: (1)能够区分名字相同的类。 (2)有助于实施访问权限控制。 (3)有助于划分和组织 Java 应用中的各个类。 2.JavaDoc 文档是不是为软件的终端用户提供的使用指南? [答案]不是 Java 类通过 JavaDoc 文档来对外公布自身的用法,JavaDoc 文档是基于 HTML 格式的帮 助文档。JavaDoc 文档主要是供 Java 开发人员看的。 3.对于 com.abc.dollapp.AppMain 类,使用以下命令进行编译,编译出来的.class 文件 位于什么目录下? java –d C:\classes –sourcepath C:\src C:\src\com\abc\dollapp\AppMain.java [答案] C:\classes\com\abc\dollapp\AppMain.java 4.对于以上编译出来的 AppMain 类,以下哪个 java 命令能正确地运行它? a) java C:\classes\com\abc\dollapp\AppMain.class b) java –classpath C:\classes AppMain c) java –classpath C:\classes\com\abc\dollapp AppMain d) java –classpath C:\classes com.abc.dollapp.AppMain [答案] d 5.以下哪个 main()方法的声明能够作为程序的入口方法? a) public static void main() b) public static void main(String[] string) c) public static void main(String args) d) static public int main(String[] args) e) static void main(String[] args) [答案] b 6. 假定以下程序代码都分别放在 MyClass.java 文件中,哪些程序代码能够编译通过? a)import java.awt.*; package myPackage; class MyClass {} b)package myPackage; import java.awt.*; class MyClass{} c) /*This is a comment */ package myPackage; import java.awt.*; public class MyClass{} [答案] b,c 7.对于以下 Myprog 类,运行命令“java Myprog good morning”,将会得到什么打印结 果? public class Myprog{ public static void main(String argv[]){ System.out.println(argv[2]); } } [答案] 将抛出 java.lang.ArrayIndexOutOfBoundsException 异常 8.下面哪些是 Java 的关键字? a) default b) NULL c) String d) throws e) long f) true [答案] a,d,e,f 9.当 AppMain 类的 main()方法创建了五个 Doll 对象时,运行时数据据区的数据是如何 分布的?参照 2.4 节的图 2-14,画出此时运行时数据据区的状态图。 [答案] 10.下面哪些是合法的 Java 标识符? a) #_pound b) _underscore c) 5Interstate d) Interstate5 e) _5_ f) class [答案] b,d,e 第 3 章 数据类型和变量 1.对于以下程序,运行“java Abs”,将得到什么打印结果? public class Abs{ static int a=0x11; static int b=0011; static int c='\u0011'; static int d=011; public static void main(String args[]){ System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); } } [答案] 打印以下内容: 17 9 17 9 2.以下哪段程序能正确编译通过? a) char a='a'; char b=1; char c=08; b) int a='a'; c) long a='\u00FF '; d) char a='\u0FF '; e) char d="d"; [答案]b,c 3.下面哪段代码能编译通过? a) short myshort = 99S; b) String name = 'Excellent tutorial Mr Green'; c) char c = 17c; d) int z = 015; [答案] d 4.字符“A”的 Unicode 编码为 65。下面哪些代码正确定义了一个代表字符“A”的 变量? a) char ch = 65; b) char ch = '\65'; c) char ch = '\u0041'; d) char ch = 'A'; e)char ch = "A"; [答案] c,d 5.以下代码共创建了几个对象? String s1=new String("hello"); String s2=new String("hello"); String s3=s1; String s4=s2; [答案] 2个对象 6.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class Test { static int myArg = 1; public static void main(String[] args) { int myArg; System.out.println(myArg); } } [答案] 编译出错,main()方法中的myArg局部变量没有被初始化。 7.对于以下程序,运行“java Mystery Mighty Mouse”,得到什么打印结果? public class Mystery { public static void main(String[] args) { Changer c = new Changer(); c.method(args); System.out.println(args[0] + " " + args[1]); } static class Changer { void method(String[] s) { String temp = s[0]; s[0] = s[1]; s[1] = temp; } } } [答案] 打印:Mouse Mighty 8.对于以下程序,运行“java Pass”,得到什么打印结果? public class Pass{ static int j=20; public static void main(String argv[]){ int i=10; Pass p = new Pass(); p.amethod(i); System.out.println(i); System.out.println(j); } public void amethod(int x){ x=x*2; j=j*2; } } [答案] 打印:10 40 第 4 章 操作符 1.以下哪些程序代码能够编译通过? a) int i=0; if(i) { System.out.println("Hello"); } b) boolean b1=true; boolean b2=true; if(b1==b2) { System.out.println("So true"); } c) int i=1; int j=2; if(i==1|| j==i) System.out.println("OK"); d) int i=1; int j=2; if(i==1 &| j==2) System.out.println("OK"); [答案] b,c 2.运行以下程序,得到什么打印结果? System.out.println( 1 >>> 1); System.out.println( -1 >> 31); System.out.println( 2 >> 1); System.out.println( 1 << 1); [答案] 打印:0 -1 1 2 3.以下 temp 变量的最终取值是什么? long temp = (int)3.9; temp %= 2; [答案] 1 4.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? if (5 & 7 > 0 && 5 | 2) System.out.println("true"); [答案] 不能编译通过 5.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? int output=10; boolean b1 = false; if((b1==true) && ((output+=10)==20)){ System.out.println("We are equal "+output); }else{ System.out.println("Not equal! "+output); } [答案] 打印:Not equal! 10 6.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? int output=10; boolean b1 = false; if((b1=true) && ((output+=10)==20)){ System.out.println("We are equal "+output); }else{ System.out.println("Not equal! "+output); } [答案] 打印:We are equal 20 7.对于以下声明: String s1=new String("Hello"); String s2=new String("there"); String s3=new String(); 下面哪个是合法的操作? a) s3=s1 + s2; b) s3=s1-s2; c) s3=s1 & s2; d) s3=s1 && s2; [答案] a 8.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class Conv{ public static void main(String argv[]){ Conv c=new Conv(); String s=new String("ello"); c.amethod(s); } public void amethod(String s){ char c='H'; c+=s; System.out.println(c); } } [答案] 编译出错,“c+=s”这行代码不正确。 9.运行以下代码,得到什么打印结果? System.out.println(6+6+ "x"); System.out.println("x"+6+6); [答案] 打印:12x x66 第 5 章 流程控制 1. 运行以下代码,得到什么打印结果? int i = 3; int j = 0; double k = 3.2; if (i < k) if (i == j) System.out.println(i); else System.out.println(j); else System.out.println(k); [答案] 打印:0 2.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? int i = 4; switch (i) { default: System.out.println("default"); case 0: System.out.println("zero"); break; case 1: System.out.println("one"); case 2: System.out.println("two"); } [答案] 打印:default zero 3.以下哪段代码是合法的? a) int i; for (i=5,int j=10; i<10;j--) { } b) int i,j; for (i=0,j=10;i<10, j>0;i++,j--) { } c) int i,k; for (i=0,k=9;(i<10 && k>0);i++,k--) { } d) int i,j; for (i=0;j=10;i<10;i++,j--) { } [答案] c 4.运行以下代码,得到什么打印结果? int i = 1; switch (i) { default: System.out.println("default"); case 0: System.out.println("zero"); break; case 1: System.out.println("one"); case 2: System.out.println("two"); } [答案] 打印: one two 5.以下哪段代码是合法的? a) float x = 1; switch(x) { case 1: System.out.println("ok"); } b) long y =1; switch(y) { case 1: System.out.println("ok"); break; } c) byte x =1; switch(x) { case 1/1: System.out.println("ok"); } d) int x=1; int c =1; switch(c) { case x: System.out.println("ok"); break; } e) short x=1; switch(x) { case 3.2 /3: System.out.println("ok"); break; } f) short x=1; switch(x) { case 1,2,3: System.out.println("ok"); break; } [答案] c 6.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class MySwitch{ public static void main(String argv[]){ MySwitch ms= new MySwitch(); ms.amethod(); } public void amethod(){ for(int a=0,b=0;a<2; b=++a,System.out.println("b="+b)){ System.out.println("a="+a); } } } [答案] 打印: a=0 b=1 a=1 b=2 7.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? int x = 0; one: while (x < 10) { two: System.out.println(++x); if (x > 3) break two; } [答案] 编译出错。“break two”语句出错。 8.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class Hope{ public static void main(String argv[]){ Hope h = new Hope(); } protected Hope(){ int i=1; do{ System.out.println(i); }while(++i<3); } } [答案] 打印 1 2 第 6 章 继承 1.继承有哪些优点和缺点? [答案] 优点:提高程序代码的可重用性;提高系统的可扩展性 缺点:如果继承树非常复杂、或者随便扩展本来不是专门为继承而设计的类,反而会削 弱系统的可扩展性和可维护性。 2.继承与组合有哪些异同? [答案] 相同点:组合与继承都是提高代码可重用性的手段。 不同点:组合关系和继承关系相比,前者的最主要优势是不会破坏封装,当类 A 与类 C 之间为组合关系时,类 C 封装实现,仅向类 A 提供接口。而当类 A 与类 C 之间为继承关系 时,类 C 会向类 A 暴露部分实现细节。在软件开发阶段,组合关系不能比继承关系减少编 码量,但是到了软件维护阶段,由于组合关系使系统具有较好的松耦合性,因此使得系统更 加容易维护。组合关系的缺点是比继承关系要创建更多的对象。 3.方法覆盖必须满足哪些规则? [答案] 以下三个是方法覆盖必须满足的主要规则: (1)子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回 类型一致。 (2)子类方法不能缩小父类方法的访问权限。 (3)子类方法不能抛出比父类方法更多的异常。 4.以下哪些代码能够编译通过? a) class Fruit { } public class Orange extends Fruit { public static void main(String[] args){ Fruit f=new Fruit(); Orange o=f; } } b) class Fruit {} public class Orange extends Fruit { public static void main(String[] args){ Orange o=new Orange(); Fruit f=o; } } c) interface Fruit {} public class Apple implements Fruit { public static void main(String[] args){ Fruit f=new Fruit(); Apple a=f; } } d) interface Fruit {} public class Apple implements Fruit { public static void main(String[] args){ Apple a=new Apple(); Fruit f=a; } } e) interface Fruit {} class Apple implements Fruit {} class Orange implements Fruit {} public class MyFruit { public static void main(String[] args){ Orange o=new Orange(); Fruit f=o; Apple a=f; } } [答案] b,d 5.对于以下类: interface IFace{} class CFace implements IFace{} class Base{} public class ObRef extends Base{ public static void main(String argv[]){ ObRef ob = new ObRef(); Base b = new Base(); Object o1 = new Object(); IFace o2 = new CFace(); } } 下面哪些代码能够编译通过? a) o1=o2; b) b=ob; c) ob=b; d) o1=b; [答案] a,b,d 6.对于以下类: class A {} class B extends A {} class C extends A {} public class Q3ae4 { public static void main(String args[]) { A x = new A(); B y = new B(); C z = new C(); // 此处插入一条语句 } } 下面哪些语句放到以上插入行,将导致运行时异常? a) x = y; b) z = x; c) y = (B) x; d) z = (C) y; e) y = (A) y; [答案] c 7.下面哪些是合法的语句? a) Object o = new String("abcd"); b) Boolean b = true; c) Panel p = new Frame(); d) Applet a = new Panel(); e) Panel p = new Applet(); [答案] a , e 8.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? Object o = new String("abcd"); String s = o; System.out.println(s); System.out.println(o); [答案] 编译出错。“String s = o”语句出错。 9.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? class Base{ abstract public void myfunc(); public void another(){ System.out.println("Another method"); } } public class Abs extends Base{ public static void main(String argv[]){ Abs a = new Abs(); a.amethod(); } public void myfunc(){ System.out.println("My func"); } public void amethod(){ myfunc(); } } [答案] 编译出错。Base 类必须声明为抽象类,因为它包含 myfunc()抽象方法。 10.以下哪些代码是合法的? a) public abstract method(); b) public abstract void method(); c) public abstract void method(){} d) public virtual void method(); e) public void method() implements abstract; [答案] b 11.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? abstract class Base{ abstract public void myfunc(); public void another(){ System.out.println("Another method"); } } public class Abs extends Base{ public static void main(String argv[]){ Abs a = new Abs(); a.amethod(); } public void myfunc(){ System.out.println("My func"); } public void amethod(){ myfunc(); } } [答案] 打印“My func” 12.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? import java.io.FileNotFoundException; class Base{ public static void amethod()throws FileNotFoundException{} } public class ExcepDemo extends Base{ public static void main(String argv[]){ ExcepDemo e = new ExcepDemo(); } public static void amethod(){} protected ExcepDemo(){ System.out.println("Pausing"); amethod(); System.out.println("Continuing"); } } [答案] 打印“Pausing Continuing” 13.对于以下代码: public class Tester { public long sum(long a, long b) { return a + b; } // 此处插入一行 } 下面哪些语句放到以上插入行,可以编译通过? a) public int sum(int a, int b) { return a + b; } b) public int sum(long a, long b) { return 0; } c) abstract int sum(); d) private long sum(long a, long b) { return a + b; } e) public long sum(long a, int b) { return a + b; } [答案] a,e 第 7 章 Java 语言中的修饰符 1.以下哪些是 Java 修饰符? a) public b) private c) friendly d) transient e) vagrant [答案] a,b,d 2.作为程序入口的 main()方法可以用哪些修饰符来修饰? a) private b) final c) static d) int e) abstract [答案] b,c 3.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? private class Base{} public class Vis{ transient int iVal; public static void main(String elephant[]){ } } [答案] 编译出错。Base 类不能用 private 修饰。 4.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? class A{ private int secret; } public class Test{ public int method(A a){ return a.secret++; } public static void main(String args[]){ Test test=new Test(); A a=new A(); System.out.println(test.method(a)); } } [答案] 编译出错。Test 类的 method()方法不能访问类 A 的 secret 变量。 5.哪个访问控制符的访问级别最大? a) private b) public c) protected d) 默认 [答案] b 6.如果一个方法只能被当前类以及同一个包中的类访问,这个方法采用什么访问级别? [答案] 默认访问级别 7.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? private class Base{ Base(){ int i = 100; System.out.println(i); } } public class Pri extends Base{ static int i = 200; public static void main(String argv[]){ Pri p = new Pri(); System.out.println(i); } } [答案] 编译出错。Base 类不能用 private 修饰。 8.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class MyAr{ public static void main(String argv[]) { MyAr m = new MyAr(); m.amethod(); } public void amethod(){ static int i; System.out.println(i); } } [答案]编译出错。变量 i 是局部变量,不能用 static 修饰。 9.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? class Test{ int x = 5; static String s = "abcd"; public static void method(){ System.out.println(s + x); } } [答案] 编译出错。在静态 method()方法中不能直接访问实例变量 x。 10.对于以下程序,运行“java StaticTest”,得到什么打印结果? public class StaticTest { static { System.out.println("Hi there"); } public void print() { System.out.println("Hello"); } public static void main(String args []) { StaticTest st1 = new StaticTest(); st1.print(); StaticTest st2 = new StaticTest(); st2.print(); } } [答案] 打印以下内容: Hi there Hello Hello 11.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class Test{ final int x = 0; Test(){ x = 1; } final int aMethod(){ return x; } } [答案] 编译出错。在 Test()构造方法中不能再为常量 x 赋值。 12.以下代码能否编译通过? public class FinalTest{ final int q; final int w = 0; FinalTest(){ q = 1; } FinalTest(int x){ q = x; } } [答案] 编译通过。 13.以下代码能否编译通过? public class FinalTest{ final int q; final int w = 0; FinalTest(){ this(0); q = 1; } FinalTest(int x){ q = x; } } [答案] 编译出错。“q=x;”语句出错。FinalTest(int x)构造方法实际上为变量 q 赋了两次 值。 第 8 章 接口 1.接口与抽象类有哪些异同点? [答案] 相同点: (1)代表系统的抽象层。 (2)都不能被实例化。 (3)都能包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不必提供具 体的实现。 不同点: (1)在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们, 这能提高代码的可重用性,这是抽象类的优势所在;而接口中只能包含抽象方法。 (2)一个类只能继承一个直接的父类,这个父类有可能是抽象类;但一个类可以实现 多个接口,这是接口的优势所在。 2.区分接口与抽象类分别在什么场合使用? [答案]总的使用原则如下: (1)用接口作为系统与外界(即令一个系统)交互的窗口。 (2)用抽象类来定制系统中的扩展点。可以把抽象类看作是介于“抽象”和“实现” 之间的半成品,抽象类力所能及的完成了部分实现,但还有一些功能有待于它的子类去实现。 3.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? import java.awt.event.*; import java.awt.*; public class MyWc extends Frame implements WindowListener{ public static void main(String argv[]){ MyWc mwc = new MyWc(); } public void windowClosing(WindowEvent we){ System.exit(0); }//End of windowClosing public void MyWc(){ setSize(300,300); setVisible(true); } }//End of class [答案] 编译出错。MyWc 类没有实现 WindowListener 接口中的所有方法,因此 MyWc 类应该声明为抽象类。 4.以下代码能否编译通过? interface A{ int x = 0; A(){ x= 5; } A(int s){ x = s; } } [答案] 编译出错。接口中不能有构造方法。 5.接口中的方法可以使用哪些修饰符? a) static b) private c) synchronised d) protected e) public [答案] e 6.以下是接口 I 的定义: interface 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) interface D implements I { void increment(); } (e) class E implements I { int value; public void setValue(int val) { value = val; } } [答案] b 7.以下代码能否编译通过? interface A{ int x; void A(int s){ x = s; } } [答案] 编译出错。必须为常量 x 赋值;方法 A(int s)应该是抽象方法。 第 9 章 异常处理 1.throw 和 throws 关键字有什么区别? [答案] throw 用于在程序代码中抛出异常对象;throws 用于声明方法可能抛出的异常。 2.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? import java.io.*; class Base{ public static void amethod()throws FileNotFoundException{} } public class ExcepDemo extends Base{ public static void main(String argv[]){ ExcepDemo e = new ExcepDemo(); } public static void amethod(){} protected ExcepDemo() throws IOException{ DataInputStream din = new DataInputStream(System.in); System.out.println("Pausing"); din.readChar(); System.out.println("Continuing"); this.amethod(); } } [答案] 编译出错。ExcepDemo()构造方法声明抛出 IOException,因此在 main()方法中调 用 ExcepDemo()构造方法时,要么捕获 IOException,要么在方法声明中声明抛出该异常。 3.try 代码块后面可以只跟 finally 代码块,这句话对吗? [答案] 正确 4.对于以下程序,运行“java Rethrow”,将得到什么打印结果? public class Rethrow { public static void g() throws Exception { System.out.println("Originates from g()"); throw new Exception("thrown from g()"); } public static void main(String []args) { try { g(); }catch(Exception e) { System.out.println("Caught in main"); e.printStackTrace(); throw new NullPointerException("from main"); } } } [答案] 打印如下内容: Originates from g() Caught in main java.lang.Exception: thrown from g() at Rethrow.g(Rethrow.java:4) at Rethrow.main(Rethrow.java:8) Exception in thread "main" java.lang.NullPointerException: from main at Rethrow.main(Rethrow.java:12) 5.假定方法 f()可能会抛出 Exception,以下哪些代码是合法的? a) public static void g(){ try { f(); }catch(Exception e) { System.out.println("Caught in g()"); throw new Exception("thrown from g()"); } } b) public static void g(){ try { f(); }catch(Exception e) { System.out.println("Caught in g()"); throw new NullPointerException("thrown from g()"); } } c) public static void g() throws Throwable{ try { f(); }catch(Exception e) { System.out.println("Inside g()"); throw e.fillInStackTrace(); } } public static void main(String []args) { try { g(); } catch(Exception e) { System.out.println("Caught in main"); e.printStackTrace(); } } [答案] b 6.在Java 中,Throwable 是所有异常类的祖先,这句话对吗? [答案] 正确 7.在执行 trythis()方法时,如果 problem()方法抛出 Exception,程序将打印什么结果? public void trythis() { try { System.out.println("1"); problem(); } catch (RuntimeException x) { System.out.println("2"); return; } catch (Exception x) { System.out.println("3"); return; } finally { System.out.println("4"); } System.out.println("5"); } [答案] 打印: 1 3 4 8.以下代码能否编译通过,假如能编译通过,运行“java Qb4ab”时得到什么打印结 果? class MyException extends Exception {} public class Qb4ab { public void foo() { try { bar(); } finally { baz(); } catch (MyException e) {} } public void bar() throws MyException { throw new MyException(); } public void baz() throws RuntimeException { throw new RuntimeException(); } } [答案] 编译出错。foo()方法中,catch 代码块应该紧跟在 try 代码块后面。 9.对于以下代码: import java.io.*; public class Th{ public static void main(String argv[]){ Th t = new Th(); t.amethod(); } public void amethod(){ try{ ioCall(); }catch(IOException ioe){} } } 以下哪些是合理的 ioCall()方法的定义? a) public void ioCall () throws IOException{ DataInputStream din = new DataInputStream(System.in); din.readChar(); } b) public void ioCall () throw IOException{ DataInputStream din = new DataInputStream(System.in); din.readChar(); } c) public void ioCall (){ DataInputStream din = new DataInputStream(System.in); din.readChar(); } d) public void ioCall throws IOException(){ DataInputStream din = new DataInputStream(System.in); din.readChar(); } [答案] a 第 10 章 类的生命周期 1.类的初始化有哪些时机? [答案] 类的初始化有以下时机: (1)创建类的实例。创建类的实例的途径包括:用 new 语句创建实例,或者通过反射、 克隆以及反序列化手段来创建实例。 (2)调用类的静态方法。 (3)访问某个类或接口的的静态变量,或者对该静态变量赋值。 (4)调 用 Java API中某些反射方法,比如调用 Class.forName("Worker")方法,假如 Worker 类还没有被初始化,那么 forName()方法就会初始化 Worker 类,然后返回代表这个 Worker 类的 Class 实例。forName()方法是 java.lang.Class 类的静态方法。 (5)初始化一个类的子类。例如对 Sub 类的初始化,可看作是对它父类 Base 类的主动 使用,因此会先初始化 Base 类。 (6)Java 虚拟机启动时被标明为启动类的类。例如对于“java Sample”命令,Sample 类就是启动类,Java 虚拟机会先初始化它。 2.类的加载采用父亲委托机制,它有什么优点? [答案] 父亲委托机制的优点是能使提高软件系统的安全性。因为在此机制下,用户自 定义的类加载器不可能加载应该由父加载器加载的可靠类,从而防止不可靠甚至恶意的 代码代替由父加载器加载的可靠代码。 3.类在什么情况下被卸载? [答案] 当代表一个类(以 Sample 类为例)的 java.lang.Class 对象不再被引用,即不可 触及,那么 Class 对象就会结束生命周期,Sample 类在方法区内的数据也会被卸载,从 而结束 Sample 类的生命周期。由此可见,一个类何时被卸载,取决于代表它的 Class 对象何时结束生命周期。 4.什么叫运行时包?它有什么优点? [答案] 由同一类加载器加载的属于相同包的类组成了运行时包。运行时包的优点在于, 只有属于同一运行时包的类才能互相访问包可见(即默认访问级别)的类和类成员。这 样的 限制能 避免用户自定义的类冒充核心类库的类,去访问核心类库的包可见成员。 5.对于以下代码,运行“java Sample”,将得到什么打印结果? public class Sample{ static int a=1; static{ a=2; } static{ a=4; } public static void main(String args[]){ a++; System.out.println("a="+a); } } [答案] 打印: a=5 第 11 章 对象的生命周期 1.以下类是否具有默认构造方法? public class Counter { int current, step; public Counter(int startValue, int stepValue) { set(startValue); setStepValue(stepValue); } public int get() { return current; } public void set(int value) { current = value; } public void setStepValue(int stepValue) { step = stepValue; } } [答案] 没有默认构造方法 2.构造方法可以被哪些修饰符修饰? a) final b) static c) synchronized d) native e) private [答案] e 3.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class Hope{ public static void main(String argv[]){ Hope h = new Hope(); } protected Hope(){ for(int i =0; i <10; i ++){ System.out.println(i); } } } [答案] 打印:0 1 2 3 4 5 6 7 8 9 4.以下代码能否编译通过,假如能编译通过,运行“java B”时得到什么打印结果? class A { int i; A(int i) { this.i = i * 2; } } public class B extends A { public static void main(String[] args) { B b = new B(2); } B(int i) { System.out.println(i); } } [答案] 编译出错。类 B 的 B(int i)要求父类 A 提供默认的构造方法。 5.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class Mystery { String s; public static void main(String[] args) { Mystery m = new Mystery(); m.go(); } void Mystery() { s = "constructor"; } void go() { System.out.println(s); } } [答案] 打印:null 6.对于以下代码: class Base{ Base(int i){ System.out.println("base constructor"); } Base(){} } public class Sup extends Base{ public static void main(String argv[]){ Sup s= new Sup(); //One } Sup(){ //Two } public void derived(){ //Three } } 以下哪些选项使得运行“java Sup”时打印“base constructor”? a) 在“//One”的地方加入一行“Base(10);” b) 在“//One”的地方加入一行“super(10);” c) 在“//Two”的地方加入一行“super(10);” d) 在“//Three”的地方加入一行“super(10);” [答案] c 7.java.lang.Class 类没有 public 类型的构造方法,这句话对吗? [答案] 对 8.以下代码能否编译通过? class A { public A() {} public A(int i) { this(); } } class B extends A { public boolean B(String msg) { return false; } } class C extends B { private C() { super(); } public C(String msg) { this(); } public C(int i) {} } [答案] 可以编译通过。 第 12 章 内部类 1.在类的方法内部定义的内部类可以访问外部类的所有成员变量,这句话对吗? [答案] 对。 2.内部类和外部类一样,可以实现接口,继承其他的类或被其他的类继承。这句话对 吗? [答案] 对。 3.以下代码能否编译通过,假如能编译通过,运行“java Outer”时得到什么打印结果? public class Outer{ public String name = "Outer"; public static void main(String argv[]){ Inner i = new Inner(); i.showName(); }//End of main private class Inner{ String name =new String("Inner"); void showName(){ System.out.println(name); } }//End of Inner class } [答案] 编译出错。应该把“Inner i = new Inner();”改为“Inner i = new Outer().new Inner();” 4.外部类不能被private、protected修饰,有些内部类可以被private、protected修饰。这 句话对吗? [答案] 对 5.匿名类也需要声明构造方法,这句话对吗? [答案] 错。 6.以下哪些是合法的代码? a) public class Outer { String a; public class Inner { String b; public void innerMethod() { System.out.println("Enclosing a is " + a); System.out.println("b is " + b); } } public void createInner() { Inner i=new Inner(); i.innerMethod(); } } b) public class Outer { String a; public class Inner { String b; public void innerMethod() { System.out.println("Enclosing a is " + a); System.out.println("b is " + b); } } public void createInner() { Outer.Inner i=new Outer.Inner(); i.innerMethod(); } } c) public class Outer { String a; int k=1; public static class Inner { String b; public void innerMethod() { System.out.println("Enclosing a is " + a); System.out.println("b i s " + b); } } public void createInner() { Outer.Inner i=new Outer.Inner(); i.innerMethod(); System.out.println("This is the value of k: " + k); } } d) public class Outer { static String a; static int k; public Outer() { k++; } public class Inner { String b; public void innerMethod() { System.out.println("Enclosing a is " + a); System.out.println("b is " + b); } public void createInner() { Outer.Inner i=new Outer.Inner(); i.innerMethod(); System.out.println("This is the instance no: " + k); } } } [答案] a,b,d 7.对于以下代码,method2()方法可否访问变量 x、y 或 z? class A { public int x; private int y; class B { protected void method1() {} class C { private void method2() {} } } class D extends A { public float z; } } [答案] 可以直接访问变量 x 和 y,但不能直接访问变量 z。 8.对于以下类,在 Inner 类的 method()方法中,哪些语句是合法的? public class Outer { private int a; public static void main(String[] args){} public void go(int w,final int z) { int p=w-z; final int q=w+z; class Inner { public void method (){ System.out.println("w=" +w); //line1 System.out.println("z=" +z); //line2 System.out.println("p=" +p); //line3 System.out.println("q=" +q); //line4 System.out.println("a=" +a); //line5 } } Inner that=new Inner(); that.method(); } } [答案] line2 line4 line5 第 13 章 多线程与并发 1.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class WhatHappens implements Runnable { public static void main(String[] args) { Thread t = new Thread(this); t.start(); } public void run() { System.out.println("hi"); } } [答案] 编译出错。在 main()方法中不能直接引用“this”。 2.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class Bground extends Thread{ public static void main(String argv[]){ Bground b = new Bground(); b.run(); } public void start(){ for (int i = 0; i <10; i++){ System.out.println("Value of i = " + i); } } } [答案] 编译和运行都通过。运行时没有任何打印结果。 3.以下哪些属于 java.lang.Thread 类的方法? a) yield() b) sleep(long msec) c) go() d) stop() e) suspend() [答案] a,b,d,e 4.在哪些情况线程会被阻塞? [答案] 在以下情况,线程被阻塞: (1)当线程处于运行状态,如果执行了某个对象的 wait()方法,Java 虚拟机就会把线 程放到这个对象的等待池中,线程被阻塞。 (2)当线程处于运行状态,试图获得某个对象的同步锁时,如果该对象的同步锁已经 被其它线程占用,Java 虚拟机就会把这个线程放到这个对象的锁池中,线程被阻塞。。 ( 3 ) 线程执行了 sleep()方法,或者调用了其他线程的 join()方法,或者发出了 I/O 请求, 就会被阻塞。 5.有哪些原因会导致线程死亡? [答案] 当线程退出 run()方法,就进入死亡状态。线程有可能是正常执行完 run()方法而 退出,也有可能是遇到异常而退出,只要退出 run()方法,线程就死亡。 此外,线程的 stop()方法也会让线程死亡。 6.对于以下代码: public class RunTest implements Runnable { public static void main(String[] args) { RunTest rt = new RunTest(); Thread t =new Thread(rt); //此处插入一行 } public void run() { System.out.println("running"); } void go() { start(1); } void start(int i) {} } 下面哪些语句放到以上插入行,将使程序打印“running”? a) System.out.println("running"); b) t.start(); c) rt.go(); d) rt.start(1); [答案] a,b 7.以下代码能否编译通过,假如能编译通过,运行“java Test”时得到什么打印结果? class RunHandler{ public void run(){ System.out.println("run"); } } public class Test { public static void main(String[] args) { Thread t = new Thread(new RunHandler()); t.start(); } } [答案] 编译出错。RunHandler 类没有实现 Runnable 接口,因此不能作为 Thread 构造方 法的参数。 第 14 章 数组 1.以下哪段代码能显示最后一个命令行参数,并且当不存在命令行参数时,不会抛出 异常? a) public static void main(String args[]) { if (args.length != 0) System.out.println(args[args.length-1]); } b) public static void main(String args[]) { try { System.out.println(args[args.length]); } catch (ArrayIndexOutOfBoundsException e) {} } c) public static void main(String args[]) { int ix = args.length; String last = args[ix]; if (ix != 0) System.out.println(last); } d) public static void main(String args[]) { int ix = args.length-1; if (ix > 0) System.out.println(args[ix]); } e) public static void main(String args[]) { try { System.out.println(args[args.length-1]); } catch (NullPointerException e) {} } [答案] a 2.执行完以下代码后,数组 arr 的各个元素的取值是什么? int[] arr = {1, 2, 3}; for (int i=0; i < 2; i++) arr[i] = 0; [答案] arr[0]=0, arr[1]=0, arr[2]=3 3.以下代码能否编译通过,假如能编译通过,运行时出现什么情况? public class MyAr{ public static void main(String argv[]){ int[] i = new int[5]; System.out.println(i[5]); } } [答案] 运行时抛出 ArrayIndexOutOfBoundsException。 4.如何获得数组 myarray 的长度? a) myarray.length() b) myarray.length c) myarray.size d) myarray.size() [答案] b 5.以下哪些是合法的数组声明和初始化? a) int x[] = {1,2,3}; b) int []x[] = {{1,2,3},{1,2,3}}; c) int x[3] = {1,2,3}; d) int []x = {0,0,0}; e) char c[] = {'a', 'b'}; f) int x[]=new int[]{1,2,3}; g) int x[]=new int[3]{1,2,3}; h) int x[][]=new int[][2]; i) int x[]=new int[-4]; j) int x[]=new int[0]; [答案] a,b,d,e,f 6.以下代码能否编译通过,假如能编译通过,运行时出现什么情况? public class Abs{ static int[] a=new int[4]; static Object[] o=new Object[4]; static String s[]; public static void main(String args[]){ System.out.println(a[0]); System.out.println(o[3]); System.out.println(s); } } [答案] 打印: 0 null null 7.以下代码能否编译通过,假如能编译通过,运行时出现什么情况? public class Q { public static void main(String argv[]){ int anar[]=new int[]{1,2,3}; System.out.println(anar[1]); } } [答案] 打印 2 8.以下哪些是合法的二维数组的声明和初始化? a)int a[][] = new int[10,10]; b)int a[][] = new int [10][10]; c)int a[10][10] = new int [10][10]; d)int [][]a = new int [10][10]; e) int []a[] = new int [10][10]; [答案] b,d,e 第 15 章 Java 集合 1.Set 和 List 有哪些区别? [答案] Set(集)中的对象不按特定方式排序,并且没有重复对象。它的有些实现类能对集合 中对象按特定方式排序。 List(列表)中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的 索引位置检索对象。 2.Collection 与 Collections 有什么区别? [答案] Collection 接口是 Set 和 List 接口的父接口,Collection 接口中声明了适用于 Java 集合的通用方法。 Collections 类是一个集合实用类,它的一部分方法专门用于操纵 List 类型集合,还有一 部分方法可用于操纵所有的 Collection 类型或 Map 类型集合。 3.利用 LinkedList 编写一个用于存取字符串的堆栈类 MyStringStack,它实现了以下 MyStringStackIFC 接口: public interface MyStringStackIFC{ /** 取出堆栈尾部的一个字符串 */ public String pop(); /** 向堆栈尾部加入一个字符串 */ public void push(String str); } [答案] 参见 MyStringStack.java import java.util.LinkedList; public class MyStringStack implements MyStringStackIFC{ private LinkedList list=new LinkedList(); public String pop() { if(list.size()==0) return null; else{ String str = list.getLast(); list.removeLast(); return str; } } public void push(String str) { list.addLast(str); } public static void main(String args[]){ //演示堆栈的用法 MyStringStack stack=new MyStringStack(); stack.push("Tom"); stack.push("Mike"); stack.push("Linda"); System.out.println(stack.pop()); System.out.println(stack.pop()); System.out.println(stack.pop()); System.out.println(stack.pop()); } } 4.比较 Java 数组、ArrayList 和 LinkedList 在查询和存取元素方面的性能。 [答案]参见以下表。假定把性能分为低和高两个档次。 类型 Java 数组 ArrayList LinkedList 随机访问操作(get) 高 高 低 迭代操作(iterate) 高 高 高 插入操作(insert) 不适用 低 高 删除操作(remove) 不适用 低 高 5.JDK1.5 中引入范型有什么作用? [答案] 泛型有助于把 ClassCastException 运行时异常转变为编译时的类型不匹配错误。 错误发现得越早,越能提高软件调试的效率,提高软件的健壮性,降低软件的开发和维护的 成本。 6.什么是 HashSet 和 HashMap 的负载因子? [答案] 负载因子(load factor)等于 size/capacity。负载因子为 0,表示空的哈希表;负 载因子为 0.5,表示半满的哈希表,以此类推。轻负载的哈希表具有冲突少、适于插入和查 找的优点( 但 是 用 Iterator 遍历元素的速度较慢)。 HashSet 和 HashMap 的构造方法允许指定 负载因子,当哈希表的当前负载达到用户设定的负载因子时,HashSet 和 HashMap 会自动成 倍的增加容量(即桶的数量),并且重新分配原有的元素的位置。 第 16 章 输入输出 1.以下哪些属于 File 类的功能? a) 改变当前目录 b) 返回根目录的名字 c) 删除文件 d) 读取文件中的数据 [答案] b,c 2.File 类可以表示以下哪些内容? a) 文件 b) 目录 c) 输入流 d) 输出流 [答案]a,b 3.以下哪些是合法的构造 RandomAccessFile 对象的代码? a) RandomAccessFile(new File("D:\\myex\\dir1\\..\\test.java"), "rw") b) RandomAccessFile("D:\\myex\\test.java", "r") c) RandomAccessFile("D:\\myex\\test.java") d) RandomAccessFile("D:\\myex\\test.java","wr") [答案] a,b 4.引用变量 raf 引用一个 RandomAccessFile 对象,如何从文件中读取 10 个字节? a) raf.readLine(); b) raf.read(10); c) byte [] tenb = new byte[10]; raf.read(tenb); d) byte [] tenb = new byte[10]; raf.readFully(tenb); [答案] c 5.以下哪段代码能够向文件中写入 UTF8 编码的数据? a) public void write(String msg) throws IOException { FileWriter fw = new FileWriter(new File("file")); fw.write(msg); fw.close(); } b) public void write(String msg) throws IOException { OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("file"), "UTF8"); osw.write(msg); osw.close(); } c) public void write(String msg) throws IOException { FileWriter fw = new FileWriter(new File("file")); fw.setEncoding("UTF8"); fw.write(msg); fw.close(); } d) public void write(String msg) throws IOException { FilterWriter fw = FilterWriter(new FileWriter("file"), "UTF8"); fw.write(msg); fw.close(); } e) public void write(String msg) throws IOException { OutputStreamWriter osw = new OutputStreamWriter( new OutputStream(new File("file")), "UTF8" ); osw.write(msg); osw.close(); } [答案] b 第 17 章 图形用户界面 1.以下代码能否编译通过,假如能编译通过,运行时出现什么情况? import java.awt.*; public class FlowApp extends Frame{ public static void main(String argv[]){ FlowAp fa=new FlowApp(); fa.setSize(400,300); fa.setVisible(true); } FlowApp(){ add(new Button("One")); add(new Button("Two")); add(new Button("Three")); add(new Button("Four")); }//End of constructor }//End of Application [答案] 显示如下图形: 2.如果采用流式布局管理器(FlowLayout),在加入组件时不用指定组件在容器中的位 置,管理器会自动按照既定方式来安排组件。这句话对吗? [答案] 对。 3.运行以下程序,会出现什么样的图形界面? import java.awt.*; public class CompLay extends Frame{ public static void main(String argv[]){ CompLay cl = new CompLay(); } CompLay(){ Panel p = new Panel(); p.setBackground(Color.pink); p.add(new Button("One")); p.add(new Button("Two")); p.add(new Button("Three")); add("South",p); setLayout(new FlowLayout()); setSize(300,300); setVisible(true); } } [答案] 显示如下图形: 4.如何改变当前容器的布局? [答案] 通过容器的 setLayout() 方法来改变布局。 5.以下哪些是 GridBagConstraints 类的属性? a) ipadx b) fill c) insets d) width [答案] a,b,c 6.以下哪些布局管理器会保持组件的最佳宽度和高度? a)GridLayout b)GridBagLayout c)BoxLayout d)FlowLayout e)BorderLayout [答案] d 7.采用 GridLayout ,所有网格的大小相同。这句话对吗? [答案] 对 8.以下哪些容器的默认布局管理器为 FlowLayout? a) Panel b) Applet c) Frame d) Window e) Dialog [答案] a,b 9.以下代码能否编译通过,假如能编译通过,运行时出现什么情况? //MyWindow.java import java.awt.event.*; import java.awt.*; public class MyWindow extends Frame implements WindowListener{ public static void main(String argv[]){ MyWindow mwinc = new MyWindow (); } public void windowClosing(WindowEvent we){ System.exit(0); } public MyWindow (){ setSize(300,300); setVisible(true); } } [答案] 编译出错。MyWindow 类没有实现 WindowListener 接口中的所有方法,因此应 该声明为抽象类。 10.在 AWT 的事件处理模型中,一个组件只能注册一个监听者。这句话对吗? [答案] 不对 11.以下哪些属于在 MouseListener 监听接口中定义的事件处理方法? a) actionPerformed(ActionEvent e){} b) mousePressed(MouseEvent e){} c) functionKey(KeyPress k){} d) componentAdded(ContainerEvent e){} [答案] b 第 18 章 Swing 组件 1.Swing 组件与普通的 AWT 组件有什么区别? [答案] AWT 组件简单、稳定,兼容于任何一个 JDK 版本,但依赖于本地操作系统 的 GUI,缺乏平台独立性。每个 AWT 组件都有一个同位体( peer),它们位于 java.awt.peer 包中,这些 peer 负责与本地操作系统的交互,而本地操作系统负责显示和操作组件。 由于 AWT 组件与本地平台的 GUI 绑定,因此用 AWT 组件创建的图形界面在不同的操 作系统中会有不同的外观。 Swing 组件从 JDK1.2 版本才开始引入,这些 Swing 组件位于 javax.swing 包中。Swing 组件是用纯 Java 语言编写而成的,不依赖于本地操作系统的 GUI,Swing 组件可以跨 平台运行,即在不同操作系统中保持相同的外观, 2.编写一个具有图形用户界面的程序,每隔 30 秒就在窗体的任意位置显示一个具有 随机大小的椭圆。 [答案] 参见 OvalDrawer.java 3.JFrame 和 JApplet 的内容面板具有相同的默认布局管理器,这句话对吗? [答案] 对 4.用各种 Swing 组件创建一个计算器界面,并且能进行加法、减法、乘法和除法运算。 [答案] 参见 Calculater.java 5.JFrame 与 Frame 有什么区别? [答案] JFrame 是 Swing 组件,而 Frame 是 AWT 组件。JFrame 与 Frame 的最大区别在 于前者不能直接通过 add()方法加入组件,也不能直接通过 setLayout()方法设置布局。此外, JFrame 有一个 setDefaultCloseOperation(int operation)方法,用来决定如何响应用户关闭窗体 的操作。 6.JRadioButton、JCheckBox、JComboBox 和 JList 有什么区别? [答案] JRadioButton 表示单选按钮,可以把一组单选按钮加入到一个按钮组(ButtonGroup)中, 在任何时候,用户只能选择按钮组中的一个按钮。 JCheckBox 表示复选框,用户可以同时选择多个复选框。 JComboBox 表示下拉列表,下拉列表和单选按钮组一样,也可以提供多个选项,并且 只允许用户选择一项。下拉列表的优点在于能节省空间,使界面更加紧凑。只有当用户点击 下拉列表,才会显示列表中的所有选项。 JList 表示列表框,它和下拉列表有许多不同之处。前者在界面上占据固定行数的空间, 并且既支持单项选择,也支持多项选择。 第 19 章 Java 常用类 1.以下哪些方法在Object类中定义? a) toString() b) equals(Object o) c) public static void main(String [] args) d) System.out.println() e) wait() [答案] a,b,e 2.wait()、notify()和notifyAll()方法是在哪个类中定义的? a)Thread b)Runnable c)Object d)Event e)Synchronize [答案] c 3.Object类的finalize()方法是如何声明的? a) public void finalize() b) protected int finalize() c) protected void finalize(int a) d) protected void finalize() throws Throwable [答案]d 4.运行以下代码,得到什么打印结果? String s = new String("amit"); System.out.println(s.substring(2)); [答案] 打印: it 5.运行以下代码,得到什么打印结果? String s1 = new String("amit"); String s2 = s1.replace('m','i'); s1.concat("Poddar"); System.out.println(s1); System.out.println((s1+s2).charAt(5)); [答案] 打印:amit i 6.以下哪个类有 append()方法? a) StringBuffer b) String c) Object [答案] a 7.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? StringBuffer s = new StringBuffer("abcdefgh"); StringBuffer s1=s.replace(0, 1,"q"); System.out.println(s); System.out.println(s1==s); [答案] 打印:qbcdefgh true 8.“System.out.println(Math.floor(-2.1));”的打印结果是什么? a) -2 b) 2.0 c) -3 d) -3.0 [答案] d 9.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? int i = 3; int j = 0; float k = 3.2F; long m = -3; if (Math.ceil(i) < Math.floor(k)) if (Math.abs(i) == m) System.out.println(i); else System.out.println(j); else System.out.println(Math.abs(m) + 1); [答案] 打印: 4

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档