java语言程序设计作业答案Word格式.docx
《java语言程序设计作业答案Word格式.docx》由会员分享,可在线阅读,更多相关《java语言程序设计作业答案Word格式.docx(139页珍藏版)》请在冰点文库上搜索。
public,private,protected这个三个限定符不是必须写的。
如果不写,则表明是“friendly”,相应的成分可以被所在保重的各类访问。
8简述构造方法的特点?
构造方法主要有以下特点:
(1)构造方法的方法名与类名相同;
(2)构造方法没有返回类型(修饰符void也不能有);
(3)构造方法通常被声明为公有的(public);
(4)构造方法可以有任意多个参数;
(5)构造方法的主要作用是完成对象的初始化工作;
(6)构造方法不能在程序中显式的调用;
(7)在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象初始化。
9如果在类声明中声明了构造方法,系统是否还提供默认的构造方法?
用户在进行类声明时,如果没有声明任何构造方法,系统会赋给此类一个默认(无参)的构造方法。
但是,只要用户声明了构造方法,即使没有声明无参的构造方法,系统也不会再赋默认的构造方法。
11:
声明并测试一个复数类,其方法包括toString()及复数的加、减、乘运算。
publicclassComplex
{
privatefloata;
privatefloatb;
publicStringtoString()
{if(a!
=0)
return(a+"
i"
+"
+b);
elsereturn("
"
}
publicComplex(floata,floatb)
this.a=a;
this.b=b;
publicvoidAdd(Complexp)
this.a+=p.a;
this.b+=p.b;
publicvoidDecrease(Complexp)
this.a-=p.a;
this.b-=p.b;
publicvoidMultiply(Complexp)
this.a=this.a*p.a;
this.b=this.b*p.b;
publicclassComplexTexter
publicstaticvoidmain(Stringargs[])
Complexa=newComplex(2,4);
Complexb=newComplex(5,8);
a.Add(b);
System.out.println(a.toString()+"
\n"
);
a.Decrease(b);
a.Multiply(b);
、
12:
什么是UML?
它由哪几部分组成?
UML是图形化()即可视化的建模语言,成为面向对象建模的标准语言。
它由四部分组成:
(1)视图
(2)图(3)模型元素(4)通用机制
13.常用的类与类之间的关系有哪几种。
有关联、依赖、流、泛化、实现、使用。
第三章课后习题答案
1.设N为自然数:
n!
=1*2*3*….*n
称为n的阶乘,并且规定0!
=1.试编程计算2!
4!
6!
he10!
.并将结果输出到屏幕上。
publicclassMul
inti,n;
floats;
for(n=0;
n<
=10;
n=n+2)
if(n==0)
System.out.println("
0!
=1\n"
else
{s=1;
for(i=1;
i<
=n;
i++)
s=s*i;
System.out.println(n+"
!
="
+s+"
2.编写程序,接收用户从键键盘上输入的三个整数x,y,z..从中选出最大和最小者,并编程实现。
publicclassMath{
publicstaticvoidmain(Stringargs[]){
int[]IntArg=newint[args.length];
for(inti=0;
args.length;
i++){
IntArg[i]=Integer.parseInt(args[i]);
intmax,min;
max=IntArg[0]>
IntArg[1]?
IntArg[0]:
IntArg[1];
max=max>
IntArg[2]?
max:
IntArg[2];
min=IntArg[0]<
min=min<
min:
max="
+max);
min="
+min);
3.求出100一枚的宿舍,并将这些数在屏幕上5个乙杭地显示出来。
publicclassSu{
intn,i,k=0,y;
for(n=2;
=100;
n++){
y=1;
for(i=2;
n;
if(n%i==0)
{y=0;
break;
if(y==1){
k++;
System.out.print(n+"
"
if(k%5==0)
System.out.print("
4.使用java.lang.Math类,生成100个0---99之间的随机整数,找出他们之中的最大值和最小值,并统计大于50的整数个数。
publicclassRandom{
publicstaticvoidmain(String[]args)
{
intMinNum,MaxNum,n=0;
int[]array=newint[100];
array[0]=(int)(Math.random()*100);
MinNum=array[0];
MaxNum=array[0];
System.out.println("
数列为:
System.out.print(array[0]+"
for(inti=0;
100;
{
array[i]=(int)(Math.random()*100);
if(array[i]>
50)
n++;
=MaxNum)
MaxNum=array[i];
if(array[i]<
=MinNum)
MinNum=array[i];
System.out.print(array[i]+"
}
System.out.println();
MinNum="
+MinNum);
MaxNum="
+MaxNum);
大于50的整数个数有:
+n);
7.什么是异常?
解释抛出、捕获的含义。
异常又称为例外,是特殊的运行错误对象,在程序中可以强制编译器来处理程序运行中的发生的并非由程序本身所造成的错误;
抛出异常:
把生成异常对象并提交的过程称为抛出异常;
抛出异常是java中一个程序处理动作,检查异常时要么在方法中声明一个异常抛出,用try-catch语句捕获异常,并进行处理。
8.简述Java的异常处理机制。
java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。
每当java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。
一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。
9.系统定义的异常与用户自定义的异常有何不同?
如何使用这两类异常?
系统定义的特定情况出现的问题,而此时用来对可能遇到的问题进行处理。
用户定义的是自己觉得可能会出现问题时,需要处理的。
这样避免程序中断或是出现未知错误。
系统异常有两种一种是运行时异常,一种是普通异常,普通异常要求用户捕获或者抛出的,不补货或者抛出就会编译不通过。
运行时异常编译可以通过,但是运行时才显露出来。
10.用户如何自定义异常?
编程实现一个用户自定义异常。
(1)定义mytest
importjava.io.*;
publicclassmytest{
privatestaticintquotient(intnumber,intdenominator)throws
DivideByZeroException{
if(denominator==0)
thrownewDivideByZeroException();
return(number/denominator);
intnumber1=0,number2=0,result=0;
try{
输入第一个数字:
number1=Integer.valueOf(Keyboard.getString()).intValue();
输入第二个数字:
number2=Integer.valueOf(Keyboard.getString()).intValue();
result=quotient(number1,number2);
catch(NumberFormatExceptione){
System.out.println(e.toString());
System.exit(-1);
System.out.println(number1+"
/"
+number2+"
+result);
(2)定义DivideByZeroException
publicclassDivideByZeroExceptionextendsArithmeticException{
publicDivideByZeroException(){
super("
除数不能为0!
(3)定义Keyboard
publicclassKeyboard{
staticBufferedReaderinputStream=newBufferedReader(newInputStreamReader(System.in));
publicstaticintgetInteger(){
try{
return(Integer.valueOf(inputStream.readLine().trim()).intValue());
}catch(Exceptione){
e.printStackTrace();
return0;
publicstaticStringgetString(){
return(inputStream.readLine());
}catch(IOExceptione){return"
0"
;
Java语言程序设计
第四章课后习题答案
1.子类将继承父类所有的属性和方法吗?
为什么?
不,子类不能直接访问从父类中继承的私有属性及方法,但可以对公有及保护方法进行访问。
2.方法的覆盖与方法的重载有何不同?
覆盖是运用在子类中实现与父类相同的功能,但采用不同的算法或公式;
在名字相同的方法中,要做比父类更多的事情;
在子类中需要取消从父类继承的方法。
8.什么是抽象类?
抽象类中是否一定要包括抽象方法?
抽象类是一个不完全的类,不能使用new方法进行实例化。
抽象类可以包含抽象方法,也可以不包含抽象方法,但有抽象方法的必须是抽象类。
9.this和super分别有哪些特殊含义?
都有哪些种用法?
this表示当前类;
super表示调用父类。
在定义类的时候用到,this是当前对象的引用,super是当前对象的父类对象的引用,一般的都是把super用在构造函数中。
10.完成下面父类及子类的声明:
(1)声明Student类属性包括学号、姓名、英语成绩、数学成绩、计算机成绩和总成绩。
方法包括构造方法、get方法、set方法、toString方法、equals方法、compare方法(比较两个学生的总成绩,结果分为大于、小于、等于),sum方法(计算总成绩)和testScore方法(计算评测成绩)。
注:
评测成绩可以取三门课成绩的平均分,另外任何一门课的成绩的改变都需要对总成绩进行重新计算,因此,在每一个set方法中应调用sum方法计算总成绩。
publicclassStudent{
Stringid;
Stringname;
floatscoreOfenglish;
floatscoreOfmath;
floatscoreOfcomputer;
floatscoreOfsum;
//构造方法
publicStudent(){
publicStudent(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer){
this.id=aid;
this.name=aname;
this.scoreOfenglish=ascoreOfenglish;
this.scoreOfmath=ascoreOfmath;
this.scoreOfcomputer=ascoreOfcomputer;
//this.scoreOfsum=ascoreOfenglish+ascoreOfmath+ascoreOfcomputer;
this.scoreOfsum=sum();
//sum方法
publicfloatsum(){
return(this.scoreOfenglish+this.scoreOfmath+this.scoreOfcomputer);
//testScore测评成绩/平均分
publicfloattestScore(){
return(this.scoreOfsum/3);
//6个get方法
publicStringgetid(){
return(id);
publicStringgetname(){
return(name);
publicfloatgetscoreOfenglish(){
return(scoreOfenglish);
publicfloatgetscoreOfmath(){
return(scoreOfmath);
publicfloatgetscoreOfcomputer(){
return(scoreOfcomputer);
publicfloatgetscoreOfsum(){
return(scoreOfsum);
//5个set方法
publicvoidsetid(Stringnewid){
this.id=newid;
publicvoidsetname(Stringnewname){
this.name=newname;
publicvoidsetscoreOfenglish(floatnewscoreOfenglish){
this.scoreOfenglish=newscoreOfenglish;
publicvoidsetscoreOfmath(floatnewscoreOfmath){
this.scoreOfmath=newscoreOfmath;
publicvoidsetscoreOfcomputer(floatnewscoreOfcomputer){
this.scoreOfcomputer=newscoreOfcomputer;
//toString方法
publicStringtoString(){
return("
学号:
+this.id+"
\n姓名:
+name+"
\n英语:
+this.scoreOfenglish+"
\n数学:
+this.scoreOfmath+"
\n计算机:
+this.scoreOfcomputer+"
\n总分:
+this.scoreOfsum);
//compare方法/比较2学生总分
publicvoidcompare(Studentx){
if(this.getscoreOfsum()>
x.getscoreOfsum())System.out.println(this.getname()+"
总分大于"
+x.getname());
if(this.getscoreOfsum()<
总分小于"
elseSystem.out.println(this.getname()+"
总分等于"
//equals方法/比较2学生学号是否相等(还没完善)
/*
*publicbooleanequals(Objectx){
if(this.getClass()!
=x.getClass())returnfalse;
Studentb=(Student)x;
if(this.id==b.getid())returntrue;
*/
(2)声明StudentXW(学习委员)类为Student类的子类。
在StudentXW类中增加责任属性,并重写testScore方法(评测成绩=三门课平均分+3)
publicclassStudentXWextendsStudent{
Stringresponsibility;
publicStudentXW(){
super();
//responsibility="
publicStudentXW(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility){
super(aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer);
responsibility=aresponsibility;
return(this.scoreOfsum/3+3);
+this.scoreOfsum+"
\n职位:
+this.responsibility);
(3)声明StudentBZ类为Student类的子类
在StudentBZ类中增加责任属性,并重写testScore方法(评测成绩=三门课平均分+5)
publicclassStudentBZextendsStudent{
publicStudentBZ(){
publicStudentBZ(Stringaid,Stringaname,float