java语言程序设计教程第二版习题解答Word文档格式.docx
《java语言程序设计教程第二版习题解答Word文档格式.docx》由会员分享,可在线阅读,更多相关《java语言程序设计教程第二版习题解答Word文档格式.docx(35页珍藏版)》请在冰豆网上搜索。
![java语言程序设计教程第二版习题解答Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/27/e58e7f3e-3fcb-4b3b-896a-7a0740e81c0a/e58e7f3e-3fcb-4b3b-896a-7a0740e81c0a1.gif)
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)<
<
a。
Java的运算符主要由算术运算符、关系运算符、条件运算符、位运算符、逻辑运算符以及赋值运算符。
表达式由运算符、操作数和方法调用,按照语言的语法规则构造而成的符号序列。
表达式的结构是:
1)––a%b++的结果是:
1
2)(a>
b)的结果是:
3)f^(a>
false
4)(––a)<
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+"
+y);
}
(2).菲波拉契数列:
publicclassExample02{
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{
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{
for(inti=0;
i<
3;
i++){
resume:
for(intj=0;
j<
j++){
for(intk=0;
k<
k++){
\n"
+i+"
"
+j+'
+k);
if(i==1&
k==0)breakresume;
\tEndofkloop;
j="
+j);
\tEndofjloop;
i="
+i);
\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
j=1
020
021
022
j=2
Endofjloop;
i=0
100
i=1
200
201
202
210
211
212
220
221
222
i=2
Endofiloop.
7.分析下面两个三重循环程序之间的差别,写出结果,然后上机进行检验。
(1).三重循环1:
publicclassExample01{
intcount=0;
i++)
4;
j++)
5;
++count;
j==2&
k==3)breakresume;
\tcount="
+count);
(2).三重循环2:
}。
在三重循环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("
);
s1.append("
);
”的区别。
根据你得出的结论,如果程序需要处理大量的字符串连接操作,应该尽量使用String类还是StringBuffer类?
程序“Strings1="
”中,s1表示字符串变量,在执行第一次运算时,s1赋值一个字符串对象“Ilike”,而第二次运算,s1被赋值另一个字符串对象“IlikeJava”,二次运算中赋值的对象完全不同。
而对于程序“StringBuffers1=newStringBuffer("
”,变量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"
}catch(Exceptione){
初始化数据出现错误!
for(inti=0;
i<
strR.length();
i++){
if(strR.charAt(i)==pch){//替换
strR.setCharAt(i,tch);
publicvoidpaint(Graphicsg){
g.drawString("
原来的字符串:
+str,20,20);
替换后的字符串:
+strR,120,120);
privateStringstr;
privateStringBufferstrR;
privatecharpch;
privatechartch;
对应的HTML的文件如下:
html>
head>
title>
关于字符串替换<
/title>
/head>
body>
appletcode="
Demo3.class"
width=300height=300>
paramname="
value="
Hello"
>
l"
c"
/applet>
/body>
/html>
4.阅读下面的程序,写出程序的运行结果。
importjava.util.*;
publicclassStringTest{
publicstaticvoidmain(Stringargs[]){
Strings1="
IloveJava."
Strings2="
IlikeJava."
Strings3="
StringBuffers4=newStringBuffer(s1);
StringBuffers5=newStringBuffer("
Append"
charc1[]=newchar[s1.length()];
s1的长度="
+s1.length());
s1和s2相同吗?
+(pareTo(s2)==0?
相同"
:
不同"
));
s2和s3相同吗?
+(pareTo(s3)==0?
s1连接s2后的字符串为:
+s1.concat(s2));
System.out.println(s1.startsWith("
J"
7));
System.out.println(s1.endsWith("
."
s1.getChars(0,s1.length(),c1,0);
c1.length;
System.out.println(c1[i]+"
System.out.println(s1.toUpperCase()+"
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);
c2.length;
System.out.println(c2[i]+"
System.out.println(s4.toString().toUpperCase());
上列程序StringTest的运行结果如下:
不同
相同
IloveJava.IlikeJava.
true
I
l
o
v
e
J
a
.
ILOVEJAVA.
s4的长度=12
IloveJava.Append
I365.25loveJava.Append
INSERTEDI365.25loveJava.Append
N
S
E
R
T
D
3
6
5
2
A
p
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;
classPoint{
privatedoublex;
privatedoubley;
publicPoint(){
x=0;
y=0;
publicPoint(