JAVA期末考试复习试题.docx
《JAVA期末考试复习试题.docx》由会员分享,可在线阅读,更多相关《JAVA期末考试复习试题.docx(34页珍藏版)》请在冰豆网上搜索。
JAVA期末考试复习试题
JAVA期末考试复习试题
一.判断题
1.Java的源代码中定义几个类,编译结果就生成几个以.class为后缀的字节码文件。
(√)
2.Java程序里,创建新的类对象用关键字new,回收无用的类对象使用关键字free。
(×)
分析:
java中没有回收(FREE)内存的功能,它会自动回收的,只要把对象close掉就等着回收就行了.
由于对象是使用new运算符动态分配的,java方法是自动为你的处理存储单元重新分配问题。
完成这项工作的技术被称为无用单元收集(garbagecollection)。
它的工作原理:
当不存在对一个对象的引用时,我们就假定不再需要那个对象了,那个对象所占有的存储单元可以被收回。
在java中并不像在C++中一样需要明确地销毁对象。
无用单元收集仅在偶尔执行程序时出现。
它不会出现,是因为存在一个或多个不再使用的对象。
还有,不同的Java运行时实现将会使用不同的无用单元收集方法,但是在大多数情况下,在编程时不必考虑它。
如果一个对象正在持有某些非Java资源,如文件处理或窗口字符字体,那么Java提供了一种称为结束(finalization)的机制。
3.Java有垃圾回收机制,内存回收程序可在指定的时间释放内存对象。
(×)
分析:
不对,JAVA虽然有垃圾回收机制,但是不能在指定的时间释放内存对象,只能在程序运行期间,当虚拟机空闲的时候回收。
4.构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为void。
(×)
分析:
无返回类型
5.在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在后面,子类放在前面。
(√)
分析:
个人觉得原因是子类更加具体一些,可以更好得描述这个异常,所以会把子类写在前面,如果把父类写在前面,那么这个父类就会接受很多的异常了,后面的子类就接收不到了
6.拥有abstract方法的类是抽象类,但抽象类中可以没有abstract方法。
(√)
7.Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点。
(×)
分析:
左上角被确定为坐标的起点
8.静态初始化器是在其所属的类加载内存时由系统自动调用执行。
(√)
9.在Java中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋值对象相同的新对象。
(×)
分析:
并不是生成一个新对象,只是引用相同而已,真正的对象的空间是一样的.
二.单项选择题
1.Javaapplication中的主类需包含main方法,以下哪项是main方法的正确形参?
()
A、StringargsB、Stringar[]C、CharargD、StringBufferargs[]
分析:
比较常见的是String[]args,但是Stringargs[]也是可以的,ar和args并没有什么区别.
2.以下关于继承的叙述正确的是()。
A、在Java中类只允许单一继承
B、在Java中一个类只能实现一个接口
C、在Java中一个类不能同时继承一个类和实现一个接口
D、在Java中接口只允许单一继承
3.paint()方法使用哪种类型的参数?
()
A、GraphicsB、Graphics2DC、StringD、Color
分析:
这是GUI里面的,不考.
4.以下哪个不是Java的原始数据类型()
A、intB、BooleanC、floatD、char
分析:
java有八种基本数据类型,int4个字节short2个字节long8个字节byte2个字节float4个字节double8个字节字符类型布尔类型。
对应这八种基本数据类型有八个封装类,封装类是继承自Object的Java类。
而基本数据类型所描述的含义与C等相同。
5.以下哪项可能包含菜单条()。
A、PanelB、FrameC、AppletD、Dialog
分析:
这是GUI里面的,不考.
6.若需要定义一个类域或类方法,应使用哪种修饰符?
()
A、staticB、packageC、privateD、public
7.在浏览器中执行applet程序,以下选项中的哪个方法将被最先执行()。
A、init()B、start()C、destroy()D、stop()
分析:
这是applet里面的,不考.
8.给出下面代码,关于该程序以下哪个说法是正确的?
()
publicclassPerson{
staticintarr[]=newint[5];
publicstaticvoidmain(Stringa[])
{
System.out.println(arr[0]); }
}
A、编译时将产生错误B、编译时正确,运行时将产生错误
C、输出零D、输出空
分析:
静态方法中调用静态变量是可以的,但是没有输入,所以会输出默认值0,
9.下列哪些语句关于Java内存回收的说明是正确的?
()
A、程序员必须创建一个线程来释放内存
B、内存回收程序负责释放无用内存
C、内存回收程序允许程序员直接释放内存
D、内存回收程序可以在指定的时间释放内存对象
10.以下哪个关键字可以用来对对象加互斥锁?
()
A、transientB、synchronizedC、serializeD、static
11.以下代码段执行后的输出结果为()
intx=-3;
inty=-10;
System.out.println(y%x);
A、-1B、2C、1D、3
12.有以下程序片段,下列哪个选项不能插入到行1。
()
1.
2.publicclassInteresting{
3.//dosth
4.}
A、importjava.awt.*;B、packagemypackage;
C、classOtherClass{}D、publicclassMyClass{}
分析:
报ThepublictypeMyClassmustbedefinedinitsownfile,MyClass要建在另一java文件中,一个java文件只允许有一个public(公有)的类,但如果把public去掉也是行的,一个java文件允许有多个空缺(友好)的类
13.设有下面两个赋值语句:
a=Integer.parseInt(“12”);
b=Integer.valueOf(“12”).intValue();
下述说法正确的是()。
A、a是整数类型变量,b是整数类对象。
B、a是整数类对象,b是整数类型变量。
C、a和b都是整数类对象并且值相等。
D、a和b都是整数类型变量并且值相等。
分析:
Integer.parseInt()是把一个字符串转换成int类型的变,这里就是把字符串类型的12装换成int类型的12;
staticvalueOf(inti)返回一个表示指定的int值的Integer实例。
先把int转换成Integer类型,再执行intValue();
intintValue()以int类型返回该Integer的值。
又装换成了一个int类型的12.
14.FilterOutputStream是BufferedOutputStream、DataOutputStream及PrintStream的父类,以下哪个类可能是FilterOutputStream构造函数的参数类型?
A、OutputStreamB、File
C、InputStreamD、BufferedOutputStream
分析:
理论上多层继承的类的构造方法一般选择最上层(最原始)的类.但是我查了API好像有点问题FilterOutputStream只有带File参数的构造方法.
15.在编写JavaApplet程序时,需在程序的开头写上()语句。
A、importjava.awt.*;B、importjava.applet.Applet;
C、importjava.io.*;D、importjava.awt.Graphics;
16.类Parent、Child定义如下:
1.publicclassParent
2.{publicfloataFun(floata,floatb)throws
3.IOException{}
4.}
5.publicclassChildextendsParent{
6.
7.}
将以下哪种方法插入行6是不合法的。
()
A、floataFun(floata,floatb){}
B、publicintaFun(inta,intb)throwsException{}
C、publicfloataFun(floatp,floatq){}
D、publicintaFun(inta,intb)throwsIOException{}
分析:
测试A:
报错:
Multiplemarkersatthisline
-Cannotreducethevisibilityoftheinheritedmethod
fromParent
意识就是不能减小继承后重写的方法的访问权限
修改办法就是在float前面加上public
17.在使用interface声明一个接口时,只可以使用()修饰符修饰该接口。
A、privateB、protectedC、privateprotectedD、public
18、有以下方法的定义,请选择该方法的返回类型()。
ReturnTypemethod(bytex,doubley)
{
return(short)x/y*2;
}
A、byteB、shortC、intD、double
分析:
注意,(short)x/y*2;这个short只是作用于x若要选B,修改办法是return(short)(x/y*2);
19、关于以下代码段的说法正确的是()
1.Strings="abcde";
2.StringBuffers1=newStringBuffer("abcde");
3.if(s.equals(s1))
4.s1=null;
5.if(s1.equals(s))
6.s=null;
A、第1行编译错误,String的构造器必须明确调用
B、第3行编译错误,因为s与s1有不同的类型
C、编译成功,但执行时在第5行有异常抛出
D、编译成功,过程中也没有异常抛出
分析:
s1.equals(s)只是比较两个对象中的字符是否相等,与对象类型无关
publicbooleanequals(ObjectanObject)
将此字符串与指定的对象比较。
当且仅当该参数不为null,并且是与此对象表示相同字符序列的String对象时,结果才为true。
20、编译并运行以下程序,以下描述哪个选项是正确的()
1.classX{
2.protectiedStringtoString()i{
3.returnsuper.toString();}
4.}
A、编译通过运行无异常B、编译通过但运行时出错
C、行2出错,不能成功编译D、不能成功编译,行3出错
分析:
protectiedStringtoString()i{这里多了个i
三.程序阅读题
1.以下程序的输出结果为相等。
classStringTest1
{
publicstaticvoidmain(String[]args)
{
Strings1="hello";
Strings2=newString("hello");
if(s1.equals(s2)){
System.out.println("相等");
}else{
System.out.println("不相等");
}
}
}
分析:
s1.equals(s)只是比较两个对象中的字符是否相等,与对象类型无关
publicbooleanequals(ObjectanObject)
将此字符串与指定的对象比较。
当且仅当该参数不为null,并且是与此对象表示相同字符序列的String对象时,结果才为true。
Strings1="hello";
这个只是一个引用,内存中如果有“hello"的话,s1就指向它,如果没有才创建
如果你以后还用到"a"这个字符串的话并且是这样用:
Strings1="hello";
Strings3="hello";
Strings4="hello";
这3个变量都共享一个字符串"hello"
而Strings2=newString("hello");
是根据"hello"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给s2
2.以下程序段的输出结果为56789。
publicclassTestArray
{
publicstaticvoidmain(Stringargs[]){
inti,j;
inta[]={5,9,6,8,7};
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();
}
}
分析:
就是一份冒泡排序
3.写出以下程序的功能。
importjava.io.*;
publicclassTestFile
{
publicstaticvoidmain(Stringargs[])throwsException
{
BufferedReaderbr=newBufferedReader(
newInputStreamReader(System.in));
BufferedWriterbw=newBufferedWriter(newFileWriter(“input.txt"));
Strings;
while(true)
{
System.out.print("请输入一个字符串:
");
System.out.flush();
s=br.readLine();
if(s.length()==0)break;
bw.write(s);
bw.newLine();
}
bw.close();
}
}
功能:
从键盘逐一输入字符串,逐一输出至input.txt文件中,直至输入空行。
分析:
和老师所说的功能比较接近,改改记记
4.阅读以下程序,写出输出结果。
classAnimal{
Animal(){
System.out.print("Animal");}
}
public
classDogextendsAnimal{
Dog(){
System.out.print("Dog");}
publicstaticvoidmain(String[]args){
Dogsnoppy=newDog();}
}
输出结果:
AnimalDog
分析:
在Java中,无论是explicit还是implicit方式,都要求在子类的构造方法中调用其父类的构造方法。
如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法中会自动进行调用;如果父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句中进行调用。
究其原因,想必是Java语言设计者,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。
试想,如果没有这个约束,那么子类的某个继承自父类的方法可能会使用到父类中的一些变量,而这些变量并没有进行初始化,从而产生一些难以预料的后果。
也因此,当一个类的构造方法是private时,它是不可被extends的,因为子类构造方法难以调用到这个父类的构造方法。
一、单选题
1、下列程序段执行后的结果是()。
Strings=newString("abcdefg");
for(inti=0;iSystem.out.print(s.charAt(i));
}
A)acegB)ACEGC)abcdefgD)abcd
2、有整型数组:
int[]x={12,35,8,7,2};,则调用方法Arrays.sort(x)后,数组x中的元素值依次是().
A)2781235B)1235872
C)3512872D)8712352
分析:
publicstaticvoidsort(int[]a)
对指定的int型数组按数字升序进行排序。
3、下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt。
File构造函数中正确的路径和文件名的表示是()。
Filef=newFile(填代码处);
file=newFileReader(f);
in=newBufferedReader(file);
A)"./1.txt"B)"../my/1.txt"C)"c:
\\my\\1.txt"D)"c:
\my\1.txt"
分析:
也可以是c:
/my/1.txt;
c:
\\my\\1.txt其中第一个\为转移字符
4、应用程序的main方法中有以下语句,则输出的结果是()。
Strings1=newString("abc");
Strings2=newString("abc");
booleanb1=s1.equals(s2);
booleanb2=(s1==s2);
System.out.print(b1+""+b2);
A)truefalseB)falsetrueC)truetrueD)falsefalse
分析:
equal比较的是两个对象所表示的字符是否相等,而==比较的是两个对象是否相等.
5、应用程序的main方法中有以下语句,则输出的结果是()。
Hashtablehashtable=newHashtable();
hashtable.put("x","12345");
hashtable.put("y","67890");
hashtable.put("a","abcde");
System.out.println(hashtable.get("a"));
A)aB)abcdeC)12345D)67890
分析:
存入名值对(put),再按照名字取出其中的值(get)
下面说一下HashMap和Hashtable的区别:
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Mapinterface的一个实现
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
因为contains方法容易让人引起误解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap
就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异
6、下面语句的功能是()。
RandomAccessFileraf2=newRandomAccessFile("1.txt","rw");
A)打开当前目录下的文件1.txt,既可以向文件写数据,也可以从文件读数据。
B)打开当前目录下的文件1.txt,但只能向文件写入数据,不能从文件读取数据。
C)打开当前目录下的文件1.txt,但不能向文件写入数据,只能从文件读取数据。
D)以上说法都不对。
分析:
没用过额…下面有个例子,自己看看它的用法吧
importjava.io.IOException;
importjava.io.File;
importjava.io.RandomAccessFile;
classRandomFileTest
{
publicstaticvoidmain(String[]args)throwsException
{
Students1=newStudent(1,"zhangsan",90.5);
Students2=newStudent(2,"lisi",98.5);
Students3=newStudent(3,"wangwu",96.5);
FileuserDir=newFile(System.getProperties().getProperty("user.dir"));
FiletempFile=File.createTempFile("~student",".tmp",userDir);
tempFile.deleteOnExit();
RandomAccessFileraf=newRandomAccessFile(tempFile,"rw");
s1.write(raf);
s2.write(raf);
s3.write(raf);
raf.seek(0);
Students=newStudent();
for(longi=0;i{
s.read(raf);
System.out.println("[lenth:
"+raf.length()+",i="+i+"]"+s);
}
raf.close();
T