java语言程序设计教程第二版习题解答.docx

上传人:b****6 文档编号:4061187 上传时间:2022-11-27 格式:DOCX 页数:35 大小:30.20KB
下载 相关 举报
java语言程序设计教程第二版习题解答.docx_第1页
第1页 / 共35页
java语言程序设计教程第二版习题解答.docx_第2页
第2页 / 共35页
java语言程序设计教程第二版习题解答.docx_第3页
第3页 / 共35页
java语言程序设计教程第二版习题解答.docx_第4页
第4页 / 共35页
java语言程序设计教程第二版习题解答.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

java语言程序设计教程第二版习题解答.docx

《java语言程序设计教程第二版习题解答.docx》由会员分享,可在线阅读,更多相关《java语言程序设计教程第二版习题解答.docx(35页珍藏版)》请在冰豆网上搜索。

java语言程序设计教程第二版习题解答.docx

java语言程序设计教程第二版习题解答

习题一

简述面向对象软件开发方法的重要意义。

【答】:

面向对象的软件开发方法按问题论域来设计模块,以对象代表问题解的中心环节,力求符合人们日常的思维习惯,采用“对象+消息”的程序设计模式,降低或分解问题的难度和复杂性,从而以较小的代价和较高的收益获得较满意的效果,满足软件工程发展需要。

2.解释下面几个概念:

1)对象2)实例3)类4)消息5)封装6)继承7)多态

【答】:

1)对象:

就是现实世界中某个具体的物理实体在计算机中的映射和体现,是由属性和操作所构成的一个封闭整体。

2)实例:

是对象在计算机内存中的映像。

3)类:

是描述对象的“基本原型”,是描述性的类别或模板,即对一组对象的抽象。

它定义一组对象所能拥有的共同特征,用以说明该组对象的能力与性质。

4)消息:

消息是对象之间进行通信的一种数据结构。

5)封装:

封装性是保证软件部件具有优良的模块性的基础。

面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。

6)继承:

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。

7)多态:

多态性是指一个名字具有多种语义,即指同一消息为不同对象所接受时,可以导致不同的操作。

对象“汽车”与对象“小汽车”是什么关系,对象“汽车”与“轮胎”又是什么关系?

【答】:

对象“汽车”与对象“小汽车”具有继承关系,即对象“小汽车”继承了对象“汽车”。

“轮胎”是对象“汽车”的一个属性,所以对象“汽车”包含“轮胎”,二者是包含关系。

简述Java语言的主要特点。

【答】:

Java语言的主要特点:

(1)简单性

(2)面向对象(3)分布式(4)健壮性(5)结构中立(6)安全性(7)可移植(8)解释的(9)高性能(10)多线程(11)动态性

5.简述Java语言与C/C++语言的主要差异。

【答】:

Java基于C++,与之有许多相似之处,但其设计更易于使用,它们之间主要差异有:

 

(1)Java中无C/C++中最复杂并有潜在危险的指针

(2)Java无C/C++中的#include、#define和头文件。

 (3)Java无C/C++中的structure,union及typedef。

 (4)Java无C/C++中的函数、指针和多重继承。

 (5)Java无C/C++中的goto指令。

 (6)Java无C/C++中的操作符重载(OperatiorOverloading)、自动类型的转换。

 (7)Java系统要求对对象进行相容性检查,以防止不安全的类型转换。

(8)Java语言最强大的特性之一是它的平台独立性,Java可以处理好平台之间的移植问题。

 (9)Java语言中没有全局变量的定义,只能通过公用的静态的变量实现,从而减少了引起错误的地方。

6.什么叫Java虚拟机?

什么叫Java的字节码?

【答】:

Java虚拟机是一个软件系统,它可以翻译并运行Java字节码。

它是Java的核心,保证了在任何异构的环境下都可运行Java程序,解决了Java的跨平台的问题。

Java的字节码(byte‐code)是与平台无关的是虚拟机的机器指令

7.简述Java程序的运行过程。

【答】:

首先编写Java源代码程序,通过Java虚拟机编译成.class的字节码程序。

然后通过然后再执行翻译所生成的字节代码,属于先解释后执行方式。

在运行时,字节码载入器用于调入包含、继承所用到的所有类,确定内存分配,变成真正可执行的机器码。

由,再通过字节码校验器就是用于检验字节码是否正确,如果通过校验,再由系统执行平台解释执行。

8.Java程序分哪两类?

各有什么特点?

【答】:

Java程序根据程序结构的组成和运行环境的不同可以分为两类:

JavaApplication(Java独立应用程序)和JavaApplet(Java小应用程序)。

Java独立应用程序是一个完整的程序,需要独立的Java解释器来解释执行;而Java小应用程序则是嵌在Web页面中的非独立应用程序,由Web浏览器内部所包含的Java解释器来解释执行,为Web页面增加交互性和动态性。

习题二

Java语言对标识符命名有何规定,下面这些标识符哪些是合法的,哪些是不合法的。

1)Myname2)JavaLanguage3)2Person4)_is_Has5)$12345。

【答】:

合法的标识符有:

Myname、JavaLanguage、_is_Has

非法的标识符有:

2Person、$12345

2.Java有哪些基本数据类型,与C/C++相比有何特点?

复合数据类型是哪几种?

【答】:

基本数据类型有:

整型数据类型(字节整型、短整型、整型、长整型),实数数据类型(单精度实数、双精度实数),字符数据类型和布尔数据类型。

与C/C++相比,Java的数据类型与C++相似,但有两点不同:

①在Java语言中所有的数据类型是确定的,与平台无关,所以在Java中无sizeof操作符;②Java中每种数据类型都对应一个默认值。

这两点体现了Java语言的跨平台性和完全稳定性。

Java的复合类型是由用户根据需要自己定义并实现其运算的数据类型,主要有类类型、接口和数组等。

Java的字符类型采用何种编码方案?

有何特点?

【答】:

Java的字符类型采用16位Unicode(全球文字共享编码)方式,用16位来表示东西方字符。

由于采用Unicode编码方案,使得Java在处理多语种的能力方面得到大大提高,从而为Java程序在基于不同语种之间实现平滑移植铺平了道路。

Java有哪些运算符和表达式?

请写出下面这些表达式的运算结果(设a=2,b=–3,f=true)。

1)––a%b++2)(a>=1)&&a<=12?

a:

b)3)f^(a>b)4)(––a)<

【答】:

Java的运算符主要由算术运算符、关系运算符、条件运算符、位运算符、逻辑运算符以及赋值运算符。

表达式由运算符、操作数和方法调用,按照语言的语法规则构造而成的符号序列。

表达式的结构是:

1)––a%b++的结果是:

1

2)(a>=1)&&a<=12?

a:

b)的结果是:

1

3)f^(a>b)的结果是:

false

4)(––a)<

0

5.Java中标准输入输出使用哪种系统类、使用哪个对象和方法?

【答】:

通过系统类java.lang.System达到访问标准输入输出的功能。

System类管理标准输入输出流和错误流,有以下三个对象:

1)System.out:

把输出送到默认的显示(通常是显示器)。

常使用输出的方法有print()、

println()等。

2)System.in:

从标准输入获取输入(通常是键盘)。

常实现输入处理的方法有read()、skip()等;

3)System.err:

把错误信息送到默认的显示。

常见方法有print()、println()、write()等。

6.阅读下列程序,写出运行结果。

(1).

publicclassExample0401{

publicstaticvoidmain(String[]args){

for(intx=0;x<10;x++){

inty=x*x+x+41';

System.out.println("\t"+x+"\t"+y);

}

}

}

(2).菲波拉契数列:

publicclassExample02{

publicstaticvoidmain(String[]args){

System.out.print(0)

intfib0=0;

intfib1=1;

intfib2=fib0+fib1

while(fib2<100){

fib0=fib1;

fib1=fib2;

fib2=fib1+fib0;

System.out.print(","+fib1);

}

}

}

(3).产生0~20的随机整型,然后计算并打印它的结果:

importjava.util.Random;

publicclassExample03{

publicstaticvoidmain(String[]args){

Randomrandom=newRandom();

floatx=random.nextFloat();

intn=Math.round(21*x);

longf=1;

intk=1;

do

f*=k++;

while(k<=n);

System.out.println(n+"!

="+f);

}

}

(4).三重循环:

publicclassExample05{

publicstaticvoidmain(String[]args){

for(inti=0;i<3;i++){

resume:

for(intj=0;j<3;j++){

for(intk=0;k<3;k++){

System.out.println("\n"+i+""+j+'"+k);

if(i==1&&k==0)breakresume;

}

System.out.println("\tEndofkloop;j="+j);

}

System.out.println("\tEndofjloop;i="+i);

}

System.out.println("\tEndofiloop.")

}

}

【答】:

(1)的运行结果如下:

041

143

247

353

461

571

683

797

8113

9131

(2)的运行结果如下:

0,1,2,3,5,8,13,21,34,55,89

(3)的运行结果如下:

运行结果取决于随机数。

求随机数的阶乘,其中的一个运行结果如下:

3!

=6

(4)的运行结果如下:

000

001

002

Endofkloop;j=0

010

011

012

Endofkloop;j=1

020

021

022

Endofkloop;j=2

Endofjloop;i=0

100

Endofjloop;i=1

200

201

202

Endofkloop;j=0

210

211

212

Endofkloop;j=1

220

221

222

Endofkloop;j=2

Endofjloop;i=2

Endofiloop.

7.分析下面两个三重循环程序之间的差别,写出结果,然后上机进行检验。

(1).三重循环1:

publicclassExample01{

publicstaticvoidmain(String[]args){

intcount=0;

for(inti=0;i<3;i++)

resume:

for(intj=0;j<4;j++)

for(intk=0;k<5;k++){

++count;

if(i==1&&j==2&&k==3)breakresume;

}

System.out.println("\tcount="+count);

}

}

(2).三重循环2:

publicclassExample02{

publicstaticvoidmain(String[]args){

intcount=0;

for(inti=0;i<3;i++){

resume:

for(intj=0;j<4;j++)

for(intk=0;k<5;k++){

++count;

if(i==1&&j==2&&k==3)breakresume;

}

System.out.println("\tcount="+count);

}

}

}。

【答】:

在三重循环1中,System.out.println()语句是在三重循环之外的,输出的是count的最后的值,而三重循环2中,System.out.println()语句在循环体内,输出的是每次循环后count发生变化的值。

三重循环1的运行结果是:

count=54

三重循环2的运行结果是:

count=20

count=34

count=54

习题三

1.Java程序中字符串常量使用什么类表示?

字符串变量又使用什么类来表示?

它们的主要区别在哪里?

【答】:

字符串常量常用java.lang.String类表示,字符串变量常用java.lang.StringBuffer类来表示。

它们的主要区别在于:

String对象一旦创建不会发生变化,具有只读性质;而StringBuffer对象创建后可扩充和修改字符串对象的内容。

2.请说明程序“Strings1="Ilike";s1+="Java!

";”和程序“StringBuffers1=newStringBuffer("Ilike");s1.append("Java!

");”的区别。

根据你得出的结论,如果程序需要处理大量的字符串连接操作,应该尽量使用String类还是StringBuffer类?

【答】:

程序“Strings1="Ilike";s1+="Java!

";”中,s1表示字符串变量,在执行第一次运算时,s1赋值一个字符串对象“Ilike”,而第二次运算,s1被赋值另一个字符串对象“IlikeJava”,二次运算中赋值的对象完全不同。

而对于程序“StringBuffers1=newStringBuffer("Ilike");s1.append("Java!

");”,变量s1在两次运算中始终表示一个字符串对象,只是这个字符串对象的内容发生了变化。

程序在处理大量的字符串连接操作,尽量使用StringBuffer类的对象来处理。

这是因为StringBuffer对象可以扩充和修改字符串对象,有利于减少系统资源的消耗。

3.编写一个Applet,使之能将定长字符串转化成可变长字符串,并能实现字符串中指定字符的替换。

【答】:

Applet的程序如下:

packagejavabook.answer.ch03;

importjavax.swing.JApplet;

importjava.awt.*;

publicclassDemo3extendsJApplet{

/**

*字符串替换操作

*

*/

publicvoidinit(){

try{

str=this.getParameter("str");

strR=newStringBuffer(str);

pch=this.getParameter("ch1").charAt(0);

tch=this.getParameter("ch2").charAt(0);

}catch(Exceptione){

System.out.println("初始化数据出现错误!

");

}

for(inti=0;i

if(strR.charAt(i)==pch){//替换

strR.setCharAt(i,tch);

}

}

}

publicvoidpaint(Graphicsg){

g.drawString("原来的字符串:

"+str,20,20);

g.drawString("替换后的字符串:

"+strR,120,120);

}

privateStringstr;

privateStringBufferstrR;

privatecharpch;

privatechartch;

}

对应的HTML的文件如下:

关于字符串替换

4.阅读下面的程序,写出程序的运行结果。

importjava.util.*;

publicclassStringTest{

publicstaticvoidmain(Stringargs[]){

Strings1="IloveJava.";

Strings2="IlikeJava.";

Strings3="IlikeJava.";

StringBuffers4=newStringBuffer(s1);

StringBuffers5=newStringBuffer("Append");

charc1[]=newchar[s1.length()];

System.out.println("s1的长度="+s1.length());

System.out.println("s1和s2相同吗?

"+(pareTo(s2)==0?

"相同":

"不同"));

System.out.println("s2和s3相同吗?

"+(pareTo(s3)==0?

"相同":

"不同"));

System.out.println("s1连接s2后的字符串为:

"+s1.concat(s2));

System.out.println(s1.startsWith("J",7));

System.out.println(s1.endsWith("."));

s1.getChars(0,s1.length(),c1,0);

for(inti=0;i

System.out.println(c1[i]+"");

}

System.out.println(s1.toUpperCase()+"\n");

System.out.println("s4的长度="+s4.length());

System.out.println(s4.append(s5));

System.out.println(s4.insert(2,365.25f));

System.out.println(s4.insert(0,"INSERTED"));

charc2[]=newchar[s4.length()];

s4.getChars(0,s4.length(),c2,0);

for(inti=0;i

System.out.println(c2[i]+"");

System.out.println(s4.toString().toUpperCase());

}

}

【答】:

上列程序StringTest的运行结果如下:

s1和s2相同吗?

不同

s2和s3相同吗?

相同

s1连接s2后的字符串为:

IloveJava.IlikeJava.

true

true

I

l

o

v

e

J

a

v

a

.

ILOVEJAVA.

s4的长度=12

IloveJava.Append

I365.25loveJava.Append

INSERTEDI365.25loveJava.Append

I

N

S

E

R

T

E

D

I

3

6

5

.

2

5

l

o

v

e

J

a

v

a

.

A

p

p

e

n

d

INSERTEDI365.25LOVEJAVA.APPEND

s1的长度=12

习题四

写出类的格式声明中允许使用的关键字。

它们代表的含义是什么?

【答】:

类的格式声明允许使用的关键字有:

abstract、static、final、public、class、implements以及extends等。

abstract表示定义一个抽象类,static用于定义静态嵌套类、final定义一个最终类,public定义一个公共类、class表示定义一个类、implements表示定义的类实现的接口以及用extends表示该类继承某类。

2.类的成员数据的修饰符是否和类的成员方法部分相同,部分不同。

请写出与成员方法不同的修饰符是哪些?

它们的含义是什么?

【答】:

类的成员数据修饰符有部分和成员方法相同,如访问控制符、static、final等。

有部分的修饰符存在不同。

对于成员变量与成员方法不同的修饰符有:

transient(说明变量不能被序列化)、volatile(表示变量能从主存读取,进行异步修改);对于成员方法与成员变量不同的修饰符有:

native(定义本地方法)、abstract(定义抽象方法)、synchronized(定义同步方法)。

3.写出构造方法的定义和用途?

【答】:

构造方法是一种特殊的方法,它与类名同名,但不具有返回值。

构造方法由用户自定义,如果没有定义系统会自动创建一个默认的无参构造方法。

构造方法用于对象的创建和初始化。

4.关键字static在修饰类、类的成员数据和类的成员方法中的作用各是什么?

【答】:

static在修饰类时,往往修饰类中定义的嵌套类,也称为静态嵌套类,提高了类的封装性。

static在修饰类的成员数据和成员方法时,表示定义一个静态成员,该成员为类成员,为该类的所有对象共享。

5.定义一个点类“Point”。

Point类的属性有x轴和y轴坐标,可以通过方法setX()设置x轴坐标,方法setY()设置y轴坐标,方法getY()获得x轴坐标,方法getY()获得y轴坐标。

编写一个测试类PointTest来创建Point类的对象,测试该类。

【答】:

packagejavabook.answer.ch04;

importjava.util.*;

classPoint{

privatedoublex;

privatedoubley;

publicPoint(){

x=0;

y=0;

}

publicPoint(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1