《JAVA程序设计实用教程课后习题简答.docx》由会员分享,可在线阅读,更多相关《JAVA程序设计实用教程课后习题简答.docx(52页珍藏版)》请在三一办公上搜索。
1、JAVA程序设计实用教程课后习题简答第3章 面向对象的核心特征 3-1 什么是类?什么是对象?他们之间的关系是怎样的? 在面向对象的概念中,类是既包括数据又包括作用于数据的一组操作的封装体。类中的数据称为成员变量,类中的数据操作称为成员方法。类中的成员变量和成员方法统称为类的成员。 对象是类的实例。对象与类的关系就像变量与数据类型的关系一样。是抽象与具体,模板与实例的关系,类是抽象的、是模板,对象是具体的、是实例。 3-2 作为引用数据类型,对象在赋值和方法的参数传递方面与基本数据类型的变量有什么不同? 作为引用数据类型,两个对象之间的赋值是引用赋值,对象可被赋值为null。具体可参见课本第三
2、章图3.1的(d)。方法声明中形式参数的数据类型,既可以是基本数据类型,也可以是引用数据类型。如果形式参数的数据类型是基本数据类型,则实际参数向形式参数传递的是值;如果形参的数据类型是引用数据类型,则实参向形参传递的是引用。 同样,方法返回值的数据类型,既可以是基本数据类型,也可以是引用数据类型,两者分别传递值和引用。 3-3 面向对象技术的三个核心特性是什么? 类的封装、继承和多态。 3-4 什么是封装?为什么要将类封装起来?封装的原则是什么? 封装性是面向对象的核心特征之一,它提供一种信息隐藏技术。 类的封装包含两层含义:一是将数据和对数据的操作组合起来构成类,类是一个不可分割的独立单位;
3、二是类中既要提供与外部联系的方法,同时又要尽可能隐藏类的实现细节。软件扩充和维护的需要需对类进行封装。封装原则:隐藏内部实现细节。 3-5 类中的方法与C+中的函数有什么差别? Java类中的成员方法与C语言中的函数很像,但在声明、调用等方面存在很大差别。具体方法可参考课本P66P67。 3-6 类的构造方法和析构方法有什么作用?它们分别被谁调用?它们的访问权限范围应该是怎样的?是否每个类都必须设计构造方法和析构方法?没有设计构造方法和析构方法的类执行什么构造方法和析构方法? 类的构造方法和析构方法是类特殊的成员方法,构造方法用于在创建实例时进行初始化;析构方法用于在释放实例时执行特定操作。构
4、造方法由new运算符调用;析构方法可由对象调用,或被虚拟机自动执行。它们的访问权限范围通常都是public。 构造方法不能继承,析构方法能够继承。一个类可以不声明构造方法和析构方法。当一Java为它提供一个无参数的默认构造方法,个类没有声明构造方法时,约定自动调用父类的 默认构造方法;当一个类没有声明析构方法时,它执行继承来的父类的析构方法。 3-7 Java定义了几个关键字用于表示几种访问权限?各表示什么含义?类有几种访问权限?类中成员有几种访问权限?分别使用什么关键字? Java定义了三个表示权限的关键字。类有2种访问权限分别是:公有public,缺省。类中成员有4种访问权限分别是:公有p
5、ublic,可被所有类访问;保护protected,可被同一包及包外所有子类访问;缺省,可被当前包中所有类访问;私有private,只能被当前类访问。 3-8 this引用有什么作用?this引用有几种使用方法? Java类中成员方法与C语言中函数还有一个重要差别就是,Java类中每个成员方法都可以使用代词this引用调用该方法的当前对象自己,this引用有以下3种用法: this用于指代调用成员方法的当前对象自身,语法格式如下: this 通过this可以调用当前对象的成员变量,调用当前对象的成员方法。语法格式如下: this.成员变量 this.成员方法(参数列表)注意:Java中的thi
6、s是引用方式,不是C+中的指针方式。 this引用还可以用在重载的构造方法中,调用本类已定义好的构造方法。语法格式如下: this(参数列表)注意:在构造方法中,this引用必须是第一行语句。 3-9 说明类成员与实例成员的区别。 Java的类中可以包括两种成员:实例成员和类成员。 实例成员是属于对象的,实例成员包括实例成员变量和实例成员方法。类成员是属于类的,需要用关键字static标识,也称为静态成员。具体区别如下: 1.实例成员变量与类成员变量 (1) 两者声明时的差别。当一个类声明成员变量时,没有使用关键字static声明的为实例成员变量,使用关键字static声明的为类成员变量。 (
7、2) 两者存储结构的差别。当创建一个对象时,系统会为每一个对象的每一个实例成员变量分配一个存储单元,使得属于不同对象的实例成员变量有不同的值;而为每一个类成员变量只分配一个存储单元,使得所有对象公用一个类成员变量。 (3) 两者引用方式的差别。实例成员变量属于对象,必须通过对象访问;类成员变量属于类,既可以通过对象,也可以通过类访问。 2.实例成员方法与类成员方法 (1) 两者声明时的差别。当一个类声明成员方法时,没有使用关键字static声明的为实例成员方法,使用关键字static声明的为类成员方法。 (2) 两者方法体中语句的差别。类成员方法只能访问类成员变量;实例成员方法既可以访问类成员
8、变量,也可以访问实例成员变量。在实例成员方法体中,可以使用this引用指代当前对象;而在类成员方法体中,则不能使用this引用。 (3) 两者引用方式的差别。实例成员方法必须通过对象访问;类成员方法既可以通过对象,也可以通过类访问。 3-10 什么是继承?继承机制的作用是什么?子类继承了父类中的什么?子类不需要父类中的成员时怎么办?能够删除它们吗?Java允许一个类有多个父类吗? 继承性是面向对象的核心特征之一,是一种由已有的类创建新类的机制。被继承的类称为父类或超类,通过继承产生的新类称为子类或派生类。继承机制是面向对象程序设计中实现软件可重用性的最重要手段。 通过继承,子类自动拥有父类的所
9、有成员,包括成员变量和成员方法(不包括构造方法)。子类可以更改父类成员,还可以增加自己的成员,但是,不能删除父类的成员。 在Java中以“单重继承+接口”的方式代替多重继承,不允许一个类有多个父类。 3-11 子类能够访问父类中什么样权限的成员? 虽然子类继承了父类的成员变量和成员方法,但并不是对所有的成员都有访问权限。访问权限说明如下: (1)子类对父类的私有成员(private)没有访问权限。 (2)子类对父类的公有成员(public)和保护成员(protected)具有访问权限。 (3)子类对父类中缺省权限成员访问权限分为两种情况,对同一包中父类的缺省权限成员具有访问权限,而对不同包中父
10、类的缺省权限成员没有访问权限。 3-12 如果子类声明的成员与父类成员同名会怎么样? 如果子类重定义父类的同名成员变量,则子类隐藏了父类成员变量。如果子类重定义父类的同名成员方法,当子类方法的参数列表与父类方法的参数列表完全相同时,则称子类成员方法覆盖了成员方法。如果子类重定义父类的同名成员方法,当子类方法的参数列表与 父类方法的参数列表不同时,子类继承了父类的成员方法,并重载了继承来的该成员方法。 3-13 super引用有什么作用?super引用有几种使用方法? 当子类重定义了父类成员时,则存在同名成员问题。此时,在子类方法体中,成员均默认为子类成员。如果需要引用父类同名成员,则需要使用s
11、upper引用。在以下两种同名成员情况下,需要使用supper引用。 (1)子类隐藏父类成员时,如需要访问父类同名成员变量时,需要使用supper指代父类的同名成员变量。语法如下: super.成员变量 (2)子类覆盖父类成员时,如需要访问父类同名成员方法时,需要使用supper指代父类的同名成员方法。语法如下: super.成员方法(参数列表) 注意:super引用不能像this引用一样单独使用。 3-14 什么是多态性?什么是方法的重载?方法的重载和覆盖有何区别? 在面向对象语言中,多态是指一个方法可以有多种实现版本,类的多态性表现为方法的多态性。重载是指同一个类中的多个方法可以同名但参数
12、列表必须不同。重载表现为同一个类中方法的多态性。覆盖是指子类重定义了父类中的同名方法。覆盖表现为父类与子类之间方法的多态性。 3-15 什么是运行时多态?方法的重载和覆盖分别是什么时的多态性? 如果在编译时不能确定、只有在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态。方法的重载都是编译时多态。方法的覆盖变现出两种多态性,当对象获得本类的实例时,为编译时多态,否则为运行时多态。 3-16 什么是抽象类?在什么情况下需要设计抽象类?抽象类中是否必须有抽象方法? 使用关键字abstract声明的类称为抽象类,使用abstract声明的成员方法为抽象方法。抽象类中可以不包含抽象方法,但包
13、含抽象方法的类必须被声明为抽象类。 3-17 什么是最终类?在什么情况下需要设计最终类?最终类中是否必须有最终方法? 使用关键字final声明的类称为最终类,最终类不能被继承。使用final声明的成员方法称为最终方法,最终方法不能被子类覆盖。最终类中包含的都是最终方法,非最终类也可以包含最终方法。 3-18 将辗转相除法求两个整数的最大公因数gcd(a,b)用递归方法实现,辗转相除法题意见例2.11,再设计下列方法: 求两个整数a b的最小公倍数; 求三个整数abc的最大公约数。 解答程序如下。 public class GCD_recursion public static int gcd(
14、int a,int b) /返回a,b的最大公因数 if (b=0) return a; if (a0) return gcd(-a,b); if (b0) table = new intn; for (int i=0;in;i+) tablei = i+1; permute(n); else table = null; private void output /输出数组元素 for (int i=0;i=0 & i=0 & jtable.length) int temp = tablei; tablei = tablej; tablej = temp; private void permut
15、e(int n) /用递归方法求n个数的无重复全排列 if (n=1) this.output; else permute(n-1); for (int j=0;jn-1;j+) swap(n-1,j); permute(n-1); swap(n-1,j); /交换数组两个元素值 public static void main(String args) new Permutation(3); 程序运行结果如下: 1 2 3 2 1 3 3 2 1 2 3 1 1 3 2 3 1 2 3-20 Java为什么不支持指针?C+的指针类型存在哪些潜在的错误?没有指针,Java如何实现在C+中用指针实
16、现的功能?例如,通过访问指针访问数组元素,通过指针使用字符串,方法参数传递地址,方法参数用于输出,方法返回非基本数据类型等。 由于指针往往在带来方便的同时也导致代码不安全的根源,如内存泄露等,同时也会 使程序变得非常复杂难以理解,Java语言明确说明取消了指针。Java使用引用代替了指针。 3-21 Java为什么不支持C+的运算符重载特性? 这是为了防止运算符重载使得代码的功能变的不清晰。 第4章 接口内部类和包 4-1 什么是接口?接口和抽象类有哪些相同之处和不同之处? 接口是一组常量和抽象方法的集合。在Java中,接口是一种引用数据类型,用关键字implements声明。接口与抽象类的区
17、别为: 相同点:1.两者都包含抽象方法,约定多个类共用方法的参数列表和返回值。2.两者都不能被实例化。3.两者都是引用数据类型,其变量可被赋值为子类或实现接口类的对象。 不同点:1.抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之间共同使用的方法。2.抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多重3.抽象类及其类中成员具有与普通类一样的访问权限;继承的功能。接口的访问权限由public和缺省两种,接口中成员的访问权限均是public。4.抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法必须全部是抽象方法,不能声明构造方法。5.抽象类中可以声明成员变量
18、,子类可以对该成员变量赋值;接口中只能声明常量。 4-2 为什么能够声明接口变量?接口变量能够获得什么样的值? 接口是引用数据类型可以声明接口变量。接口变量能够获得实现接口的类的对象,也称为接口对象。 4-3 接口有哪些特点?为什么需要声明借口?接口是否具有继承性?接口中能否写构造方法? 接口特点: (1)接口及接口中成员的访问权限都是public (2)接口中的成员方法都是公有的、抽象的实例成员方法,即默认修饰符为public abstract。 (3)接口中的所有抽象方法必须全部被实现接口的类覆盖。 (4)接口中的成员变量都是常量 (5)接口不能被实例化。接口中的方法都是抽象的,构造方法不
19、是抽象的所有不能写构造方法 (6)接口是引用数据类型。 Java只支持单重继承,以“单重继承+接口”的方式代替多继承。接口可以继承一个已经存在的父接口。 4-4 什么是单重继承?什么是多重继承?类的层次体系为什么需要多重继承?单重继承有什么缺点?既然有缺点,为什么Java仍然采用单重继承?Java怎样实现多重继承? 单重继承就是一个类只能有一个父类。多继承就是可以有多个父类。现实中的对象往往表现出多种特性,用单重继承无法客观描绘,因此需要多重继承。但是C+的多重继承过于复杂,因此Java用“单重继承+接口”代替了多重继承,以提高运行效率,增加安全性,降低复杂性。 4-5 类与类之间存在哪几种关
20、系? 类与类之间有继承关系,还存在嵌套关系。 4-6 在什么情况下需要声明内部类?内部类有哪些特性? Java不支持C+的结构(struct)类型,当实际中需要使用一个结构时,可以声明一个类;但当结构作为数组的元素类型时,或当一个类中需要使用结构时,可以将结构声明为内部类。内部类特性可参看课本P123。 4-7 为什么是包?为什么需要包机制?Java有哪些包?各有什么功能? 从逻辑概念看,包是类的集合,一个包中包含多个类;从存储概念看,包是类的组织方式,一个包对应一个文件夹,一个文件夹中包含多个字节码文件;包与类的关系,就像文件夹与文件的关系一样。为解决字节码文件存放和类命名的问题,Java提
21、供了包机制。Java的常用包及其作用可查看P130表4-1 。 4-8 Java的API采用什么组织方式?怎样使用Java定义好的类? Java语言的API按照功能划分成若干包,每个包都有许多公有的类和接口。如果需要使用已定义好的一个包中的类或接口,可以使用import语句声明。 4-9 Java声明Object类的作用是什么?Object类中声明了哪些方法?Object类在Java类层次体系中的地位是怎样的? Object是Java中所有类的父类或祖先类,它定义了一个Java对象所需要的基本操作和属性。定义的方法有:1.getClass获得当前对象所在的类是什么、equals比较两个对象是否
22、相等、toString将当前对象的信息用字符串描述、finalize析构方法。 4-10 Java为什么需要声明基本数据类型的包装类?基本数据类型的包装类有哪些? 为实现完全面向对象的特性,Java为每个基本数据类型都声明有对应的一个类。公有8个基本数据类型的包装类:Byte、Short、Integer、Long、Float、Double、Character、Boolean 4-11 怎样将数值类型的数据转换成字符串?怎样将字符串转换成数值类型的数据? Integer类的静态方法parseInt和实例方法intValue都可以将一个字符串转换成int值。Integer类的静态方法toBinar
23、yString(int i)、toOctalString(int i)、Integer.toHexString(int i)可以将十进制i转化为二进制、八进制、十六进制、字符串。 4-12 Java为什么要将Math类声明为最终类?Math类中有哪些常用方法? Math类提供提供E、PI常量和一组固定数学函数。都是静态可以直接通过类名引用,不需要继承。常用方法有:(1)求绝对值abs(double a)(2)求最大值max(double a,double b)(3)求最小值min(double a,double b)(3)返回一个0.01.0之间的随机数random 4-13 对数值变量或对象
24、进行比较操作,到底应该采用6个关系运算符还是调用equals、compareTo方法?是否每个对象都可以调用equals和compareTo方法?为什么?这两个方法在进行比较操作时有什么差别?它们在每个类中的含义都相同吗? 对数值、变量可以采用6个关系运算符,对象可以用后两者,但是并不是每个对象都可以调用这两个方法。具体用法及区别请看课本P133和P136. 4-14 System类、Class类和Runtime类各有哪些功能?在之前的程序中已用到这些类的哪些常量或方法? System类提供访问系统资源和标准输入/输出流的方法,之前用到了in和out常量。Class为类提供运行时信息,如名字、
25、类型、以及父类等。Runtime类可直接访问运行时资源。 4-15 怎样表示日期与时间数据?怎样引用java.util包的类? Java以一个长整型表示一个日期,该长整型表示从格林尼治时间1970-1-1 00:00:00 开始至某时刻的累积毫秒数。 4-16 泛型类有什么作用?在什么情况下需要使用泛型类? 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口、和方法的创建中,分别被称为泛型类、泛型接口、泛型方法。泛型类引入的好处不仅在于减少代码量,还在于提供了编译时期数据类型的检查功能,可以提前预知错误的发生,减少代码安全性,二是减少了强制转换类型。
26、 第5章 异常处理 5-1 程序中的错误有哪几种?分别能够在什么时刻被发现? 程序错误按照性质可分为3类:语法错、语义错、逻辑错。 1 语法错:违反语法规范的错误成为语法错( syntax error ),这类错误通常在编译时发现,又称为编译错,如标识符未声明、表达式中运算符与操作数类型不兼容、变量赋值时的类型与声明时的类型不匹配、括号不匹配、语句末缺少分号等。 2 语义错:如果在程序的语法上正确,但在语义上存在错误,则称为语义错,又称为运行错,语义错不能被编译系统发现,只有到程序运行时才能被发现,如输入数据格式错、除数为0错、给变量赋予超出其范围的值错等。 3 逻辑错:如果程序通过编译,可运
27、行,但运行结果与期望值不符,则这类错误称为逻辑错,例如,由于循环条件不正确而没有结果,循环次数不对等因素导致计算结果不正确等。 5-2 Java为什么要采用异常处理机制?Java的异常处理是怎样实现的?异常处理机制能够解决程序中遇到的所有错误吗?哪些错误不是异常处理能够解决的? 异常处理和捕获和处理运行时错误的一种机制。异常处理机制使程序具有处理错误的能力。即使发生了运行错,应用程序能够捕获异常并及时处理异常,使程序从运行错误中很好地恢复并继续运行,而不会导致程序运行非正常终止。而且如果当前方法没有能力处理异常,还可以将异常转交给调用者处理。异常处理机制将运行时错误封装成若干错误类和异常类,并
28、提供异常处理语句用于处理在程序中实现对运行时错误的发现和及时处理。异常处理机制并不能解决程序中的所有错误,例如内存溢出、栈溢出等。 5-3 请说出5个Java的异常类。 算术异常ArithmeticException、空对象异常NullPointerException、类型强制转换异常ClassCastException、负数组长度异常NegativeArraySizeException、数组下标越界异常 ArrayIndexOutOfBundsException等 5-4 请问运行没有main方法的类会怎样? 此类错误是Error类,当运行没有main方法的类时,则产生类定义未找到的错误。
29、5-5 举例说明你在调试程序时,遇到过哪些错误和异常,采取什么办法解决问题的。 1.无效的游标状态 修改:首先查看ResultSet是否为空,若为空则修改之;其次,也是我遇到的,就是:举个例子说明,如下 rs.getString(1); rs.getString(3);/注意3和2的顺序颠倒了 rs.getString(2);/此时会出现异常 ResultSet只能按顺序访问列的值,说明:不能颠倒,我猜想这可能是JDBC的一个BUG吧。不过后来我看.NET中的DataReader类后才恍然大悟,原来,ResultSet的游标每向后移动,前面的数据就会被丢弃掉,这样做有利于提高访问速度。 2.
30、ResultSet is closed 原因:一个Statement只能维持一个ResultSet为打开状态,后面的覆盖前面的,举个例子: ResultSet rs1 = stmt.excuteQuery; ResultSet rs2 = stmt.excuteQuery; String s = rs1.getString(1);/出现异常,因为rs1已经被关闭 3. 连接占线导致另一个 hstmt 原因:一个Connection只能维持一个Statement为打开状态 一个例子: Statement stmt1 = con.createStatement; Statement stmt2 =
31、 con.createStatement; stmts.excuteQuery(sql);/出现异常 其他异常 空指针异常 空指针异常应该说是最常见的异常了 原因主要有以下几点: 1.未初始化的变量 2.使用了未初始化的对象 注:引起这个异常的根本原因有可能隐藏的很深,空指针异常只不过是个表象而已(又被不幸的我遇到了). 5-6 如何处理除数为0异常? 进行除数运算时,先判断除数是否为0,若为0,则跳出提示。 5-7 怎样处理数组下标异常? 使用数组前先,判断下标是否小于数值长度,若不小于则提示数组下标有误。 5-8 说明采用什么语句能够捕获并处理异常? Java提供try-catch-fin
32、ally语句来捕获和处理一个或多个异常。try、catch、finally其中,catch字句可以有一个或多个,finally字句可以省略。 是关键字。但至少要有一个catch字句, 5-9 为什么将字符串转换成数值类型时会抛出异常?抛出什么异常? 并不是所有的字符串都能转换成数值型,当遇到一个不能转转换成数值型的字符串时,Java抛出NumberFormatException异常。 5-10 说明throw语句与throws子句的区别。 1.throws 用于抛出方法层次的异常, 并且直接由些方法调用异常处理类来处理该异常,所以它常用在方法的后面。比如 public static void
33、main(String args) throws SQLException 2.throw 用于抛出代码层次的异常,常用于方法块里面的代码,常和try.catch .语句块搭配实用,比throws的层次要低。 5-11 什么情况下需要自定义异常类? 当Java提供的异常类不能满足需要时,程序需要对自己抛出的异常类进行特殊处理,则可以自定义异常类。 第6章 图形用户界面 6-1 什么是组件?组件类与普通类有什么不同? 组件是构成图形用户界面的基本成分和核心元素;组件是具有以下特性的对象:运行时可见,能拥有并管理其他组件,在窗口中可操纵,可获得输入焦点等。组件类Component是一个抽象类,是A
34、WT组件类层次结构的根类,它提供对组件操作的通用方法。 6-2 设计Windows应用程序的图形用户界面需要哪些基本知识? 需要掌握Java组件的使用方法,理解委托事件处理模型,掌握多种布局方式。 6-3 什么是容器组件?它有什么特点?Java提供了哪些容器组件? 容器组件是一种能够容纳其他组件的特殊组件。特点:能容纳其他组件,并在其可视区域内显示这些组件。Java提供了窗口(window)和面板(panel)两种容器。 6-4 窗口与对话框有什么不同?框架与面板有什么不同? 对话框是窗口类的子类,对话框也是一种可移动的窗口,不能作为应用程序的主窗口,它依赖于一个框架窗口而存在,当框架窗口关闭
35、时,对话框也关闭。框架类是一种带标题栏并且可以改变大小的窗口;它是窗口类的子类,所以它可以独立存在,可被移动,可被最大化和最小化,有标题栏、边框、可添加菜单栏;而面板不能独立存在,必须包含在另一个容器里,面板没有标题,没有边框,不可添加菜单栏。 6-5 什么是事件?什么是事件源?事件处理程序写在哪里? 事件是指一个状态的改变,或者一个活动的发生。产生事件的组件称为事件源。事件处理程序写在事件监听器接口中声明的方法中。如:单击事件的事件处理程序由ActionListener接口中的actionPerformed方法实现。 6-6 如何理解Windows应用程序的图形用户界面是事件驱动的? 一个组
36、件的多个事件之间,多个组件的多个事件之间,其事件处理方法的执行次序是有规律的:1.不同组件的事件或同一组件的不同事件具有约定的执行次序。2.各组件的事件处理方法是否执行以及执行次序,取决于用户操作。3.在一个事件处理方法中,程序按照语句的书写次序顺序执行。 6-7 说明Java的委托事件模型。 事件源产生一个事件,并把这个事件发送到一个或多个监听程序,监听程序只是等待这个事件并处理它,然后返回。即程序把事件的处理“委托”给一段“代码”。 6-8 设计图形用户界面的Java应用程序,需要用到的组件分别在哪些包中?事件分别在哪些包中? 组件在java.awt包中,事件在java.awt.Event
37、和javax.swing.Event包中。 6-9 按钮组件能够注册哪些事件监听器?文本行组件能够注册哪些事件监听器?文本行和文本区组件能够响应的事件有什么不同? 按钮组件能够注册的事件监听器有ActionListener、ComponentListener、ItemListener等。文本行组件能够注册的事件监听器有ActionListener、ComponentListener、TextListener等。文本行是单行文本编辑框,用于编辑一行字符串,文本区是一个多行文本编辑框,它的基本操作与文本行类似,增加的是滚动条的显示和操作。 6-10 是否可以对一个组件注册多个事件监听器? 可以。如
38、果一个组件需要响应多个事件,则可以注册多个事件监听器。 6-11 一个事件监听器是否可以处理多个组件上产生的操作? 一个事件监听器对应一个事件处理方法,如果多个组件产生的操作相同,则可以注册同一个事件监听器。 6-12 在事件处理方法中,怎样区分不同的事件源组件? 事件接口中的所有事件处理方法,都采用相应的事件对象e作为参数, 用e.getSource方法可返回产生当前事件对象的事件源组件。 6-13 窗口上有哪些事件?每种事件在什么时候被触发?这些事件的触发次序是怎样的? 窗口上的事件有: windowOPend,windowActivated,windowDeactivated,windo
39、wIconified,windowDeiconified,windowClosing,windowClosed。每种事件的触发分别在:打开窗口、激活窗口、窗口失去焦点、窗口最小化、窗口恢复、关闭窗口时、关闭窗口后。触发次序与前述书写顺序相同。 6-14 Java有几种关闭窗口处理方式?分别是怎样的?分别适用于哪些窗口组件? Java有2种关闭窗口处理方式。第一种是设置窗口关闭时隐藏方式的setDefaultCloseOperation方法,第二种是写窗口关闭事件处理程序即实现WindowListener接口中的windowClosing方法。第一种适用于JFrame和JDialog等窗口组件,
40、第二种适用于Frame和Dialog等窗口组件。 6-15 Java的布局方式有什么特点?Java提供了哪些布局方式? 特点:Java采用布局管理器对图形用户界面中的组件进行相对定位并自动改变组件大小,合理分布组件格局。当窗口大小改变时,各组件自身的大小将随之改变,而组件之间的相对位置不变,这样组件一般不会被覆盖。Java提供了FlowLayout、BorderLayout、GridLayout三种布局布局管理器类。 6-16 复选框和单选按钮有什么不同?分别用于什么场合?在事件处理程序中,怎样知道哪个复选框或单选按钮是选中的? 在同一组单选按钮中,任何时候最多只能有一个被选择,一旦选中一个单
41、选按钮,则前一个选中的单选按钮会自动变为未选中状态。而复选框可多个同时被选中,且每个复选框选中与否的状态改变,并不影响其他复选框的状态。场合:单选按钮用来显示一组互斥的选择,复选框用来显示一组不互斥的选择。在事件处理程序中,用注册选择事件监听器的方法来判断复选框或单选按钮是否被选中。 6-17 如果一个编辑框用于输入数值,但程序运行时却输入了非数字字符,问结果会怎样?程序中有哪些办法解决这个问题,怎样解决? 结果会因输入错误而突然停止运行。程序中可以用trycatch捕获、处理异常的方法来解决这个问题。当遇到输入错误时,Java将抛出异常,此时弹出一个提示信息对话框,提醒用户输入数据有错误,请
42、用户重新输入。 6-18 如何将JComboBox编辑框中新输入的值,加入到下拉列表中去,并使新值与下拉列表中原有值不重复? 通过添加单击事件监听器将JcomboBox编辑框中新输入的值加入到下拉列表中。通过if语句来确保新值与下拉列表中原有值不重复。 6-19 如何使菜单项显现为分隔条状态?如何使菜单项显现单选状态? 实现JmenuItem和addSeparator方法使菜单项显现为分离条状态。实现JradioButtonMenuItem方法使菜单项显现单选状态。 6-20 一个菜单中能否加入菜单项?能否加入另一个菜单? 一个菜单中可以加入菜单项,可以加入另一个菜单。 6.21 窗口菜单与快捷菜单有什么差别? 窗口菜单是相对于窗口的,它出现在窗口的标题栏下,总是与窗口同时出现。而快捷菜单则是相对于某个指定组建的,当鼠标指向某个组件并单击右键时,则会弹出快捷菜单,一般比较简单。 6.22 在文本区中,单击右键时欲弹出一个菜单,该怎样设计? 可以在文本区添加一个快捷菜单(popMenu)。