Java2实用教程(第三版)课后习题参考答案
更新时间:2023-12-29 12:32:01 阅读量: 教育文库 文档下载
- java培训班推荐度:
- 相关推荐
Java2实用教程 课后习题参考答案 第1章 Java入门
1. 开发与运行Java程序需要经过哪些主要步骤和过程?
答:(1)编写Java源文件:使用文本编辑器(Edit或记事本),拓展名为.java
(2)编译Java源文件:使用Java编译器(javac.exe)。得到字节码文件*.class
(3)运行Java程序:Java应用程序使用Java解释器(java.exe)执行字节码文件;
Java小应用程序使用支持Java标准的浏览器来执行。
2. 怎样区分应用程序和小应用程序?应用程序的主类或小应用程序的主类必须用public修饰吗?
答: ①应用程序必须有main方法,这个方法是程序执行的入口。 小应用程序没有main方法。
②应用程序的主类不一定用public修饰;小应用程序的主类必须用public修饰。
3. Java程序是由什么组成的?一个程序中必须要有public类吗?Java源文件的命名规则是怎样的? 答: ①Java程序由类组成。
②应用程序可以没有public类;小应用程序一定有一个类是public类(主类)。
③应用程序:如果只有一个类,源文件名与该类的类名相同,拓展名为.java;
有多个类时,如果有public类(最多一个),源文件名与public类的类
名相同,拓展名是.java;没有public类,源文件名与任何一个类的类名
相同即可,拓展名为.java。
小应用程序:源文件名与主类的类名相同,拓展名是.java。 4. 在运行小程序的HTML文件中可以使用codebase属性指定小程序的字节码所驻留的目录。如果不使用codebase属性,小程序的字节码文件必须和运行它的HTML文件在同一目录中。编写一个小程序并将小程序的字节码存放在某个目录中,比如C:\\5000;把运行该小程序的HTML文件(注意其中的codebase属性):
存放在另一个目录中。
答: 以书中小应用程序为例进行说明: ①编写Java小应用程序源代码 import java.applet.*; import java.awt.*;
public class Boy extends Applet
{
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawString(\我一边喝着咖啡,一边学Java呢\g.setColor(Color.blue);
g.drawString(\我学得很认真\} }
②将上述代码命名为Boy.java并进行编译得到Boy.class字节码文件;将得到的字节码文件存放在
C:\\5000文件夹下;
③编写小应用程序的HTML源文件:
④将上述编写好的代码命名为Boy.html;并将此文件存放在C:\\5000文件夹以外的任意一个文件夹中(如C:\\1000); ⑤运行Boy.html。
第2章 标识符、关键字和数据类型 1. 什么叫标识符?标识符的规则是什么?
答:①用来标识类名、变量名、、方法名、类型名、数组名、文件名
的有效字符序列。
②由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字字符,而且关键字不能作为标识符。 2. 什么叫关键字?请说出5个关键字。
答:①Java语言中已经被赋予特定意义的一些单词。 ②class break public return static extends等。 3. Java的基本数据类型都是什么?
答:boolean(逻辑型) char(字符型) float、double(浮点型) byte、short、int、long(整型)。 4. 下列哪些语句是错误的: int x = 8; byte b = 127; b = x;
答:b=x语句错误;原因是高级别的变量赋值给低级别的变量时,一定要用显式转换即b=(byte)x; 。 5. 下列程序的输出结果是什么? public class E {
public static void main(String args[]) {
long[] a={1,2,3,4};
long[] b={100,200,300,400,500};
b=a;
System.out.println(\数组b的长度:\System.out.println(\} }
答: 数组b的长度:4 b[0]=1
6. 上机运行下列程序,注意观察输出结果。 public class E {
public static void main(String args[]) {
for(int i=20302;i<20322;i++) {
System.out.println((char)i); } } }
答: 低住佐佑佒体佔何佖佗佘余佚佛作佝佞佟你佡
7. System.out.println(“你好”);可输出字符串,也可以使用System.out.println( )输出变量或表达式的值,只需使用并置符号“+”将变量、表达式或一个常数值与一个字符串并置即可,如:
System.out.println(“ ”+x);System.out.println(“:”+123+“大于”+122);等。上机调试下列程序,注意观察结果,特别注意System.out.print( )和System.out.println( )的区别。 public class OutputData {
public static void main(String args[]) {
int x=234,y=432;
System.out.println(x+\System.out.print(\我输出结果后不回车\
System.out.println(\我输出结果后自动回车到下一行\System.out.println(\System.out.println(\} }
答: 234<468
我输出结果后不回车我输出结果后自动回车到下一行 x+y= 666 234432=234432
8. 编写一个Java应用程序,输出全部的希腊字母。 答:
public class XLWords
{
public static void main(String args[]) {
for(int i=913;i<930;i++) {
System.out.print((char)i+\}
for(int j=931;j<938;j++) {
System.out.print((char)j+\}
for(int k=945;k<962;k++) {
System.out.print((char)k+\}
for(int t=963;t<=969;t++) {
System.out.print((char)t+\} } }
第3章 运算符、表达式和语句
1. 下列程序的输出结果是什么? public class E {
public static void main(String args[]) {
char x='你',y='e',z='吃'; if(x>'A') { y='爱'; z='情'; } else y='我'; z='她';
System.out.println(\} }
答: 你爱她
2. 下列程序的输出结果是什么? public class E3 {
public static void main(String args[])
{
char c='\\0';
for(int i=1;i<=4;i++) { switch(i) {
case 1:c='b'; System.out.print(c); case 2:c='e'; System.out.print(c); break; case 3:c='p'; System.out.print(c); default:
System.out.print(\} } } }
答:beep!!
3. 编写应用程 序,求1!+2!+?+10!。答:
class Fact {
public static void main(String args[]) {
int fact,sum=0; for(int i=1;i<=10;i++) { fact=1;
for(int j=1;j<=i;j++) fact*=j; sum+=fact; }
System.out.println(\到10的阶乘之和是:\} }
4. 编写一个应用程序,求100以内的全部素数。 答:
class Primes {
public static void main(String args[]) { int w=1;
for(int i=2;i<=100;i++) {
for(int j=2;j
System.out.println(i+\是素数\} } }
5. 分别用do―while和for循环计算1+1/2!+1/3!+1/4!+?的前20项和。 答: ①for循环 class Sum {
public static void main(String args[]) { int fact; double sum=0;
for(int i=1;i<=20;i++) { fact=1;
for(int j=1;j<=i;j++) fact*=j; sum+=1.0/fact; }
System.out.println(sum); } }
②do―while循环 class Sum {
public static void main(String args[]) { int i=1; int fact; double sum=0; do { fact=1; int j=0;
while(++j<=i) fact*=j; sum+=1.0/fact; }
while(++i<=20);
System.out.println(sum); } }
6. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。编写应用程序,求1000之内的所有完数。 答:
class Wanshu {
public static void main(String args[]) {
int x,i,sum; for(x=1;x<=1000;x++) { sum=0;
for(i=1;i if(x%i==0) sum+=i; } if(x==sum) System.out.println(x+\是完数\} } } 7. 编写应用程序,分别使用while和for循环计算8+88+888+?前10项之和。 答: ①for循环 class TheSum { public static void main(String args[]) { long sum=0,data=8; for(int i=1;i<=10;i++) { sum=sum+data; data=data*10+8; } System.out.println(sum); } } ②while循环 class TheSum { public static void main(String args[]) { long sum=0,data=8,i=0; while(++i<=10) { sum=sum+data; data=data*10+8; } System.out.println(sum); } } 8. 编写应用程序,输出满足1+2+3+?+n<8888的最大正整数n。 答: class Maxn { public static void main(String args[]) { int k=1,sum=0; while((sum+=k)<8888) k++; k--; System.out.println(\最大能取到:\} } 第4章 类、对象和接口 1. 类中的实例变量在什么时候会被分配内存空间? 答: 当该类创建对象之后,实例变量才会被分配相应的内存空间。 2. 什么叫方法的重载?构造方法可以重载吗? 答:①一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同(方法的重载体现了多态性,即功能多态性)。 ②构造方法可以重载。 3. 类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗? 答:①类中的实例方法可以操作类变量。 ②类方法不可以操作实例变量 4. 类中的实例方法可以用类名直接调用吗? 答: 类中的实例方法不可以用类名直接调用。 5. 举例说明protected方法和友好方法的区别。 答: 当子类与父类不在同一个包中时,子类可以继承父类的 protected方法;而友好方法此时则不能被子类继承。 6. 举例说明类变量和实例变量的区别。 答:⑴书写: 定义成员变量时,类变量有static修饰;实例变量没有static修饰。 例: class A { int x; //实例变量 static int y; //类变量 } ⑵内存: 不创建对象,类的实例变量不会被分配内存空间;类变量被分配相应的内存空间。 不同对象的实例变量被分配不同的内存空间;不同对象的类变量被分配相同的内存空间。 任何一个对象改变类变量,其他对象的相应类变量也发生相应变化。 一个对象的实例变量发生改变,不影响其他对象的相应实例变量。 例: 执行语句: A1.x=10; A1.y=20; 这时A2.x的值也是10;而A2.y的值保持原来的初值。 ⑶使用: 类变量可以被类方法操作;而实例变量不能被类方法操作。 例: class A { int x; static int y; static void func() { b=10; //合法 a=20; //非法 } } 类变量可以通过类名访问;实例变量不能通过类名访问。 例: class A { int x; static int y; } class B { public void func(); { A.x=10; //非法 A.y=20; //合法 } } 7. 子类将继承父类的哪些成员变量和方法?子类在什么情况下隐藏 父类的成员变量和方法?在子类中是否允许有一个方法和父类的方法名字相同,而类型不同? 答:①子类和父类在同一个包中时,子类可以继承父类的除private属性的所有方法和成员变量,当子类与 父类不在同一个包中时,子类只能继承父类的protected和public属性的成员变量和方法。 ②子类中定义的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量;子类中定义一个方法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同,子类就隐藏从父类继承来的方法(方法的重写)。 ③在子类中允许有一个方法和父类的方法名字相同而类型不同。 8. 父类的final方法可以被子类重写吗? 答: 父类的final方法不能被子类重写。 9. 什么类中可以有abstract方法? 答: abstract类中可以有abstract方法。 10.什么叫对象的上转型对象? 答: B类是A类的子类或间接子类,当用子类B创建一个对象b并把这个对象的引用放到A类的对象a中时,称A类对象a是子类对象b的上转型对象。 11.什么叫接口的回调? 答: 可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。 12.下列程序有什么错误? public class Takecare { int a=90; static float b=10.98f; public static void main(String args[]) { float c=a+b; System.out.println(\} } 答: 语句float c=a+b;错误。原因是类方法main操作了实例变量a。 13. 请写出下列程序的输出结果。 class A { public int f(int x) { return x+1; } } class B extends A { for(i=913;i<930;i++) System.out.print((char)i+\for(i=931;i<938;i++) System.out.print((char)i+\for(i=945;i<962;i++) System.out.print((char)i+\for(i=963;i<970;i++) System.out.print((char)i+\ System.out.println(\} } public class Test { public static void main(String args[]) { B b=new B(); System.out.println(\我调用方法f输出英文字母表:\b.f(); System.out.println(\我调用方法g输出希腊字母表:\b.g(); } } 17.编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法public void speak(int m) throws MyException,要求参数m的值大于1000时,方法抛出一个MyException对象。最后编写主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。 答: class MyException extends Exception { String str1; MyException(int m) { str1=m+\出现错误 可能造成的原因是取值大于1000\} public void showStr1() { System.out.println(str1); } } class Student { public void speak(int m) throws MyException { if(m>1000) { MyException exception=new MyException(m); throw exception; } else System.out.println(m); } } public class Test { public static void main(String agrs[]) { int m; Student stu1=new Student(); m=987; try { stu1.speak(m); m=1234; stu1.speak(m); } catch(MyException e) { e.showStr1(); } } } 18.编写一个类,该类有一个方法public int f(int a,int b),该方法返回a和b的最大公约数。然后再编写一个该类的子类,要求子类重写方法f,而且重写的方法将返回a和b的最小公倍数。要求在重写的方法的方法体中首先调用被隐藏的方法返回a和b的最大公约数m,然后将乘积(a*b)/m返回。要求在应用程序的主类中分别使用父类和子类创建对象,并分别调用方法f计算两个正整数的最大公约数和最小公倍数。 答: class A { public int f(int a,int b) { if(a int temp=0; temp=a; a=b; b=temp; } int r=a%b; while(r!=0) { a=b; b=r; r=a%b; } return b; } } class B extends A { public int f(int a,int b) { int m; m=super.f(a,b); return (a*b)/m; 参数分别表示: src - 被复制的数组 srcPos - 从第几个元素开始复制 dest - 要复制到的数组 destPos - 从第几个元素开始粘贴 length - 一共需要复制的元素个数 第6章 时间、日期和数字 1. 用Data类不带参数的构造方法创建日期,要求日期的输出格式是:星期 小时 分 秒。 答: import java.util.*; import java.text.*; class Test { public static void main(String args[]) { Date 时间=new Date(); SimpleDateFormat s=new SimpleDateFormat(\HH时 mm分 ss秒\System.out.println(s.format(时间)); } } 2. 输出2006年2月的日历页,程序需处理闰年问题。 答: import java.util.*; class Test { public static void main(String args[]) { int year=2006,month=2; int allDay; if((year%4==0&&year0!=0)||(year@0==0)) allDay=29; else allDay=28; Calendar feb=Calendar.getInstance(); feb.set(2006,1,1); int dat=feb.get(Calendar.DAY_OF_WEEK)-1; String a[]=new String[dat+allDay]; for(int i=0;i for(int i=dat,n=1;i<(dat+allDay);i++) { if(n<=9) a[i]=String.valueOf(n)+\else a[i]=String.valueOf(n)+\n++; } System.out.println(\年 \月\System.out.println(\日 一 二 三 四 五 六\for(int j=0;j if(j%7==0) { System.out.println(\} System.out.print(a[j]); } } } 3. 计算某年、某月、某日和某年、某月、某日之间的天数间隔。要求年、月、日通过main方法的参数传递到程序中。 答: import java.util.*; class Test { public static void main(String args[]) { Calendar c=Calendar.getInstance(); c.set(2000,0,1); long time1=c.getTimeInMillis(); c.set(2008,7,8); long time2=c.getTimeInMillis(); long dayCous=(time2-time1)/(1000*60*60*24); System.out.println(\年8月8日和2000年1月1日相隔\天\} } 4. 编程练习 Math类的常用方法。 答: import java.text.*; public class Test { public static void main(String args[]) { double a=Math.abs(-10); System.out.println(\的绝对值是:\double maxNum=Math.max(123.456,-5.4321); System.out.println(\与-5.4321中的最大值是:\ double minNum=Math.min(123.456,-5.4321); System.out.println(\与-5.4321中的最小值是:\ int randomNum=(int)(Math.random()*10)+1; System.out.println(\输出一个1到10的随机数是:\double powNum=Math.pow(2,10); System.out.println(\的10次幂是:\double sqrtNum=Math.sqrt(10); System.out.println(\的平方根是:\double logNum=Math.log(2); System.out.println(\的对数是:\double sinNum=Math.sin(-10); System.out.println(\的正弦值是:\double asinNum=Math.asin(0.5); System.out.println(\的反正弦值是:\System.out.println(\格式化之前的数是:\NumberFormat f=NumberFormat.getInstance(); f.setMaximumFractionDigits(10); f.setMinimumIntegerDigits(4); String s=f.format(sqrtNum); ActionListener { TextArea text1,text2; //定义2个文本区 Button button; //定义一个按钮 WindowSelectedText(String s) //窗口名字为“挑单词” { super(s); setLayout(new BorderLayout()); //窗口布局是BorderLayout布局 text1=new TextArea(6,15); text2=new TextArea(6,15); button=new Button(\确定\add(text1,BorderLayout.EAST); add(text2,BorderLayout.WEST); add(button,BorderLayout.SOUTH); button.addActionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); text2.setEditable(false); setBounds(100,100,350,200); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { if(e.getSource()==button) { String s=text1.getSelectedText()+\String str=text2.getText(); text2.setText(str+s); } } } public class Test { public static void main(String args[]) { new WindowSelectedText(\挑单词\ } } 6. 编写一个应用程序,有一个标题为“计算”的窗口,窗口的布局为FlowLayout布局。设计4个按钮,分别命名为“加”、“差”、“积”、“除”,另外,窗口中还有3个文本框。单击相应的按钮,将两个文本框的数字做运算,在第三个文本框中显示结果。要求处理NumberFormatException。 答: import java.awt.*; import java.awt.event.*; class Calculated extends Frame implements ActionListener { TextField text1,text2,text3; //3个文本框 Button buttonH,buttonC,buttonJ,buttonS; //4个按钮 Calculated(String s) { super(s); setLayout(new FlowLayout()); //FlowLayout布局 text1=new TextField(10); text2=new TextField(10); text3=new TextField(17); buttonH=new Button(\加\buttonC=new Button(\差\ buttonJ=new Button(\积\buttonS=new Button(\除\add(text1); add(text2); add(text3); text3.setEditable(false); add(buttonH); add(buttonC); add(buttonJ); add(buttonS); buttonH.addActionListener(this); buttonC.addActionListener(this); buttonJ.addActionListener(this); buttonS.addActionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); setBounds(100,100,160,180); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { double num1=0,num2=0,totle=0; try { num1= Double.parseDouble(text1.getText()); num2= Double.parseDouble(text2.getText()); if(e.getSource()==buttonH) { totle=num1+num2; text3.setText(\和\} else if(e.getSource()==buttonC) { totle=num1-num2; text3.setText(\差\} else if(e.getSource()==buttonJ)
正在阅读:
第五章 色谱理论05-09
江苏省东海高级中学数学考前猜题三04-13
93-94赔率体系主胜均衡盘的胜平负赔表03-19
人美版六年级美术上册教学反思03-08
EDA实验报告实验三:序列信号发生器与检测器设计++++10-30
年终导游个人工作总结精选范文大全08-02
管道铺设施工的最佳方案问题11-05
英文标题大小写规范04-09
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 课后
- 习题
- 答案
- 参考
- 实用
- 教程
- Java2