Java2课后习题参考答案.docx
《Java2课后习题参考答案.docx》由会员分享,可在线阅读,更多相关《Java2课后习题参考答案.docx(74页珍藏版)》请在冰豆网上搜索。
Java2课后习题参考答案
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属性):
\5000>存放在另一个目录中。答:以书中小应用程序为例进行说明:①编写Java小应用程序源代码importjava.applet.*;importjava.awt.*;publicclassBoyextendsApplet{publicvoidpaint(Graphicsg){g.setColor(Color.red);g.drawString("我一边喝着咖啡,一边学Java呢",5,30);g.setColor(Color.blue);g.drawString("我学得很认真",10,50);}}②将上述代码命名为Boy.java并进行编译得到Boy.class字节码文件;将得到的字节码文件存放在C:\5000文件夹下;③编写小应用程序的HTML源文件:\5000>④将上述编写好的代码命名为Boy.html;并将此文件存放在C:\5000文件夹以外的任意一个文件夹中(如C:\1000);⑤运行Boy.html。第2章标识符、关键字和数据类型1.什么叫标识符?标识符的规则是什么?答:①用来标识类名、变量名、、方法名、类型名、数组名、文件名的有效字符序列。②由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字字符,而且关键字不能作为标识符。2.什么叫关键字?请说出5个关键字。答:①Java语言中已经被赋予特定意义的一些单词。②classbreakpublicreturnstaticextends等。3.Java的基本数据类型都是什么?答:boolean(逻辑型)char(字符型)float、double(浮点型)byte、short、int、long(整型)。4.下列哪些语句是错误的:intx=8;byteb=127;b=x;答:b=x语句错误;原因是高级别的变量赋值给低级别的变量时,一定要用显式转换即b=(byte)x;。5.下列程序的输出结果是什么?publicclassE{publicstaticvoidmain(Stringargs[]){long[]a={1,2,3,4};long[]b={100,200,300,400,500};b=a;System.out.println("数组b的长度:"+b.length);System.out.println("b[0]="+b[0]);}}答:数组b的长度:4b[0]=16.上机运行下列程序,注意观察输出结果。publicclassE{publicstaticvoidmain(Stringargs[]){for(inti=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()的区别。publicclassOutputData{publicstaticvoidmain(Stringargs[]){intx=234,y=432;System.out.println(x+"<"+(2*x));System.out.print("我输出结果后不回车");System.out.println("我输出结果后自动回车到下一行");System.out.println("x+y="+(x+y));System.out.println(""+x+y+"=234432");}}答:234<468我输出结果后不回车我输出结果后自动回车到下一行x+y=666234432=2344328.编写一个Java应用程序,输出全部的希腊字母。答:publicclassXLWords{publicstaticvoidmain(Stringargs[]){for(inti=913;i<930;i++){System.out.print((char)i+"");}for(intj=931;j<938;j++){System.out.print((char)j+"");}for(intk=945;k<962;k++){System.out.print((char)k+"");}for(intt=963;t<=969;t++){System.out.print((char)t+"");}}}第3章运算符、表达式和语句1.下列程序的输出结果是什么?publicclassE{publicstaticvoidmain(Stringargs[]){charx='你',y='e',z='吃';if(x>'A'){y='爱';z='情';}elsey='我';z='她';System.out.println(""+x+y+z);}}答:你爱她2.下列程序的输出结果是什么?publicclassE3{publicstaticvoidmain(Stringargs[]){charc='\0';for(inti=1;i<=4;i++){switch(i){case1:c='b';System.out.print(c);case2:c='e';System.out.print(c);break;case3:c='p';System.out.print(c);default:System.out.print("!");}}}}答:beep!!3.编写应用程序,求1!+2!+…+10!。答:classFact{publicstaticvoidmain(Stringargs[]){intfact,sum=0;for(inti=1;i<=10;i++){fact=1;for(intj=1;j<=i;j++)fact*=j;sum+=fact;}System.out.println("1到10的阶乘之和是:"+sum);}}4.编写一个应用程序,求100以内的全部素数。答:classPrimes{publicstaticvoidmain(Stringargs[]){intw=1;for(inti=2;i<=100;i++){for(intj=2;j{w=i%j;if(w==0)break;}if(w!=0)System.out.println(i+"是素数");}}}5.分别用do―while和for循环计算1+1/2!+1/3!+1/4!+…的前20项和。答:①for循环classSum{publicstaticvoidmain(Stringargs[]){intfact;doublesum=0;for(inti=1;i<=20;i++){fact=1;for(intj=1;j<=i;j++)fact*=j;sum+=1.0/fact;}System.out.println(sum);}}②do―while循环classSum{publicstaticvoidmain(Stringargs[]){inti=1;intfact;doublesum=0;do{fact=1;intj=0;while(++j<=i)fact*=j;sum+=1.0/fact;}while(++i<=20);System.out.println(sum);}}6.一个数如果恰好等于它的因子之和,这个数就称为“完数”。编写应用程序,求1000之内的所有完数。答:classWanshu{publicstaticvoidmain(Stringargs[]){intx,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循环classTheSum{publicstaticvoidmain(Stringargs[]){longsum=0,data=8;for(inti=1;i<=10;i++){sum=sum+data;data=data*10+8;}System.out.println(sum);}}②while循环classTheSum{publicstaticvoidmain(Stringargs[]){longsum=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。答:classMaxn{publicstaticvoidmain(Stringargs[]){intk=1,sum=0;while((sum+=k)<8888)k++;k--;System.out.println("最大能取到:"+k);}}第4章类、对象和接口1.类中的实例变量在什么时候会被分配内存空间?答:当该类创建对象之后,实例变量才会被分配相应的内存空间。2.什么叫方法的重载?构造方法可以重载吗?答:①一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同(方法的重载体现了多态性,即功能多态性)。②构造方法可以重载。3.类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?答:①类中的实例方法可以操作类变量。②类方法不可以操作实例变量4.类中的实例方法可以用类名直接调用吗?答:类中的实例方法不可以用类名直接调用。5.举例说明protected方法和友好方法的区别。答:当子类与父类不在同一个包中时,子类可以继承父类的protected方法;而友好方法此时则不能被子类继承。6.举例说明类变量和实例变量的区别。答:⑴书写:定义成员变量时,类变量有static修饰;实例变量没有static修饰。例:classA{intx;//实例变量staticinty;//类变量}⑵内存:不创建对象,类的实例变量不会被分配内存空间;类变量被分配相应的内存空间。不同对象的实例变量被分配不同的内存空间;不同对象的类变量被分配相同的内存空间。任何一个对象改变类变量,其他对象的相应类变量也发生相应变化。一个对象的实例变量发生改变,不影响其他对象的相应实例变量。例:执行语句:A1.x=10;A1.y=20;这时A2.x的值也是10;而A2.y的值保持原来的初值。⑶使用:类变量可以被类方法操作;而实例变量不能被类方法操作。例:classA{intx;staticinty;staticvoidfunc(){b=10;//合法a=20;//非法}}类变量可以通过类名访问;实例变量不能通过类名访问。例:classA{intx;staticinty;}classB{publicvoidfunc();{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.下列程序有什么错误?publicclassTakecare{inta=90;staticfloatb=10.98f;publicstaticvoidmain(Stringargs[]){floatc=a+b;System.out.println("c="+c);}}答:语句floatc=a+b;错误。原因是类方法main操作了实例变量a。13.请写出下列程序的输出结果。classA{publicintf(intx){returnx+1;}}classBextendsA{publicintf(intx){returnx*x;}}publicclassE{publicstaticvoidmain(Stringargs[]){Aa=newB();intm=a.f(10);System.out.println(m);}}答:10014.请写出下列程序的输出结果。classA{intx;publicvoidsetX(intx){this.x=x;}intgetX(){returnx;}}classB{publicvoidf(Aa){a.setX(100);}}publicclassE{publicstaticvoidmain(Stringargs[]){Aa=newA();a.setX(8);System.out.println(a.getX());Bb=newB();b.f(a);System.out.println(a.getX());}}答:810015.使用接口有哪些注意事项?模仿例子4.27,编写一个类实现两个接口的程序。答:①一个类使用接口时,要有implements关键字,当一个类使用多个接口时,接口名要用逗号“,”隔开;使用接口的类除abstract类外,必须实现接口的所有方法,并且实现接口的方法时,方法名字、返回类型、参数个数及类型必须与接口中的完全一致;类在实现接口时,方法体一定要用public修饰,如果接口方法的返回类型不是void型,在类中实现接口时,方法体至少有一个return语句。②interface表面积{doubleallArea(doubler);}interface体积{doublevolu(doubler);}classSphimplements表面积,体积{doublePI=3.14159;publicdoubleallArea(doubler){return4*PI*r*r;}publicdoublevolu(doubler){return4.0/3*PI*r*r*r;}}publicclassTest{publicstaticvoidmain(Stringargs[]){doubler=5.0;Spha=newSph();System.out.println("半径为5的球的表面积是:"+a.allArea(r));System.out.println("半径为5的球的体积是:"+a.volu(r));}}16.编写一个类A,该类创建的对象可以调用方法f输出英文字母表,然后再编写一个该类的子类B,要求子类B必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字母表,而且调用子类新增的方法g输出希腊字母表。答:classA{intm;voidf(){for(m=65;m<91;m++)System.out.print((char)m+"");for(m=97;m<123;m++)System.out.print((char)m+"");System.out.println("");}}classBextendsA{inti;voidg(){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("");}}publicclassTest{publicstaticvoidmain(Stringargs[]){Bb=newB();System.out.println("我调用方法f输出英文字母表:");b.f();System.out.println("我调用方法g输出希腊字母表:");b.g();}}17.编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法publicvoidspeak(intm)throwsMyException,要求参数m的值大于1000时,方法抛出一个MyException对象。最后编写主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。答:classMyExceptionextendsException{Stringstr1;MyException(intm){str1=m+"出现错误可能造成的原因是取值大于1000";}publicvoidshowStr1(){System.out.println(str1);}}classStudent{publicvoidspeak(intm)throwsMyException{if(m>1000){MyExceptionexception=newMyException(m);throwexception;}elseSystem.out.println(m);}}publicclassTest{publicstaticvoidmain(Stringagrs[]){
\5000>
存放在另一个目录中。
以书中小应用程序为例进行说明:
①编写Java小应用程序源代码
importjava.applet.*;
importjava.awt.*;
publicclassBoyextendsApplet
{
publicvoidpaint(Graphicsg)
g.setColor(Color.red);
g.drawString("我一边喝着咖啡,一边学Java呢",5,30);
g.setColor(Color.blue);
g.drawString("我学得很认真",10,50);
}
②将上述代码命名为Boy.java并进行编译得到Boy.class字节码文件;将得到的字节码文件存放在
C:
\5000文件夹下;
③编写小应用程序的HTML源文件:
\5000>④将上述编写好的代码命名为Boy.html;并将此文件存放在C:\5000文件夹以外的任意一个文件夹中(如C:\1000);⑤运行Boy.html。第2章标识符、关键字和数据类型1.什么叫标识符?标识符的规则是什么?答:①用来标识类名、变量名、、方法名、类型名、数组名、文件名的有效字符序列。②由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字字符,而且关键字不能作为标识符。2.什么叫关键字?请说出5个关键字。答:①Java语言中已经被赋予特定意义的一些单词。②classbreakpublicreturnstaticextends等。3.Java的基本数据类型都是什么?答:boolean(逻辑型)char(字符型)float、double(浮点型)byte、short、int、long(整型)。4.下列哪些语句是错误的:intx=8;byteb=127;b=x;答:b=x语句错误;原因是高级别的变量赋值给低级别的变量时,一定要用显式转换即b=(byte)x;。5.下列程序的输出结果是什么?publicclassE{publicstaticvoidmain(Stringargs[]){long[]a={1,2,3,4};long[]b={100,200,300,400,500};b=a;System.out.println("数组b的长度:"+b.length);System.out.println("b[0]="+b[0]);}}答:数组b的长度:4b[0]=16.上机运行下列程序,注意观察输出结果。publicclassE{publicstaticvoidmain(Stringargs[]){for(inti=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()的区别。publicclassOutputData{publicstaticvoidmain(Stringargs[]){intx=234,y=432;System.out.println(x+"<"+(2*x));System.out.print("我输出结果后不回车");System.out.println("我输出结果后自动回车到下一行");System.out.println("x+y="+(x+y));System.out.println(""+x+y+"=234432");}}答:234<468我输出结果后不回车我输出结果后自动回车到下一行x+y=666234432=2344328.编写一个Java应用程序,输出全部的希腊字母。答:publicclassXLWords{publicstaticvoidmain(Stringargs[]){for(inti=913;i<930;i++){System.out.print((char)i+"");}for(intj=931;j<938;j++){System.out.print((char)j+"");}for(intk=945;k<962;k++){System.out.print((char)k+"");}for(intt=963;t<=969;t++){System.out.print((char)t+"");}}}第3章运算符、表达式和语句1.下列程序的输出结果是什么?publicclassE{publicstaticvoidmain(Stringargs[]){charx='你',y='e',z='吃';if(x>'A'){y='爱';z='情';}elsey='我';z='她';System.out.println(""+x+y+z);}}答:你爱她2.下列程序的输出结果是什么?publicclassE3{publicstaticvoidmain(Stringargs[]){charc='\0';for(inti=1;i<=4;i++){switch(i){case1:c='b';System.out.print(c);case2:c='e';System.out.print(c);break;case3:c='p';System.out.print(c);default:System.out.print("!");}}}}答:beep!!3.编写应用程序,求1!+2!+…+10!。答:classFact{publicstaticvoidmain(Stringargs[]){intfact,sum=0;for(inti=1;i<=10;i++){fact=1;for(intj=1;j<=i;j++)fact*=j;sum+=fact;}System.out.println("1到10的阶乘之和是:"+sum);}}4.编写一个应用程序,求100以内的全部素数。答:classPrimes{publicstaticvoidmain(Stringargs[]){intw=1;for(inti=2;i<=100;i++){for(intj=2;j{w=i%j;if(w==0)break;}if(w!=0)System.out.println(i+"是素数");}}}5.分别用do―while和for循环计算1+1/2!+1/3!+1/4!+…的前20项和。答:①for循环classSum{publicstaticvoidmain(Stringargs[]){intfact;doublesum=0;for(inti=1;i<=20;i++){fact=1;for(intj=1;j<=i;j++)fact*=j;sum+=1.0/fact;}System.out.println(sum);}}②do―while循环classSum{publicstaticvoidmain(Stringargs[]){inti=1;intfact;doublesum=0;do{fact=1;intj=0;while(++j<=i)fact*=j;sum+=1.0/fact;}while(++i<=20);System.out.println(sum);}}6.一个数如果恰好等于它的因子之和,这个数就称为“完数”。编写应用程序,求1000之内的所有完数。答:classWanshu{publicstaticvoidmain(Stringargs[]){intx,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循环classTheSum{publicstaticvoidmain(Stringargs[]){longsum=0,data=8;for(inti=1;i<=10;i++){sum=sum+data;data=data*10+8;}System.out.println(sum);}}②while循环classTheSum{publicstaticvoidmain(Stringargs[]){longsum=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。答:classMaxn{publicstaticvoidmain(Stringargs[]){intk=1,sum=0;while((sum+=k)<8888)k++;k--;System.out.println("最大能取到:"+k);}}第4章类、对象和接口1.类中的实例变量在什么时候会被分配内存空间?答:当该类创建对象之后,实例变量才会被分配相应的内存空间。2.什么叫方法的重载?构造方法可以重载吗?答:①一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同(方法的重载体现了多态性,即功能多态性)。②构造方法可以重载。3.类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?答:①类中的实例方法可以操作类变量。②类方法不可以操作实例变量4.类中的实例方法可以用类名直接调用吗?答:类中的实例方法不可以用类名直接调用。5.举例说明protected方法和友好方法的区别。答:当子类与父类不在同一个包中时,子类可以继承父类的protected方法;而友好方法此时则不能被子类继承。6.举例说明类变量和实例变量的区别。答:⑴书写:定义成员变量时,类变量有static修饰;实例变量没有static修饰。例:classA{intx;//实例变量staticinty;//类变量}⑵内存:不创建对象,类的实例变量不会被分配内存空间;类变量被分配相应的内存空间。不同对象的实例变量被分配不同的内存空间;不同对象的类变量被分配相同的内存空间。任何一个对象改变类变量,其他对象的相应类变量也发生相应变化。一个对象的实例变量发生改变,不影响其他对象的相应实例变量。例:执行语句:A1.x=10;A1.y=20;这时A2.x的值也是10;而A2.y的值保持原来的初值。⑶使用:类变量可以被类方法操作;而实例变量不能被类方法操作。例:classA{intx;staticinty;staticvoidfunc(){b=10;//合法a=20;//非法}}类变量可以通过类名访问;实例变量不能通过类名访问。例:classA{intx;staticinty;}classB{publicvoidfunc();{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.下列程序有什么错误?publicclassTakecare{inta=90;staticfloatb=10.98f;publicstaticvoidmain(Stringargs[]){floatc=a+b;System.out.println("c="+c);}}答:语句floatc=a+b;错误。原因是类方法main操作了实例变量a。13.请写出下列程序的输出结果。classA{publicintf(intx){returnx+1;}}classBextendsA{publicintf(intx){returnx*x;}}publicclassE{publicstaticvoidmain(Stringargs[]){Aa=newB();intm=a.f(10);System.out.println(m);}}答:10014.请写出下列程序的输出结果。classA{intx;publicvoidsetX(intx){this.x=x;}intgetX(){returnx;}}classB{publicvoidf(Aa){a.setX(100);}}publicclassE{publicstaticvoidmain(Stringargs[]){Aa=newA();a.setX(8);System.out.println(a.getX());Bb=newB();b.f(a);System.out.println(a.getX());}}答:810015.使用接口有哪些注意事项?模仿例子4.27,编写一个类实现两个接口的程序。答:①一个类使用接口时,要有implements关键字,当一个类使用多个接口时,接口名要用逗号“,”隔开;使用接口的类除abstract类外,必须实现接口的所有方法,并且实现接口的方法时,方法名字、返回类型、参数个数及类型必须与接口中的完全一致;类在实现接口时,方法体一定要用public修饰,如果接口方法的返回类型不是void型,在类中实现接口时,方法体至少有一个return语句。②interface表面积{doubleallArea(doubler);}interface体积{doublevolu(doubler);}classSphimplements表面积,体积{doublePI=3.14159;publicdoubleallArea(doubler){return4*PI*r*r;}publicdoublevolu(doubler){return4.0/3*PI*r*r*r;}}publicclassTest{publicstaticvoidmain(Stringargs[]){doubler=5.0;Spha=newSph();System.out.println("半径为5的球的表面积是:"+a.allArea(r));System.out.println("半径为5的球的体积是:"+a.volu(r));}}16.编写一个类A,该类创建的对象可以调用方法f输出英文字母表,然后再编写一个该类的子类B,要求子类B必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字母表,而且调用子类新增的方法g输出希腊字母表。答:classA{intm;voidf(){for(m=65;m<91;m++)System.out.print((char)m+"");for(m=97;m<123;m++)System.out.print((char)m+"");System.out.println("");}}classBextendsA{inti;voidg(){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("");}}publicclassTest{publicstaticvoidmain(Stringargs[]){Bb=newB();System.out.println("我调用方法f输出英文字母表:");b.f();System.out.println("我调用方法g输出希腊字母表:");b.g();}}17.编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法publicvoidspeak(intm)throwsMyException,要求参数m的值大于1000时,方法抛出一个MyException对象。最后编写主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。答:classMyExceptionextendsException{Stringstr1;MyException(intm){str1=m+"出现错误可能造成的原因是取值大于1000";}publicvoidshowStr1(){System.out.println(str1);}}classStudent{publicvoidspeak(intm)throwsMyException{if(m>1000){MyExceptionexception=newMyException(m);throwexception;}elseSystem.out.println(m);}}publicclassTest{publicstaticvoidmain(Stringagrs[]){
④将上述编写好的代码命名为Boy.html;并将此文件存放在C:
\5000文件夹以外的任意一个文件夹中(如C:
\1000);
⑤运行Boy.html。
第2章标识符、关键字和数据类型
1.什么叫标识符?
标识符的规则是什么?
①用来标识类名、变量名、、方法名、类型名、数组名、文件名的有效字符序列。
②由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字字符,而且关键字不能作为标识符。
2.什么叫关键字?
请说出5个关键字。
①Java语言中已经被赋予特定意义的一些单词。
②classbreakpublicreturnstaticextends等。
3.Java的基本数据类型都是什么?
boolean(逻辑型)char(字符型)float、double(浮点型)byte、short、int、long(整型)。
4.下列哪些语句是错误的:
intx=8;
byteb=127;
b=x;
答:
b=x语句错误;原因是高级别的变量赋值给低级别的变量时,一定要用显式转换即b=(byte)x;。
5.下列程序的输出结果是什么?
publicclassE
publicstaticvoidmain(Stringargs[])
long[]a={1,2,3,4};
long[]b={100,200,300,400,500};
b=a;
System.out.println("数组b的长度:
"+b.length);
System.out.println("b[0]="+b[0]);
数组b的长度:
4
b[0]=1
6.上机运行下列程序,注意观察输出结果。
for(inti=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()的区别。
publicclassOutputData
intx=234,y=432;
System.out.println(x+"<"+(2*x));
System.out.print("我输出结果后不回车");
System.out.println("我输出结果后自动回车到下一行");
System.out.println("x+y="+(x+y));
System.out.println(""+x+y+"=234432");
234<468
我输出结果后不回车我输出结果后自动回车到下一行
x+y=666
234432=234432
8.编写一个Java应用程序,输出全部的希腊字母。
publicclassXLWords
for(inti=913;i<930;i++)
System.out.print((char)i+"");
for(intj=931;j<938;j++)
System.out.print((char)j+"");
for(intk=945;k<962;k++)
System.out.print((char)k+"");
for(intt=963;t<=969;t++)
System.out.print((char)t+"");
第3章运算符、表达式和语句
1.下列程序的输出结果是什么?
charx='你',y='e',z='吃';
if(x>'A')
y='爱';
z='情';
else
y='我';
z='她';
System.out.println(""+x+y+z);
你爱她
2.下列程序的输出结果是什么?
publicclassE3
charc='\0';
for(inti=1;i<=4;i++)
switch(i)
case1:
c='b';
System.out.print(c);
case2:
c='e';
break;
case3:
c='p';
default:
System.out.print("!
");
beep!
!
3.编写应用程序,求1!
+2!
+…+10!
。
classFact
intfact,sum=0;
for(inti=1;i<=10;i++)
fact=1;
for(intj=1;j<=i;j++)
fact*=j;
sum+=fact;
System.out.println("1到10的阶乘之和是:
"+sum);
4.编写一个应用程序,求100以内的全部素数。
classPrimes
intw=1;
for(inti=2;i<=100;i++)
for(intj=2;j
w=i%j;
if(w==0)
if(w!
=0)
System.out.println(i+"是素数");
5.分别用do―while和for循环计算1+1/2!
+1/3!
+1/4!
+…的前20项和。
①for循环
classSum
intfact;
doublesum=0;
for(inti=1;i<=20;i++)
sum+=1.0/fact;
System.out.println(sum);
②do―while循环
inti=1;
do
intj=0;
while(++j<=i)
while(++i<=20);
6.一个数如果恰好等于它的因子之和,这个数就称为“完数”。
编写应用程序,求1000之内的所有完数。
classWanshu
intx,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循环classTheSum{publicstaticvoidmain(Stringargs[]){longsum=0,data=8;for(inti=1;i<=10;i++){sum=sum+data;data=data*10+8;}System.out.println(sum);}}②while循环classTheSum{publicstaticvoidmain(Stringargs[]){longsum=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。答:classMaxn{publicstaticvoidmain(Stringargs[]){intk=1,sum=0;while((sum+=k)<8888)k++;k--;System.out.println("最大能取到:"+k);}}第4章类、对象和接口1.类中的实例变量在什么时候会被分配内存空间?答:当该类创建对象之后,实例变量才会被分配相应的内存空间。2.什么叫方法的重载?构造方法可以重载吗?答:①一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同(方法的重载体现了多态性,即功能多态性)。②构造方法可以重载。3.类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?答:①类中的实例方法可以操作类变量。②类方法不可以操作实例变量4.类中的实例方法可以用类名直接调用吗?答:类中的实例方法不可以用类名直接调用。5.举例说明protected方法和友好方法的区别。答:当子类与父类不在同一个包中时,子类可以继承父类的protected方法;而友好方法此时则不能被子类继承。6.举例说明类变量和实例变量的区别。答:⑴书写:定义成员变量时,类变量有static修饰;实例变量没有static修饰。例:classA{intx;//实例变量staticinty;//类变量}⑵内存:不创建对象,类的实例变量不会被分配内存空间;类变量被分配相应的内存空间。不同对象的实例变量被分配不同的内存空间;不同对象的类变量被分配相同的内存空间。任何一个对象改变类变量,其他对象的相应类变量也发生相应变化。一个对象的实例变量发生改变,不影响其他对象的相应实例变量。例:执行语句:A1.x=10;A1.y=20;这时A2.x的值也是10;而A2.y的值保持原来的初值。⑶使用:类变量可以被类方法操作;而实例变量不能被类方法操作。例:classA{intx;staticinty;staticvoidfunc(){b=10;//合法a=20;//非法}}类变量可以通过类名访问;实例变量不能通过类名访问。例:classA{intx;staticinty;}classB{publicvoidfunc();{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.下列程序有什么错误?publicclassTakecare{inta=90;staticfloatb=10.98f;publicstaticvoidmain(Stringargs[]){floatc=a+b;System.out.println("c="+c);}}答:语句floatc=a+b;错误。原因是类方法main操作了实例变量a。13.请写出下列程序的输出结果。classA{publicintf(intx){returnx+1;}}classBextendsA{publicintf(intx){returnx*x;}}publicclassE{publicstaticvoidmain(Stringargs[]){Aa=newB();intm=a.f(10);System.out.println(m);}}答:10014.请写出下列程序的输出结果。classA{intx;publicvoidsetX(intx){this.x=x;}intgetX(){returnx;}}classB{publicvoidf(Aa){a.setX(100);}}publicclassE{publicstaticvoidmain(Stringargs[]){Aa=newA();a.setX(8);System.out.println(a.getX());Bb=newB();b.f(a);System.out.println(a.getX());}}答:810015.使用接口有哪些注意事项?模仿例子4.27,编写一个类实现两个接口的程序。答:①一个类使用接口时,要有implements关键字,当一个类使用多个接口时,接口名要用逗号“,”隔开;使用接口的类除abstract类外,必须实现接口的所有方法,并且实现接口的方法时,方法名字、返回类型、参数个数及类型必须与接口中的完全一致;类在实现接口时,方法体一定要用public修饰,如果接口方法的返回类型不是void型,在类中实现接口时,方法体至少有一个return语句。②interface表面积{doubleallArea(doubler);}interface体积{doublevolu(doubler);}classSphimplements表面积,体积{doublePI=3.14159;publicdoubleallArea(doubler){return4*PI*r*r;}publicdoublevolu(doubler){return4.0/3*PI*r*r*r;}}publicclassTest{publicstaticvoidmain(Stringargs[]){doubler=5.0;Spha=newSph();System.out.println("半径为5的球的表面积是:"+a.allArea(r));System.out.println("半径为5的球的体积是:"+a.volu(r));}}16.编写一个类A,该类创建的对象可以调用方法f输出英文字母表,然后再编写一个该类的子类B,要求子类B必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字母表,而且调用子类新增的方法g输出希腊字母表。答:classA{intm;voidf(){for(m=65;m<91;m++)System.out.print((char)m+"");for(m=97;m<123;m++)System.out.print((char)m+"");System.out.println("");}}classBextendsA{inti;voidg(){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("");}}publicclassTest{publicstaticvoidmain(Stringargs[]){Bb=newB();System.out.println("我调用方法f输出英文字母表:");b.f();System.out.println("我调用方法g输出希腊字母表:");b.g();}}17.编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法publicvoidspeak(intm)throwsMyException,要求参数m的值大于1000时,方法抛出一个MyException对象。最后编写主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。答:classMyExceptionextendsException{Stringstr1;MyException(intm){str1=m+"出现错误可能造成的原因是取值大于1000";}publicvoidshowStr1(){System.out.println(str1);}}classStudent{publicvoidspeak(intm)throwsMyException{if(m>1000){MyExceptionexception=newMyException(m);throwexception;}elseSystem.out.println(m);}}publicclassTest{publicstaticvoidmain(Stringagrs[]){
if(x%i==0)
sum+=i;
if(x==sum)
System.out.println(x+"是完数");
7.编写应用程序,分别使用while和for循环计算8+88+888+…前10项之和。
classTheSum
longsum=0,data=8;
sum=sum+data;
data=data*10+8;
②while循环
longsum=0,data=8,i=0;
while(++i<=10)
8.编写应用程序,输出满足1+2+3+…+n<8888的最大正整数n。
classMaxn
intk=1,sum=0;
while((sum+=k)<8888)
k++;
k--;
System.out.println("最大能取到:
"+k);
第4章类、对象和接口
1.类中的实例变量在什么时候会被分配内存空间?
当该类创建对象之后,实例变量才会被分配相应的内存空间。
2.什么叫方法的重载?
构造方法可以重载吗?
①一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同(方法的重载体现了多态性,即功能多态性)。
②构造方法可以重载。
3.类中的实例方法可以操作类变量(static变量)吗?
类方法(static方法)可以操作实例变量吗?
①类中的实例方法可以操作类变量。
②类方法不可以操作实例变量
4.类中的实例方法可以用类名直接调用吗?
类中的实例方法不可以用类名直接调用。
5.举例说明protected方法和友好方法的区别。
当子类与父类不在同一个包中时,子类可以继承父类的protected方法;而友好方法此时则不能被子类继承。
6.举例说明类变量和实例变量的区别。
⑴书写:
定义成员变量时,类变量有static修饰;实例变量没有static修饰。
例:
classA
intx;//实例变量
staticinty;//类变量
⑵内存:
不创建对象,类的实例变量不会被分配内存空间;类变量被分配相应的内存空间。
不同对象的实例变量被分配不同的内存空间;不同对象的类变量被分配相同的内存空间。
任何一个对象改变类变量,其他对象的相应类变量也发生相应变化。
一个对象的实例变量发生改变,不影响其他对象的相应实例变量。
执行语句:
A1.x=10;A1.y=20;
这时A2.x的值也是10;而A2.y的值保持原来的初值。
⑶使用:
类变量可以被类方法操作;而实例变量不能被类方法操作。
例:
intx;
staticinty;
staticvoidfunc()
b=10;//合法
a=20;//非法
类变量可以通过类名访问;实例变量不能通过类名访问。
classB
publicvoidfunc();
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.下列程序有什么错误?
publicclassTakecare
inta=90;
staticfloatb=10.98f;
floatc=a+b;
System.out.println("c="+c);
语句floatc=a+b;错误。
原因是类方法main操作了实例变量a。
13.请写出下列程序的输出结果。
publicintf(intx)
returnx+1;
classBextendsA
returnx*x;
Aa=newB();
intm=a.f(10);
System.out.println(m);
100
14.请写出下列程序的输出结果。
publicvoidsetX(intx)
this.x=x;
intgetX()
returnx;
publicvoidf(Aa)
a.setX(100);
Aa=newA();
a.setX(8);
System.out.println(a.getX());
Bb=newB();
b.f(a);
8
15.使用接口有哪些注意事项?
模仿例子4.27,编写一个类实现两个接口的程序。
①一个类使用接口时,要有implements关键字,当一个类使用多个接口时,接口名要用逗号“,”隔开;使用接口的类除abstract类外,必须实现接口的所有方法,并且实现接口的方法时,方法名字、返回类型、参数个数及类型必须与接口中的完全一致;类在实现接口时,方法体一定要用public修饰,如果接口方法的返回类型不是void型,在类中实现接口时,方法体至少有一个return语句。
②interface表面积
doubleallArea(doubler);
interface体积
doublevolu(doubler);
classSphimplements表面积,体积
doublePI=3.14159;
publicdoubleallArea(doubler)
return4*PI*r*r;
publicdoublevolu(doubler)
return4.0/3*PI*r*r*r;
publicclassTest
doubler=5.0;
Spha=newSph();
System.out.println("半径为5的球的表面积是:
"+a.allArea(r));
System.out.println("半径为5的球的体积是:
"+a.volu(r));
16.编写一个类A,该类创建的对象可以调用方法f输出英文字母表,然后再编写一个该类的子类B,要求子类B必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字母表,而且调用子类新增的方法g输出希腊字母表。
intm;
voidf()
for(m=65;m<91;m++)
System.out.print((char)m+"");
for(m=97;m<123;m++)
System.out.println("");
inti;
voidg()
for(i=913;i<930;i++)
for(i=931;i<938;i++)
for(i=945;i<962;i++)
for(i=963;i<970;i++)
System.out.println("我调用方法f输出英文字母表:
b.f();
System.out.println("我调用方法g输出希腊字母表:
b.g();
17.编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法publicvoidspeak(intm)throwsMyException,要求参数m的值大于1000时,方法抛出一个MyException对象。
最后编写主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。
classMyExceptionextendsException
Stringstr1;
MyException(intm)
str1=m+"出现错误可能造成的原因是取值大于1000";
publicvoidshowStr1()
System.out.println(str1);
classStudent
publicvoidspeak(intm)throwsMyException
if(m>1000)
MyExceptionexception=newMyException(m);
throwexception;
publicstaticvoidmain(Stringagrs[])
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1