Java语⾔程序的设计第三版_习题答案
第⼀章绪论
1.简述Java技术体系的组成。
Java技术体系主要由三部分组成:Java平台标准版Java SE,Java平台企业版Java EE,以及Java 平台微缩版Java ME。Java SE为Java桌⾯和⼯作组级应⽤的开发与运⾏提供了环境。它的实现主要包括Java SE Development Kit(JDK)和Java SE Runtime Environment(JRE)。Java SE提供了编写与运⾏Java Applet与Application的编译器、开发⼯具、运⾏环境与Java API。Java EE 定义了基于组件的多层企业级应⽤的开发标准,⾯向企业级和⾼端服务器的Internet应⽤开发。它基于Java SE,包括Enterprise JavaBeans(EJB),Java Servlets API以及Java Server Pages(JSP)等技术,并为企业级应⽤的开发提供了各种服务和⼯具。Java ME是针对消费类电⼦设备如移动、电视置顶盒、汽车导航系统等的嵌⼊式计算的⼀组技术和规。
2.Java的特征有哪些?简述这些特征的含义。
Java语⾔的特征包括:简单(Simple)、⾯向对象(Object oriented)、分布式(Distributed)、解释型(Interpreted)、健壮(Robust)、安全(Secure)、体系结构中⽴(Architecture neutral)、可移植(Portable)、⾼性能(High performance)、多线程(Multithreaded)和动态(Dynamic)
●简单性:Java语⾔语法和语义都⽐较单纯,容易学习和使⽤。另外,去掉C++中的指针,
取消多重继承和运算符重载,存管理由程序员移向Java嵌的⾃动存回收机制等
●⾯向对象:作为⼀种⾯向对象的编程语⾔,Java不仅最为“纯洁”,也对⾯向对象⽅法
学的⽀持也最为全⾯。Java的对象有模块化性质和信息隐藏能⼒,满⾜⾯向对象的封装要求,同时⽀持继承和多态。
●分布式:Java⽀持的分布式计算包括两种层次:⼀是数据分布,即应⽤系统所操作的
数据可以分散存储在不同的⽹络节点上,可以通过Java的URL类访问。⼆是操作分布,即应⽤系统的计算可通过嵌在WWW页⾯中的Applet(⼩应⽤程序),分布到不同的⽹络节点完成。
●半编译,半解释:采⽤编译器对程序进⾏编译,但编译得到的是⼀种中性的字节码,并
不是本机代码,⽽字节码的执⾏采取解释执⾏⽅式。该特征,提⾼了Java 的可移植性,并使得Java语⾔兼具编译执⾏的效率优势和解释执⾏的灵活性。
●健壮性:Java提供⾃动垃圾收集来进⾏存管理,防⽌程序员在管理存时容易产⽣的错
误。通过集成的⾯向对象的例外处理机制,帮助程序员正确地进⾏选择以防⽌系统的崩溃。另外,Java是⼀种强类型语⾔,程序编译时要经过严格的类型检查,防⽌程序运⾏时出现类型不匹配等问题。
●安全性:Java在语⾔和运⾏环境中引⼊了多级安全措施,其采⽤的主要安全机制有:
存分配及布局由Java 运⾏系统规定。运⾏系统执⾏基于数字签名技术的代码认证、字节码验证与代码访问权限控制的安全控制模型。
●体系结构中⽴:Java为了做到结构中⽴,除了上⾯提到的编译⽣成机器⽆关的字节码
外,还制定了完整统⼀的语⾔⽂本。为了使Java 的应⽤程序能不依赖于底层具体的系
统,Java 语⾔环境还提供了⼀个⽤于访问底层操作系统功能的可扩展类库,当程序使⽤这些库时,可以确保它能运⾏在⽀持Java 的各种平台上。
●可移植性:Java的最⼤特点是“⼀次编程,处处运⾏”。任何机器只要配备了Java解
释器,便可运⾏Java程序。这种可移植性源于两⽅⾯:⼀是Java的半编译、半解释特征;另⼀⽅⾯是Java体系结构中⽴,采⽤标准的独⽴于硬件平台的数据类型。
●⾼性能:Java语⾔的字节码与机器码⼗分接近,使得字节码到机器码的转换⼗分快捷。
另外,Java还提供了即时编译技术,提⾼了Java应⽤的运⾏速度。
●多线程:Java的特点是在语⾔级嵌⼊了多线程机制,⽀持程序的并发处理功能。从程
序的⾓度看,⼀个线程就是应⽤程序中的⼀个执⾏流。Java 将临界区保护规则等集成到语⾔中实现线程同步,使这些规则的使⽤更加⽅便有效。
●动态特性:Java程序的基本组成单元是类,⽽Java的类⼜是运⾏时动态装载的,这使
将Java可以动态地维护应⽤程序及其⽀持类之间的⼀致性。
3.Java语⾔的语法机制与C/C++有何异同?
Java的基本语法机制,例如:数据类型、表达式、程序流控制、结构化异常处理等,都与C++相同。明显区别于C++的语法机制,包括类(class)、接⼝(Interface)、程序包(package)、多线程以及取消指针。
4.Java运⾏系统由哪些部分组成?Java程序的运⾏过程是怎样的?
Java运⾏系统⼀般包括以下⼏部分:类装配器、字节码验证器、解释器、代码⽣成器和运⾏⽀持库。
Java运⾏系统运⾏的是字节码即.class⽂件。执⾏字节码的过程可分为三步:
(1)代码的装⼊
由类装配器装⼊程序运⾏时需要的所有代码,其中包括程序代码中调⽤到的所有类。
当装⼊了运⾏程序需要的所有类后,运⾏系统便可以确定整个可执⾏程序的存布局。
(2)代码的验证
由字节码检验器进⾏安全检查,以确保代码不违反Java的安全性规则,同时字节码验证器还可发现操作数栈溢出、⾮法数据类型转化等多种错误。
(3)代码的执⾏
Java字节码的运⾏可以有两种⽅式:即时编译(Just-In-Time)⽅式和解释执⾏⽅式。
5.什么是JVM?
Java虚拟机是⼀个想象中的,能运⾏Java字节码的操作平台。⽽JVM规提供了这个平台的严格的规说明,包括指令系统,字节码格式等。JVM进⼀步可⽤软件在不同的计算机系统上实现或⽤硬件实现。JV
M的实现包括字节码验证、解释器、存垃圾回收等,是上述Java 运⾏系统的核⼼,Java运⾏系统是各供应商对JVM的具体实现。
7.编写⼀个Java程序,在屏幕上输出“欢迎学习Java语⾔!”的字符串。
public class Welcome{
public static void main (String args[]){
System.out.println("欢迎学习Java语⾔!");
模块化设计的优点}
}
第⼆章⾯向对象程序设计基本概念
1.什么是对象?什么是类?什么是实体?它们之间的相互关系是怎样的?试举例说明。
在⾯向对象⽅法中,对象是现实世界实体或概念在计算机世界中的抽象表⽰,是具有唯⼀对象名、固定对外接⼝的⼀组变量/属性和⽅法的集合,是⽤来模拟组成或影响现实世界问题的⼀个或⼀组因素。
类定义了对象类型,包含同⼀类型的对象具有共同的特征与⾏为。使⽤class定义的类在程序中称为⼀种抽象数据类型,它是⾯向对象程序设计语⾔的基本概念。⼀个类在定义后,我们就可以象使⽤其它数据类型⼀样,声明该类的变量并创建该变量所指向的对象,然后通过该变量调⽤对象的⽅法实现对对象的操作。实体表⽰现实世界中,客观存在并可区分的事物或概念。
在⾯向对象的问题求解⽅法中,⾸先对现实世界的问题域进⾏语义抽象,从各类对象中抽象出对象类型,并得到对象类型之间的关联,形成问题的概念模型。接下来,进⾏概念模型到机器(程序)模型的转换得到机器世界的模型。机器模型是由计算机能够理解和处理的类构成的。将类实例化就得到了现实世界实体的⾯向对象的映射——对象,在程序中对对象进⾏操作,就可以模拟现实世界中的实体及实体之间相互作⽤,解决由这些实体构成的现实世界中的问题。
举例来说,我们很多⼈都有⾃⾏车,你的⾃⾏车就是“⾃⾏车”这类交通⼯具中的⼀个实例,即现实世界的⼀个实体。在机器世
界中即程序中的⾃⾏车类包含了⾃⾏车都有相同的状态,例如两个轮⼦、脚踏板速度等,以及共同的⾏为,如刹车等,将⾃⾏车类实例化就得到了现实世界的⾃⾏车实体的映射——⾃⾏车对象,在程序中对这个对象进⾏操作,就可以模拟现实世界中的⾃⾏车与其他实体之间相互作⽤。
2.什么是对象的状态与⾏为?设有对象“学⽣”,试给出这个对象的状态和⾏为。
现实世界的对象具有两个特征:状态与⾏为。⾯向对象程序设计语⾔中的对象是以现实世界的对象为模型构造的,也具有状态与⾏为,其中状态保存在⼀组变量中,⽽对象的⾏为通过⽅法实现。
“学⽣”的状态包括:学号、、年龄、所属院系、专业⽅向等;“学⽣”的⾏为包括:注册、选课、基本信息维护等。
3.什么是封装与数据隐藏?
使⽤对象的对外接⼝(⽅法)将对象的变量与⽅法实现保护起来,外界只能通过对象的接⼝访问对象的服务,⽽对对象其它成员都⽆法访问,就称为封装。因此,对象中的数据封装同时也实现了对象的数据隐藏。数据隐藏是通过对象成员的访问控制实现的。在Java语⾔中提供了四种不同层次的访问控制,即public,protected,default和private,从⽽实现了对象四种不同程度的数据隐藏。
4.什么是上溯造型?什么是晚联编?多态的含义是什么?
上溯造型的含义是⼦类沿着类继承体系向上,将其类型塑造为⽗类类型,使得⼦类对象能够当作⽗类对象处理。
程序中调⽤对象的⽅法时,所调⽤的代码直到运⾏时刻才确定。因此,在程序编译时,编译器可以保证该⽅法存在并且执⾏参数与返回结果的类型检查,但却不知道要执⾏的准确代码。在运⾏时刻,Java运
⾏系统根据对象变量当时所指向对象的实际类型,调⽤该对象的相应⽅法。这种技术称为晚联编。
⾯向对象的多态特征,简⽽⾔之就是“对外⼀个接⼝,部多种实现”。⾯向对象程序设计语⾔⽀持两种形式的多态:运⾏时多态和编译时多态。编译时多态主要是通过重载(Overloading)技术实现的,即在⼀个类中相同的⽅法名可⽤来定义多种不同的⽅法。运⾏时多态是在⾯向对象的继承性的基础上建⽴的,是运⾏时动态产⽣的多态性,是⾯向对象的重要特性之⼀。
5.怎样理解⾯向对象程序设计⽅法的涵?
⾯向对象程序设计⽅法的涵,可以由对象、数据抽象、封装、继承和多态等核⼼概念和特征表达:程序中所有东西都是对象;程序是⼀系列对象的组合;每个对象都有⾃⼰的存储空间,可以容纳其它对象;每个对象都有⼀种类型,即都归属于⼀个类,类最主要的特征是对外接⼝;同⼀类型的所有对象都能够接收相同的消息,⼦类与⽗类具有“同⼀类型”,这就是⾯向对象程序语⾔中的多态性。
6.⾯向对象程序设计有哪些优点?
⾯向对象程序设计⽅法的主要优势是具有更好的可重⽤性、可扩展性、可管理与维护性。在⾯向对象程序设计中,可重⽤的代码是类和对象。数据抽象、封装、继承、多态等特征都围绕和体现了代码重⽤的思想。⾯向对象的封装、继承和多态使得程序可以对⼀个类的部变量和⽅法进⾏修改或增加新的变量和
⽅法,可以按照需要派⽣新的⼦类,但仍可以保证调⽤这些类接⼝的程序不做改动,从⽽使程序具有很强的可扩展性与易维护性。⽽⾯向对象的数据抽象与封装,使程序具有模块化特性,这简化了程序中代码之间的关联,使程序更易于管理和控制。
第三章 Java语⾔基础
1.下列标识符哪些是合法的?
$88,#67,num,applet,Applet,7#T,b++,--b
合法的标识符:$88,num,applet,Applet
2.Java有哪些基本数据类型?什么是复合数据类型?对于这两种类型的变量,系统的处理有什么不同?
Java基本数据类型包括:boolean,char,byte,short,int,long,double和float 复合数据类型:⼀般将⽤户定义的新类型称为复合数据类型。Java以类和接⼝的形式定义新类型。因此在Java中类和接⼝是两种⽤户定义的复合数据类型。
对于这两种类型的变量,系统的处理⽅式:基本数据类型的变量包含了单个值,这个值的长度和格式符
合变量所属数据类型的要求,基本类型变量声明时,系统直接给该变量分配空间,因此程序中可以直接操作。引⽤型变量的值是指向存空间的引⽤(地址),声明时只是给该变量分配引⽤空间,数据空间未分配。引⽤型变量在声明后必须通过实例化开辟数据空间,才能对变量所指向的对象进⾏访问。
3.设变量i和j的定义如下,试分别计算下列表达式的值。
inti=1;double d=1.0
(1)35/4; (2)46%9+4*4-2; (3)45+43%5*(23*3%2); (4)45+45*50%i--;
(5)45+45*50%(--i); (6)1.5*3+(++d); (7)1.5*3+d++;(8)i+=3/i+3;
(1)8;(2)15;(3)48;(4)45;(5)除0异常;(6)6.5;(7)5.5;(8)7
4.计算下列逻辑运算表达式的值:
(1) (true) && (3 > 4)
(2) !(x> 0) && (x > 0)
(3) (x > 0) || (x < 0)
(4) (x != 0) || (x == 0)
(5) (x >= 0) || (x < 0)
(6) (x != 1) == !(x == 1)
(1)false
(2)false
(3)如果x=0,为false; 如果x!=0, 为true
(4)true
(5)true
(6)true
5.Java中有哪些类型程序流控制语句?
Java语⾔提供了4类程序流控制语句:
●循环语句,包括while语句、do while 语句和for语句。
●分⽀语句,包括if语句和switch语句。
●跳转语句,包括break语句, continue语句, label:语句, return语句.
●异常处理语句,包括try-catch-finally语句和throw语句。
6.switch语句与if语句可以相互转换吗?使⽤switch语句的优点是什么?
switch语句可以转换为if语句,但if语句不⼀定能转换为switch语句。因为switch 以⼀个整型表达式的值作为判定条件,⽽if可以判断各种条件。
使⽤switch结构更简单,可读性强,⽽且程序的执⾏效率也得到提⾼。
7.试写出下列循环的运⾏结果。
Int i = 1;
while(i<10){
if ((i++)%2 ==0){
System.out.println(i);
}
}
3
5
7
9
8.While循环和do循环有什么区别?
while语句运⾏时,先计算逻辑表达式的值,当值为“true”时,执⾏循环体语句。do while 语句⾸先执⾏循环体中的语句,然后再求表达式的值,如果为“true”则继续循环;如果为“false”, 则终⽌循环。因此, dowhile循环⾄少要执⾏⼀次循环体。
9.循环跳转语句break的作⽤是什么?试给出下列程序的运⾏结果。
inti = 1000;
while(true){
if(i<10){
break;
}
i = i-10;
}
System.out.println("The value of i is "+i);
break语句⽤来从switch语句、循环语句中跳出。它结束了switch语句的执⾏,并把控制流转移到紧跟在switch之后的语句。我们还可以使⽤不带标签的break语句终⽌循环。带标签的break语句结束由标签指定的外层语句的执⾏。
上述程序的运⾏结果是:The value of i is 0
10.循环跳转语句continue的作⽤是什么?试给出下列程序的运⾏结果。
inti = 1000;
while(true){
if(i<10){
continue;
}
i = i-10;
}
在for、while和do while循环中,continue语句跳过当前循环的其余语句,执⾏下⼀次循环。不带标签的continue语句跳过最层的循环,并开始执⾏最层循环的下⼀次循环。
上述程序当i的值为0以后,将进⼊死循环。
13.下列数组声明哪些是合法的?
(1)inti = new int(30);
(2)double d[] = new double[30];
(3)Integer[] r = new Integer(1..30);
(4)inti[] = (3, 4, 3, 2);
(5)float f[] = {2.3, 4.5, 5.6};
(6)char[] c = new char();
(7)Integer[][] r = new Integer[2];
合法声明语句:(2)
14.数组变量是基本类型变量还是引⽤型变量?数组的存是在什么时候分配的?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论