java程序设计实用教程第版课后答案.docx
《java程序设计实用教程第版课后答案.docx》由会员分享,可在线阅读,更多相关《java程序设计实用教程第版课后答案.docx(37页珍藏版)》请在冰豆网上搜索。
java程序设计实用教程第版课后答案
第一章
1.Java具有那些适合在Internet环境中的特点
【答】简单性和完全面向对象,平台无关性,安全性和可靠性,多线程,高效的网络编程。
2.Java保留、放弃了C/C++语言中哪些语法和面向对象机制为什么需要这样做
【答】在语法规则方面,Java语言放弃了全程变量、goto语句、宏定义、全局函数以及结构、联合和指针数据类型,使Java语言更简单、更精练。
在面向对象概念方面,Java语言放弃了多元继承、友元类和运算符重载,采用“单重继承+接口”的方式代替多重继承,提供语言级的内存自动管理和异常处理方式,使Java语言更健壮、更安全、更高效。
3.Java对原程序文件的命名规则有什么要求源程序文件编译后生成什么文件
【答】要求:
源程序文件与类同名,文件扩展名为.java;编译后生成字节码文件(*.class)。
4.Java程序的运行机制是怎样的与C++或其他语言有什么不同
【答】Java的每一个类都有一个class文件和它对应,Java在程序的启动的时候将程序运行需要用到的类加载到虚拟机中,根据Java的虚拟机规范进行连接(动态连接),程序的组装是在运行的时候完成的
C++和其他的编译型的语言一样,它的程序的组装方式是一种传统的组装方式。
C++在编译的时候生成适用于某一平台的二进制代码,在连接的时候找到需要调用的库,然后将这些库中的代码连接进可执行程序之中,生成的可执行程序运行速度非常的快,但是可执行代码已经变成了一个整体,不可能再分开
5.什么是平台无关性Java是怎样实现平台无关性的
【答】平台无关性即Java程序的运行不依赖于操作系统。
Java采用虚拟机技术实现平台无关性。
程序由虚拟机解释执行,不同的操作系统上运行不同版本的Java虚拟机。
6.Java应用程序由哪两种形式他们的运行方式有什么不同
【答】Application和applet两种形式,其中application是能够独立运行的应用程序,既可以以DOS的命令方式运行,也可以以图形用户界面方式运行。
Applet是可以嵌入页面的最小应用程序,不能独立运行,必须嵌入超文本中,由浏览器显示运行。
7.什么是解释执行Java怎样解释执行两种应用程序
【答】解释执行即将字节码解释成本地机器码并执行。
Java源程序文件经编译后生成字节码文件,若是application应用程序,则将字节码文件交由Java解释器解释执行,最后在windows操作系统上运行。
若是applet应用程序,则将字节码文件嵌入超文本文件并下载到web浏览器上,最后由windows操作系统中的Java虚拟机运行。
8.作为一个软件开发人员,应该具备那些基础知识用以开发windows应用程序
【答】略
第2章
1.标示符和关键字在定义和使用方面有何区别
【答】定义方面:
标示符是用户定义的、以字母开头的字母数字序列,关键字是由Java语言定义的、具有特定含义的英文单词。
使用方面:
标示符用于命名变量、常量、类、对象等元素,每一个关键字都有特定的含义,不能被赋予别的含义。
2.Java语言的基本数据类型有哪些引用数据类型有哪些
【答】基本数据类型有:
整数类型byte、short、int、long,浮点数类型float、double,字符类型char,布尔类型boolean;引用数据类型包括数组(array)、类(class)和接口(interface)
3.试分析基本数据类型与引用数据类型的主要特点,并说明使用这两种变量有哪些差别【答】基本数据类型的变量保存数据值,而引用数据类型的变量保存地址。
4.算术运算、关系运算、逻辑运算和位运算各有哪些运算符
【答】算术运算:
单目运算符有+(正)、—(负)、++(自增)、——(自减),双目运算符有+(加)、—(减)、*(乘)、/(除)、%(取余)
关系运算:
=(等于)、!
=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)都是双目运算
逻辑运算:
&(与)、|(或)、!
(非)、^(异或)、&&(条件与)、||(条件或),其中!
是单目运算,其它都是双目运算
位运算:
~(非)、&(与)、|(或)、^(异或)、<<(左移位)、>>(右移位)、>>>(无符号移位)
5.程序中为什么需要常量和变量声明常量或变量时,为什么必须给出其所属的数据类型
【答】在程序中使用的数据大多需要经常变化,用常量值表示显然不够,因此每一种算法语言都提供常量和变量来存储数据。
为了确定常量或变量的数据性质、取值范围、以及它们占用的内存单元的字节数和它们参加的合法运算和操作。
6.什么是变量的作用域,声明变量时,如何确定变量的作用域
【答】变量的作用域是指其作用范围。
变量声明的位置决定了它的作用域
7.设i是一个整数类型变量,写出下列问题对应的表达式
(1)判断i为奇数或偶数;
【答】i%2==0ength;j++)ength;j++)ength;j++)员变量
this.成员方法([参数列表])注意:
Java中的this是引用方式,不是C++中的指针方式。
(3)this引用还可以用在重载的构造方法中,调用本类已定义好的构造方法。
语法格式如下:
this([参数列表])注意:
在构造方法中,this()引用必须是第一行语句。
3-9说明类成员与实例成员的区别。
【答】Java的类中可以包括两种成员:
实例成员和类成员。
实例成员是属于对象的,实例成员包括实例成员变量和实例成员方法。
类成员是属于类的,需要用关键字static标识,也称为静态成员。
具体区别如下:
1.实例成员变量与类成员变量
(1)两者声明时的差别。
当一个类声明成员变量时,没有使用关键字static声明的为实例成员变量,使用关键字static声明的为类成员变量。
(2)两者存储结构的差别。
当创建一个对象时,系统会为每一个对象的每一个实例成员变量分配一个存储单元,使得属于不同对象的实例成员变量有不同的值;而为每一个类成员变量只分配一个存储单元,使得所有对象公用一个类成员变量。
(3)两者引用方式的差别。
实例成员变量属于对象,必须通过对象访问;类成员变量属于类,既可以通过对象,也可以通过类访问。
2.实例成员方法与类成员方法
(1)两者声明时的差别。
当一个类声明成员方法时,没有使用关键字static声明的为实例成员方法,使用关键字static声明的为类成员方法。
(2)两者方法体中语句的差别。
类成员方法只能访问类成员变量;实例成员方法既可以访问类成员变量,也可以访问实例成员变量。
在实例成员方法体中,可以使用this引用指代当前对象;而在类成员方法体中,则不能使用this引用。
(3)两者引用方式的差别。
实例成员方法必须通过对象访问;类成员方法既可以通过对象,也可以通过类访问。
3-10什么是继承继承机制的作用是什么子类继承了父类中的什么子类不需要父类中的成员时怎么办能够删除它们吗Java允许一个类有多个父类吗
【答】继承性是面向对象的核心特征之一,是一种由已有的类创建新类的机制。
被继承的类称为父类或超类,通过继承产生的新类称为子类或派生类。
继承机制是面向对象程序设计中实现软件可重用性的最重要手段。
通过继承,子类自动拥有父类的所有成员,包括成员变量和成员方法(不包括构造方法)。
子类可以更改父类成员,还可以增加自己的成员,但是,不能删除父类的成员。
在Java中以“单重继承+接口”的方式代替多重继承,不允许一个类有多个父类。
3-11子类能够访问父类中什么样权限的成员
【答】虽然子类继承了父类的成员变量和成员方法,但并不是对所有的成员都有访问权限。
访问权限说明如下:
(1)子类对父类的私有成员(private)没有访问权限。
(2)子类对父类的公有成员(public)和保护成员(protected)具有访问权限。
(3)子类对父类中缺省权限成员访问权限分为两种情况,对同一包中父类的缺省权限成员具有访问权限,而对不同包中父类的缺省权限成员没有访问权限。
3-12如果子类声明的成员与父类成员同名会怎么样
【答】如果子类重定义父类的同名成员变量,则子类隐藏了父类成员变量。
如果子类重定义父类的同名成员方法,当子类方法的参数列表与父类方法的参数列表完全相同时,则称子类成员方法覆盖了成员方法。
如果子类重定义父类的同名成员方法,当子类方法的参数列表与父类方法的参数列表不同时,子类继承了父类的成员方法,并重载了继承来的该成员方法。
3-13super引用有什么作用super引用有几种使用方法
【答】当子类重定义了父类成员时,则存在同名成员问题。
此时,在子类方法体中,成员均默认为子类成员。
如果需要引用父类同名成员,则需要使用supper引用。
在以下两种同名成员情况下,需要使用supper引用。
(1)子类隐藏父类成员时,如需要访问父类同名成员变量时,需要使用supper指代父类的同名成员变量。
语法如下:
super.成员变量
(2)子类覆盖父类成员时,如需要访问父类同名成员方法时,需要使用supper指代父类的同名成员方法。
语法如下:
super.成员方法([参数列表])
注意:
super引用不能像this引用一样单独使用。
3-14什么是多态性什么是方法的重载方法的重载和覆盖有何区别
【答】在面向对象语言中,多态是指一个方法可以有多种实现版本,类的多态性表现为方法的多态性。
重载是指同一个类中的多个方法可以同名但参数列表必须不同。
重载表现为同一个类中方法的多态性。
覆盖是指子类重定义了父类中的同名方法。
覆盖表现为父类与子类之间方法的多态性。
3-15什么是运行时多态方法的重载和覆盖分别是什么时的多态性
【答】如果在编译时不能确定、只有在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态。
方法的重载都是编译时多态。
方法的覆盖变现出两种多态性,当对象获得本类的实例时,为编译时多态,否则为运行时多态。
3-16什么是抽象类在什么情况下需要设计抽象类抽象类中是否必须有抽象方法
【答】使用关键字abstract声明的类称为抽象类,使用abstract声明的成员方法为抽象方法。
抽象类中可以不包含抽象方法,但包含抽象方法的类必须被声明为抽象类。
3-17什么是最终类在什么情况下需要设计最终类最终类中是否必须有最终方法
【答】使用关键字final声明的类称为最终类,最终类不能被继承。
使用final声明的成员方法称为最终方法,最终方法不能被子类覆盖。
最终类中包含的都是最终方法,非最终类也可以包含最终方法。
3-18将辗转相除法求两个整数的最大公因数gcd(a,b)用递归方法实现,辗转相除法题意见例,再设计下列方法:
(1)求两个整数a﹑b的最小公倍数;
(2)求三个整数a﹑b﹑c的最大公约数。
〖解答〗程序如下。
publicclassGCD_recursion
{
publicstaticintgcd(inta,intb)者都包含抽象方法,约定多个类共用方法的参数列表和返回值。
2.两者都不能被实例化。
3.两者都是引用数据类型,其变量可被赋值为子类或实现接口类的对象。
不同点:
1.抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之间共同使用的方法。
2.抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多重继承的功能。
3.抽象类及其类中成员具有与普通类一样的访问权限;接口的访问权限由public和缺省两种,接口中成员的访问权限均是public。
4.抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法必须全部是抽象方法,不能声明构造方法。
5.抽象类中可以声明成员变量,子类可以对该成员变量赋值;接口中只能声明常量。
4-2为什么能够声明接口变量接口变量能够获得什么样的值
【答】接口是引用数据类型可以声明接口变量。
接口变量能够获得实现接口的类的对象,也称为接口对象。
4-3接口有哪些特点为什么需要声明借口接口是否具有继承性接口中能否写构造方法
【答】接口特点:
(1)接口及接口中成员的访问权限都是public
(2)接口中的成员方法都是公有的、抽象的实例成员方法,即默认修饰符为publicabstract。
(3)接口中的所有抽象方法必须全部被实现接口的类覆盖。
(4)接口中的成员变量都是常量
(5)接口不能被实例化。
接口中的方法都是抽象的,构造方法不是抽象的所有不能写构造方法
(6)接口是引用数据类型。
Java只支持单重继承,以“单重继承+接口”的方式代替多继承。
接口可以继承一个已经存在的父接口。
4-4什么是单重继承什么是多重继承类的层次体系为什么需要多重继承单重继承有什么缺点既然有缺点,为什么Java仍然采用单重继承Java怎样实现多重继承
【答】单重继承就是一个类只能有一个父类。
多继承就是可以有多个父类。
现实中的对象往往表现出多种特性,用单重继承无法客观描绘,因此需要多重继承。
但是C++的多重继承过于复杂,因此Java用“单重继承+接口”代替了多重继承,以提高运行效率,增加安全性,降低复杂性。
4-5类与类之间存在哪几种关系
【答】类与类之间有继承关系,还存在嵌套关系。
4-6在什么情况下需要声明内部类内部类有哪些特性
【答】Java不支持C++的结构(struct)类型,当实际中需要使用一个结构时,可以声明一个类;但当结构作为数组的元素类型时,或当一个类中需要使用结构时,可以将结构声明为内部类。
内部类特性可参看课本P123。
4-7为什么是包为什么需要包机制Java有哪些包各有什么功能
【答】从逻辑概念看,包是类的集合,一个包中包含多个类;从存储概念看,包是类的组织方式,一个包对应一个文件夹,一个文件夹中包含多个字节码文件;包与类的关系,就像文件夹与文件的关系一样。
为解决字节码文件存放和类命名的问题,Java提供了包机制。
Java的常用包及其作用可查看P130表4-1。
4-8Java的API采用什么组织方式怎样使用Java定义好的类
【答】Java语言的API按照功能划分成若干包,每个包都有许多公有的类和接口。
如果需要使用已定义好的一个包中的类或接口,可以使用import语句声明。
4-9Java声明Object类的作用是什么Object类中声明了哪些方法Object类在Java类层次体系中的地位是怎样的
【答】Object是Java中所有类的父类或祖先类,它定义了一个Java对象所需要的基本操作和属性。
定义的方法有:
()获得当前对象所在的类是什么、equals()比较两个对象是否相等、toString()将当前对象的信息用字符串描述、finalize()析构方法。
4-10Java为什么需要声明基本数据类型的包装类基本数据类型的包装类有哪些
【答】为实现完全面向对象的特性,Java为每个基本数据类型都声明有对应的一个类。
公有8个基本数据类型的包装类:
Byte、Short、Integer、Long、Float、Double、Character、Boolean
4-11怎样将数值类型的数据转换成字符串怎样将字符串转换成数值类型的数据
【答】Integer类的静态方法parseInt()和实例方法intValue()都可以将一个字符串转换成int值。
Integer类的静态方法toBinaryString(inti)、toOctalString(inti)、(inti)可以将十进制i转化为二进制、八进制、十六进制、字符串。
4-12Java为什么要将Math类声明为最终类Math类中有哪些常用方法
【答】Math类提供提供E、PI常量和一组固定数学函数。
都是静态可以直接通过类名引用,不需要继承。
常用方法有:
(1)求绝对值abs(doublea)
(2)求最大值max(doublea,doubleb)(3)求最小值min(doublea,doubleb)(3)返回一个~之间的随机数random()
4-13对数值﹑变量或对象进行比较操作,到底应该采用6个关系运算符还是调用equals()、compareTo()方法是否每个对象都可以调用equals()和compareTo()方法为什么这两个方法在进行比较操作时有什么差别它们在每个类中的含义都相同吗
【答】对数值、变量可以采用6个关系运算符,对象可以用后两者,但是并不是每个对象都可以调用这两个方法。
具体用法及区别请看课本P133和P136.
4-14System类、Class类和Runtime类各有哪些功能在之前的程序中已用到这些类的哪些常量或方法
【答】System类提供访问系统资源和标准输入/输出流的方法,之前用到了in和out常量。
Class为类提供运行时信息,如名字、类型、以及父类等。
Runtime类可直接访问运行时资源。
4-15怎样表示日期与时间数据怎样引用包的类
【答】Java以一个长整型表示一个日期,该长整型表示从格林尼治时间1970-1-100:
00:
00开始至某时刻的累积毫秒数。
4-16泛型类有什么作用在什么情况下需要使用泛型类
【答】泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口、和方法的创建中,分别被称为泛型类、泛型接口、泛型方法。
泛型类引入的好处不仅在于减少代码量,还在于提供了编译时期数据类型的检查功能,可以提前预知错误的发生,减少代码安全性,二是减少了强制转换类型。
第5章异常处理
5-1程序中的错误有哪几种分别能够在什么时刻被发现
【答】程序错误按照性质可分为3类:
语法错、语义错、逻辑错。
1语法错:
违反语法规范的错误成为语法错(syntaxerror),这类错误通常在编译时发现,又称为编译错,如标识符未声明、表达式中运算符与操作数类型不兼容、变量赋值时的类型与声明时的类型不匹配、括号不匹配、语句末缺少分号等。
2语义错:
如果在程序的语法上正确,但在语义上存在错误,则称为语义错(semanticerror),又称为运行错(run-timeerror),语义错不能被编译系统发现,只有到程序运行时才能被发现,如输入数据格式错、除数为0错、给变量赋予超出其范围的值错等。
3逻辑错:
如果程序通过编译,可运行,但运行结果与期望值不符,则这类错误称为逻辑错(logicerror),例如,由于循环条件不正确而没有结果,循环次数不对等因素导致计算结果不正确等。
5-2Java为什么要采用异常处理机制Java的异常处理是怎样实现的异常处理机制能够解决程序中遇到的所有错误吗哪些错误不是异常处理能够解决的
【答】异常处理和捕获和处理运行时错误的一种机制。
异常处理机制使程序具有处理错误的能力。
即使发生了运行错,应用程序能够捕获异常并及时处理异常,使程序从运行错误中很好地恢复并继续运行,而不会导致程序运行非正常终止。
而且如果当前方法没有能力处理异常,还可以将异常转交给调用者处理。
异常处理机制将运行时错误封装成若干错误类和异常类,并提供异常处理语句用于处理在程序中实现对运行时错误的发现和及时处理。
异常处理机制并不能解决程序中的所有错误,例如内存溢出、栈溢出等。
5-3请说出5个Java的异常类。
【答】算术异常ArithmeticException、空对象异常NullPointerException、类型强制转换异常ClassCastException、负数组长度异常NegativeArraySizeException、数组下标越界异常ArrayIndexOutOfBundsException等
5-4请问运行没有main()方法的类会怎样
【答】此类错误是Error类,当运行没有main()方法的类时,则产生类定义未找到的错误(NoClassDefFoundError)。
5-5举例说明你在调试程序时,遇到过哪些错误和异常,采取什么办法解决问题的。
【答】1.无效的游标状态
修改:
首先查看ResultSet是否为空,若为空则修改之;其次,也是我遇到的,就是:
举个例子说明,如下
(1);
(3);ET中的DataReader类后才恍然大悟,原来,ResultSet的游标每向后移动,前面的数据就会被丢弃掉,这样做有利于提高访问速度。
2.ResultSetisclosed
原因:
一个Statement只能维持一个ResultSet为打开状态,后面的覆盖前面的,举个例子:
ResultSetrs1=();
ResultSetrs2=();
Strings=
(1);连接占线导致另一个hstmt
原因:
一个Connection只能维持一个Statement为打开状态
一个例子:
Statementstmt1=();
Statementstmt2=();
(sql);初始化的变量(虽然已经声明)
2.使用了未初始化的对象(虽然已经声明)
注:
引起这个异常的根本原因有可能隐藏的很深,空指针异常只不过是个表象而已(又被不幸的我遇到了).
5-6如何处理除数为0异常
【答】进行除数运算时,先判断除数是否为0,若为0,则跳出提示。
5-7怎样处理数组下标异常
【答】使用数组前先,判断下标是否小于数值长度,若不小于则提示数组下标有误。
5-8说明采用什么语句能够捕获并处理异常
【答】Java提供try-catch-finally语句来捕获和处理一个或多个异常。
其中,try、catch、finally是关键字。
catch字句可以有一个或多个,但至少要有一个catch字句,finally字句可以省略。
5-9为什么将字符串转换成数值类型时会抛出异常抛出什么异常
【答】并不是所有的字符串都能转换成数值型,当遇到一个不能转转换成数值型的字符串时,Java抛出NumberFormatException异常。
5-10说明throw语句与throws子句的区别。
【答】用于抛出方法层次的异常,并且直接由些方法调用异常处理类来处理该异常,所以它常用在方法的后面。
比如publicstaticvoidmain(String[]args)throwsSQLException
用于抛出代码层次的异常,常用于方法块里面的代码,常和try...catch....语句块搭配实用,比throws的层次要低。
5-11什么情况下需要自定义异常类
【答】当Java提供的异常类不能满足需要时,程序需要对自己抛出的异常类进行特殊处理,则可以自定义异常类。
第6章图形用户界面
6-1什么是组件组件类与普通类有什么不同
【答】组件是构成图形用户界面的基本成分和核心元素;组件是具有以下特性的对象:
运行时可见,能拥有并管理其他组件,在窗口中可操纵,可获得输入焦点等。
组件类Component是一个抽象类,是AWT组件类层次结构的根类,它提供对组件操作的通用方法。
6-2设计Windows应用程序的图形用户界面需要哪些基本知识
【答】需要掌握Java组件的使用方法,理解委托事件处理模型,掌握多种布局方式。
6-3什么是容器组件它有什么特点Java提供了哪些容器组件
【答】容器组件是一种能够容纳其他组件的特殊组件。
特点:
能容纳其他组件,并在其可视区域内显示这些组件。
Java提供了窗口(window)和面板(panel)两种容器。
6-4窗口与对话框有什么不同框架与面板有什么不同
【答】对话框是窗口类的子类,对话框也是一种可移动的窗口,不能作为应用程序的主窗口,它依赖于一个框架窗口而存在,当框架窗口关闭时,对话框也关闭。
框架类是一种带标题栏并且可以改变大小的窗口;它