java期末练习题和答案.docx
《java期末练习题和答案.docx》由会员分享,可在线阅读,更多相关《java期末练习题和答案.docx(24页珍藏版)》请在冰点文库上搜索。
![java期末练习题和答案.docx](https://file1.bingdoc.com/fileroot1/2023-6/22/a4f92bab-ac6e-4432-bf23-a08f039fa322/a4f92bab-ac6e-4432-bf23-a08f039fa3221.gif)
java期末练习题和答案
2009-2010学年第一学期JAVA期末练习题及参考答案
一、选择题
1、main方法是Java应用程序执行的入口点,以下哪项是main方法头?
(C)
A.publicstaticintmain(String[]arg)
B.publicstaticvoidmain(Stringarg)
C.publicstaticvoidmain(String[]args)
D.publicstaticvoidmain()
2、以下哪个不是Java的关键字?
(D)
A.doB.tryC.finalD.While
3、以下哪项标识符是不合法的。
(D)
A.StringB.$1C.xD.3_a
4、以下哪个修饰符可用于定义成员常量?
(A)
A.finalB.staticC.abstractD.const
5、以下关于构造函数的描述正确的是(D)。
A.构造函数是特殊的方法,返回类型只能为void
B.可以定义多个构造函数,但每个方法名需各不相同
C.在类定义中必须定义构造函数,而且只能定义一个构造函数
D.构造方法与类同名,在创建新对象时系统会自动调用构造函数
6、关于类的继承以下说法错误的是(D)。
A.在java中类只允许单一继承
B.在java中一个类可实现多个接口
C.在java中一个类可以同时继承一个类和实现一个接口
D.java允许多重继承
7、设有下面两个类的定义:
classPerson{
classStudentextendsPerson{
longid;//身份证号
intscore;//入学总分
Stringname;//姓名
intgetScore(){returnscore;}
}
}
则类Person和类Student的关系是(B)。
A、包含关系B、继承关系C、关联关系D、上述类定义有语法错误
8、关于修饰符static以下叙述错误的是(B)。
A.static方法不可被覆盖
B.static可以用来修饰类
C.static方法不可以直接访问非静态的方法,否则编译出错
D.static方法只能访问类变量或方法参数,不可直接访问成员变量
9、关于Java的修饰符,以下说法错误的是(B)。
A.抽象类中的方法不一定都是抽象方法
B.final类中的属性和方法都必须被final修饰符修饰
C.类及其属性、方法可以同时有一个以上的修饰符来修饰
D.要使类中某个成员变量只能被它自身访问到,该变量只能用private修饰
10、给出如下代码:
class Test{
//定义成员a
public static void fun() {
// some code...
}
}
要在函数fun()中直接访问a,以下成员变量a定义正确的是(B)。
A.public int a;B.static int a; C.int a;D.protected int a;
11、有以下程序片段,下列哪个选项不能插入到行1。
(A)
1.
2.publicclassA{
3.//dosth
4.}
A、publicclassMainClass{}B、packagemine;
C、classANotherClass{}D、importjava.util.*;
12、在使用interface声明一个接口时,只可以使用(D)修饰符修饰该接口。
A、privateB、protectedC、privateprotectedD、public
13、关于以下application的说明,正确的是(C)。
1.classStaticStuff
2.{
3.staticintx;
4.static{x+=5;}
5.publicstaticvoidmain(Stringargs[])
6.{
7.System.out.println(“x=”+x);
8.}
9.static{x/=5;}
10.}
A、4行与9行不能通过编译,因为缺少方法名和返回类型
B、9行不能通过编译,因为只能有一个静态初始化器
C、编译通过,执行结果为:
x=1
D、能通过编译,但程序运行结果不可预知,因为变量x没有初始化
14、有程序如下,关于程序的描述哪个是正确的?
(C)
publicclassPerson{
staticintarr[]=newint[5];
publicstaticvoidmain(Stringa[])
{ System.out.println(arr[0]); }
}
A、编译将产生错误B、编译时正确,但运行时将产生错误C、正确,输出0D、正确,输出 null
15、Java的字符类型采用的是Unicode编码方案,每个Unicode码占用(B)个比特位。
A、8B、16C、32D、64
16、在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。
这种面向对象程序的特性称为(C)。
A、隐藏B、覆盖C、重载D、Java不支持此特性
17、以下哪个接口的定义是正确的?
(D)
A、interfaceB
{voidprint(){};}
B、abstractinterfaceB
{voidprint();}
C、abstractinterfaceBextendsA1,A2//A1、A2为已定义的接口
{abstractvoidprint(){};}
D、interfaceB
{voidprint();}
18、下面哪个函数是public void aMethod(){...}的重载函数?
(D)
A、void aMethod( ){...}
B、public int aMethod(){...}
C、public void aMethod(){...}
D、public int aMethod ( int m){...}
19、A派生出子类B ,B派生出子类C,并且在Java源代码中有如下声明:
1.Aa0=newA();
2.A a1=newB();
3.Aa2=newC();
问以下哪个说法是正确的?
(D)
A、只有第1行能通过编译
B、第1、2行能通过编译,但第3行编译出错
C、第1、2、3行能通过编译,但第2、3行运行时出错
D、第1行、第2行和第3行的声明都是正确的
20、假设A类有如下定义,设a是A类的一个实例,下列语句调用哪个是错误的?
(C)
classA
{inti;
staticStrings;
voidmethod1(){}
staticvoidmethod2(){}
}
A、System.out.println(a.i);B、a.method1();C、A.method1();D、A.method2()
21、将以下哪个方法的定义插入第6行后,会引发编译错误?
(A)
1.classSuper{
2.publicvoida(){}
3.}
4.
5.publicclassSubextendsSuper{
6.
7.}
A.floata(){return1;}
B.publicvoida(intx){}
C.publicvoida(floatf){}
D.publicfloata(intx){return(float)x;}
22、以下方法的返回类型是(D)。
ReturnTypefunction(intx,doubley)
{
returnx+y/2;
}
A.byteB.shortC.floatD.double
二、程序阅读
1、写出以下程序的运行结果。
publicclassTest_2
{
publicstaticvoidmain(String[]args)
{System.out.println(fun(3,4,5));}
staticintfun(intx,inty,intz)
{returnfun(x,fun(y,z));}
staticintfun(intx,inty)
{returnx*y;}
}
60
2、写出以下程序的运行结果。
classOverloadDemo{
voidtestOverload(inti){
System.out.println("integer");
}
voidtestOverload(Strings){
System.out.println("String");
}
publicstaticvoidmain(Stringargs[]){
OverloadDemoa=newOverloadDemo();
charch=’k’;
a.testOverload(ch);
}
}
integer
3、写出以下程序的运行结果。
classStaticStuff
{
staticintx;
static{x+=7;}
publicstaticvoidmain(Stringargs[]){
System.out.println("x="+x);
}
static{x%=4;}
}
x=3
4、写出以下程序的运行结果。
publicclassTest_3
{
staticintx;
publicTest_3(){
x++;}
publicstaticvoidmain(String[]args){
Test_3s1=newTest_3();
System.out.print(s1.x+",");
s1=newTest_3();
System.out.println(s1.x+",");
s1=newTest_3();
System.out.println(s1.x);
}
static{x=1;}
}
2,3,4
5、写出以下程序的运行结果。
publicclassTest_3
{
publicstaticvoidmain(String[]args)
{System.out.println(doSth(1,2,3));}
staticintdoSth(intx,inty,intz)
{returndoSth(x,doSth(y,z));}
staticintdoSth(intx,inty)
{returnx>y?
x:
y;}
}
3
6、阅读以下程序,输出结果为1.23。
classQ1{
publicstaticvoidmain(Stringargs[]){
doubled=1.23;
Decdec=newDec();
dec.decrement(d);
System.out.println(d);
}
classsDec{
publicvoiddecrement(doubledecMe){
decMe=decMe-0.1;
}
}
7、以下程序段的输出结果为1234589。
publicclassC
{publicstaticvoidmain(Stringargs[]){
inti,j;
inta[]={2,1,4,8,9,5,3};
for(i=0;iintk=i;
for(j=i;jif(a[j]inttemp=a[i];
a[i]=a[k];
a[k]=temp;}
for(i=0;iSystem.out.print(a[i]+"");
System.out.println();}
}
8、写出以下程序的功能。
将数组元素从大到小排序并显示到屏幕上
publicclassABC
{
publicstaticvoidmain(Stringargs[]){
inti,j;
inta[]={9,7,5,1,3};
for(i=0;iintk=i;
for(j=i;jif(a[j]>a[k])k=j;
inttemp=a[i];
a[i]=a[k];
a[k]=temp;}
for(i=0;iSystem.out.print(a[i]+"");
System.out.println();
}
}
9、以下程序段的输出结果为MessageFour。
intx=0,y=4,z=5;
if(x>2){
if(y<5){
System.out.println(“Messageone”);
}
else{
System.out.println(“Messagetwo”);
}
}
elseif(z>5){
System.out.println(“Messagethree”);
}
else{
System.out.println(“Messagefour”);
}
10、以下程序段的输出结果为Valueistwo.Valueisthree。
intj=2;
switch(j){
case2:
System.out.print(“Valueistwo.”);
case2+1:
System.out.println(“Valueisthree.”);
break;
default:
System.out.println(“valueis“+j);
break;
}
11、阅读以下程序段:
classParent
{
voidprintMe()
{
System.out.println(“parent”);
}
}
classChildextendsParent
{
voidprintMe()
{
System.out.println(“child”);
}
voidprintAll()
{
super.printMe();
this.printMe();
printMe();
}
}
publicclassTest_this
{
publicstaticvoidmain(Stringargs[])
{
ChildmyC=newChild();
myC.printAll();
}
}
输出结果为:
parent
child
child
12、已有Bird类的定义如下:
packageabcde;
publicclassBird{
protectedstaticintreferenceCount=0;
publicBird(){referenceCount++;}
protectedvoidfly(){}
staticintgetReCount(){returnreferenceCount;}
}
有类Nightingale的定义如下,请写出它的输出结果Before:
0After:
2。
packagesingers;
classNightingaleextendsabcde.Bird{
Nightingale(){referenceCount++;}
publicstaticvoidmain(Stringargs[]){
System.out.print(“Before:
”+referenceCount);
Nightingaleflorence=newNightingale();
System.out.println(“After:
”+referenceCount);
florence.fly();
}
}
四、编程题
1.编写一个完整的JavaApplication程序,包括:
①复数类Complex②主类Test,将每组测试数据相加并显示结果,三组测试的复数为:
1+2i和1-2i、1+2i和3+4i、1+2i和-1+2i。
其中,复数类Complex必须满足如下要求:
(1)复数类Complex的属性
realPart:
int型,代表复数的实部。
imaginPart:
int型,代表复数的虚部。
(2)复数类Complex的方法
Complex():
构造函数,将复数的实部和虚部都置0。
Complex(intr,inti):
构造函数,将复数的实部初始化为r,将虚部初始化为i。
ComplexcomplexAdd(Complexa):
将当前复数对象与形参复数对象a相加,所得的结果仍是一个复数对象,返回给此方法的调用者。
publicStringtoString():
把当前复数对象的实部a、虚部b组合成“a+bi”的字符串形式;若实部为0,虚部不为0,则返回”bi”;若虚部为0,则返回”a”。
(注:
程序框架和部分源码已给出,请补充完整)
importjava.io.*;
publicclassTest
{
publicstaticvoidmain(Stringargs[])
{Complexa,b;
a=newComplex(1,2);
b=newComplex(1,-2);
System.out.println((a.addComplex(b)).toString());
b=newComplex(3,4);
System.out.println((a.addComplex(b)).toString());
b=newComplex(-1,2);
System.out.println((a.addComplex(b)).toString());
}
}
classComplex
{
//添加属性定义
intrealPart;
intimaginPart;
//添加构造方法Complex()
publicComplex(){
realPart=0;
imaginPart=0;
}
//添加构造方法Complex(intr,inti)
publicComplex(intr,inti){
realPart=r;
imaginPart=i;
}
//添加复数相加方法addComplex
publicComplexaddComplex(Complexa)
{
Complexb=newComplex();
b.realPart=a.realPart+this.realPart;
b.imaginPart=a.imaginPart+this.imaginPart;
returnb;
}
//添加toString方法
publicStringtoString()
{Stringslt="";
if(this.realPart!
=0)
{
if(this.imaginPart>0)
slt=String.valueOf(this.realPart)+"+";
else
slt=String.valueOf(this.realPart);
}
if(this.imaginPart!
=0)
slt=slt+String.valueOf(this.imaginPart)+"i";
returnslt;
}
}
2.编写一个完整的JavaApplication程序。
包含类Circle,类Cylinder,类Test,具体要求如下:
⑴类Circle
1属性
radius:
double型,表示圆的半径。
2方法
Cirle(doubler):
构造函数,将半径初始化为r。
doublefindArea():
返回圆的面积。
doublegetRadius():
返回圆的半径。
⑵类Cylinder
继承Circle类,并有以下属性和方法:
1属性
length:
double型,表示圆柱体的高。
2方法
Cylinder(doubler,doublel):
构造函数,给圆柱体的半径和高赋初值。
doublefindVolume():
返回圆柱体的体积。
toString():
返回圆柱体的半径、高、体积等信息。
⑶主类Test
1生成Cylinder对象。
②调用对象的toString方法,输出对象的描述信息。
(注:
程序框架和部分源码已给出,请补充完整)
importjava.io.*;
publicclassTest//主类定义已给出
{
publicstaticvoidmain(Stringargs[])
{
Cylinderc=newCylinder(2,5);
System.out.println(c.toString());
}
}
classCircle//类Circle定义,请填写完整
{
finalfloatPI=3.14159f;
//添加属性radius
doubleradius;
//添加