java课后习题答案.docx
《java课后习题答案.docx》由会员分享,可在线阅读,更多相关《java课后习题答案.docx(16页珍藏版)》请在冰豆网上搜索。
java课后习题答案
习题1
1—1
Java语言的主要贡献者是谁?
Java之父JamesGosling
习题2—4
publicclass表中的位置{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
chara='思';
charb='故';
charc='乡';
System.out.println((int)a+","+(int)b+","+(int)c);
}
}
习题3—4
publicclassXiti3_4{
publicstaticvoidmain(String[]args){
for(chara='А';a<='я';a++)
{
System.out.println(a);
}
}
}
习题3—5
publicclass阶乘{
publicstaticvoidmain(String[]args){
inti=Jiecheng(20);
System.out.println(i);
}
publicstaticintJiecheng(inti)
{
intresult=0;
if(i==1)
result=1;
else
result=i*Jiecheng(i-1);
returnresult;
}
}
习题3—7
publicclassxiti3_7{
publicstaticvoidmain(String[]args){
inti=1;
inta=0;
while(a<=9999)
{
a+=Jiecheng(i);
if(a<=9999){
i++;
}
}
System.out.println(i-1);
}
publicstaticintJiecheng(inti)
{
intresult=0;
if(i==1)
result=1;
else
result=i*Jiecheng(i-1);
returnresult;
}
}
习题4
习题4—1
类中的实例变量在什么时候会被分配内存空间?
创建一个类的实例的时候,实例变量就会分配内存空间。
4—2
什么叫做方法的重载,构造方法可以重载么?
?
重载:
一个类中可以有多个方法,具有相同的名字,但是这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。
构造方法可以重载,一个类里面可以有多个构造函数。
4—3
类中的实例方法可以操作类变量么,类方法可以操作实例变量么?
可以。
不可以。
4—4
类中的实例方法可以通过类名直接调用么?
不可以。
4—5
简述类变量和实例变量的区别
1.不同对象的实例变量互不相同
2.所有对象共享类变量
3.通过类名直接访问类变量
4—6
C,D是错误的,不能用protected和private修饰类。
4—7
略,
4—8
-100;局部变量的名字与成员变量的名字相同,则成员变量被隐藏。
4—9
27
4—10
“**”20,“##”100;
习题5
5—1
子类将继承父类的哪些成员变量和方法?
子类在什么情况下隐藏父类的成员变量和方法?
若子类与父类在同一包中,子类继承父类除private访问权限以外的的变量和方法。
若不在同一包中,子类只继承父类中protected和public访问权限的成员变量和方法。
成员变量的隐藏:
如果所子类所声明的成员变量的名字和父类继承来的成员的名字相同,在这种情况下子类就会隐藏掉所继承的成员变量。
方法的隐藏:
子类可以通过重写,隐藏呀以继承的实例方法;
5—2
Final方法可以被子类重写么?
不可以
5—3
Abstract类里可以有abstract方法
5—4
什么叫做对象的上转型对象?
假设A类是B类的父类当用子类创建一个对象,并把这个对象的引用放到父类中时,这时称对象a是对象b的上转型对象
5—5
下列哪些叙述是正确的:
(A)final类不可以有子类,正确。
(B)abstract类只可以有abstract方法,错误
(C)abstract类可以有非abstract方法,但是该方法不可以用final关键字修饰,错误
(D)不可以同时用abstract和final修饰一个方法。
正确
5—6
15.0,8.0
5—7
98.0,12
习题6
6—1
接口中能声明变量么?
不能。
6—2
接口中能定义非抽象方法么?
不能
6—3
什么叫做接口的回调?
接口回调是指:
可以把实现某一接口的类创建的对象的阴影赋值给该接口声明的接口变量中,那么该接口变量就可以调用被该类实现的接口方法。
实际上,当接口变量调用被该类实现的接口方法时,就是通知相应的对象调用这个方法
6—4
请说出System.out.Println的输出结果。
15.0;8;
6—5
18;15;
习题7
7—1
怎样获取一维数组的长度?
数组名.length
7—2
怎样获取二维数组中一维数组的个数?
数组名.length就是它含有一维数组的个数
7—3
False;true;false;3;4.4;8.8
7—4
代码1输出结果:
bird
代码2输出结果:
car
7—5
参考例7—7,输出从红,黄,蓝,绿,黑5中颜色取出三种不同颜色的排列。
publicclassXiti5{
publicstaticvoidmain(String[]args){
for(Colora:
Color.values())
{
for(Colorb:
Color.values())
{
for(Colorc:
Color.values())
{
if(a!
=b&&a!
=c&&b!
=c){
System.out.println(a+","+b+","+c);
}
}
}
}
System.out.println(i);
}
}
enumColor{
红,黄,蓝,绿,黑
}
习题8
8—1
内部类的外嵌类的成员变量在内部类中仍然有效么?
有效。
8—2
内部类中的方法也可以调用外嵌类中的方法么?
可以调用
8—3
内部类中的类体中可以声明类变量和类方法么?
不可以。
8—4
请说出下列程序的输出结果:
大家好,祝工作顺利!
8—5
96,乘数超过99
习题9
9—1
A:
正确,java把string类设置为final类不可以有子类
B:
string类在java.lang包中正确
C:
“abc”==“abc”的值是false错误
D:
”abc”.equals(“abc”)的值是true正确
9—2
请说出E类中的System.out.println的输出结果
love:
Game
9—3
请说出E类中的输出结果
15;
abc我们
9—4
13579
9—5
9javahello
9—6
publicclassXiti6{
publicstaticvoidmain(String[]args){
Stringstr1="hello";
Stringstr2="World";
Stringstr3=str1.toUpperCase();
System.out.println(str3);
str3=str2.toLowerCase();
System.out.println(str3);
str3=str1.concat(str2);
System.out.println(str3);
}
}
9—7
publicclassXiti7{
publicstaticvoidmain(String[]args){
Stringstr1="HelloWorld!
";
chara=str1.charAt(0);
System.out.println(a);
a=str1.charAt(str1.length()-1);
System.out.println(a);
}
}
9—8
通过键盘输入年份和月份。
程序输出相应的日历牌。
importjava.util.Calendar;
importjava.util.Scanner;
publicclassXiti8{
publicstaticvoidmain(String[]args){
Scannerreader=newScanner(System.in);
System.out.println("请输入年份和月份,输入一次按一次回车");
intx=reader.nextInt();
inty=reader.nextInt();
CalendaBeencb=newCalendaBeen();
cb.SetYear(x);
cb.SetMonth(y);
String[]a=cb.getCalendar();
char[]str="日一二三四五六".toCharArray();
for(charc:
str)
{
System.out.printf("%7c",c);
}
for(inti=0;i{
if(i%7==0)
System.out.println();
System.out.printf("%4s",a[i]);
}
}
}
classCalendaBeen{
String[]day;
intyear=0,month=0;
publicvoidSetYear(intyear)
{
this.year=year;
}
publicvoidSetMonth(intmonth)
{
this.month=month;
}
publicString[]getCalendar()
{
String[]a=newString[42];
Calendarrill=Calendar.getInstance();
rill.set(year,month-1,1);
intweekDay=rill.get(Calendar.DAY_OF_WEEK)-1;
intday=0;
if(month==1||month==3||month==7||month==8||month==10||month==12)
day=31;
if(month==4||month==6||month==9||month==11)
day=30;
if(month==2){
if(year%4==0&&year%100!
=0||year%400==0)
day=29;
elseday=28;
}
for(inti=0;ia[i]="";
for(inti=weekDay,n=1;i{
a[i]=String.valueOf(n);
n++;
}
for(inti=weekDay+day;ia[i]="";
returna;
}
}
9—9
计算某年、某月、某日和某年、某月、某日之间的天数间隔。
要求年、月、日通过键盘输入。
importjava.util.Calendar;
importjava.util.Scanner;
publicclassXiti9{
publicstaticvoidmain(String[]args){
Calendarcalendar=Calendar.getInstance();
Scannerreader=newScanner(System.in);
System.out.println("请输入年份");
intyear=reader.nextInt();
System.out.println("请输入月份");
intmonth=reader.nextInt();
System.out.println("请输入日子");
intday=reader.nextInt();
calendar.set(year,month-1,day);
longtime1=calendar.getTimeInMillis();
System.out.println("请输入年份");
year=reader.nextInt();
System.out.println("请输入月份");
month=reader.nextInt();
System.out.println("请输入日子");
day=reader.nextInt();
calendar.set(year,month-1,day);
longtime2=calendar.getTimeInMillis();
longsub=(time2>time1)?
((time2-time1)/(1000*60*60*24)):
((time1-time2)/(1000*60*60*24));
System.out.println("相隔"+sub+"天");
}
}
10—10
略
10—11
参看例9—19,编写程序剔除一个字符串中的全部非数字字符,例如,将形如“abc123you”的非数字字符全部剔除得到字符串“123”。
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassXiti11{
publicstaticvoidmain(String[]args){
Patternp;
Matcherm;
Stringregex="\\D{1,}";
p=Ppile(regex);
Strings="abc123you";
m=p.matcher(s);
System.out.println("剔除以后的字符串");
Stringresult=m.replaceAll("");
System.out.println(result);
}
}
10—12
参看例9—21,使用Scanner类的实例解析,“数学87分,物理76分,英语96分”中的考试成绩,并计算出总成绩以及平均分数。
importjava.util.Scanner;
publicclassXiti12{
publicstaticvoidmain(String[]args){
StringCount="数学87分,物理76分,英语96分";
Scannerscanner=newScanner(Count);
scanner.useDelimiter("[^0123456789]+");
intsum=0;
while(scanner.hasNext())
{
intcount=scanner.nextInt();
sum+=count;
}
doubleavg=sum/3;
System.out.println("总分数为"+sum+"平均分"+avg);
}
}
习题10
10—1
如果准备按字节读取一个文件的内容,应当使用FileInputStream流还是FileReader流?
前者是以字节为单位顺序的读取源中的数据,后者是以字符为单位顺序的读取源中的数据。
10—2
FileInputStream流的read方法和FileReader流的read方法有何不同?
同上
10—3
BufferedReader流能直接指向一个文件么?
不能,通过向BufferedReader传递一个Reader子类的对象,来创建一个BufferedReader对象
10—4
使用ObjectInputStream和ObjectOutputStream类有哪些注意事项?
ObjectOutputStream的指向应当是一个输入流对象,因此当准备将一个对象写入到文件时,首先用OutputStream的子类创建一个输出流。
同样ObjectInputStream的指向应当是一个输入流对象,因此当准备从文件读入一个对象到程序中的时候,首先用InputStream的子类创建一个文件输入流。
当使用对象流写入或者读入对象的时,要保证对象是序列化的。
这是为了保证能把对象写入到文件,并能把对象正确读回到程序的缘故。
10—5
怎样使用输入输出流克隆对象?
只需将该对象写入的对象的输出流的指向的目的地,然后将该目的地作为一个对象的输入流的源,那么该对象输入流从源中读回的对象一定是源对象的一个克隆,即对象输入流通过对象的序列化信息得到当前流的一个克隆。
10—6
使用RandomAccessFile流将一个文本文件倒置读出。
importjava.io.*;
publicclassXiti6{
publicstaticvoidmain(String[]args){
RandomAccessFileinAndOut=null;
intdata[]={1,2,3,4,5,6,7,8,9,0};
try
{
inAndOut=newRandomAccessFile("tom.dat","rw");
for(inti=0;i{
inAndOut.writeInt(data[i]);
}
for(longi=data.length-1;i>=0;i--)
{
inAndOut.seek(i*4);
System.out.printf("\t%d",inAndOut.readInt());
}
inAndOut.close();
}
catch(IOExceptione)
{}
}
}
10—7
使用java的输入输出流将一个文本文件的内容按行读出,每读出一行就顺序添加行号,并写入到另一个文件中。
10—8
略
10—9
解析一个文件中的价格数据,并计算平均价格,该文件的内容如下:
商品列表:
电视机,2567元/台
洗衣机,3562元/台
冰箱,6573元/台
importjava.io.*;
importjava.util.*;
publicclassXiti9{
publicstaticvoidmain(String[]args){
Filefile=newFile("cost.txt");
Scannersc=null;
doublesum=0;
inti=0;
try
{
sc=newScanner(file);
while(sc.hasNext())
{
try
{
intprice=sc.nextInt();
sum+=price;
i++;
System.out.println(price);
}
catch(InputMismatchExceptionexp)
{
Stringt=sc.next();
}
}
doubleavg=sum/i;
System.out.println(avg);
System.out.println("TotalCost"+sum+"dollar");
}
catch(Exceptionexp)
{
System.out.println(exp);
}
}
}