诚信应考 考出水平 考出风格
浙江大学城市学院
2009— 2010学年第 二 学期期末考试试卷
《 面向对象程序设计 》
得分
一._填空题_(本大题共14个填空项,每个填空项1分,共14分。)
1.构造方法是一种特殊的成员方法,构造方法名与(1)相同。
2.对于字符串String s1=new String(“ok”); String s2=new String(“ok”);则表达式s1==s2的值为(2),表达式s1.equals(s2)的值为(3)。
3.对于StringBuffer串StringBuffer str = new StringBuffer(“abcdef”); str=str.delete(2,4)执行后str的值为(4)。
4.对于两个int类型变量int m=120, n=240;则m^m的结果为(5),m^n^n的结果为(6)。
5.关键字this(7)出现在构造方法中,(8)出现在实例方法中,(9)出现在类方法中。(填“可以”或“不可以”)
6.在java的源文件中,为说明一个类是属于一个命名为tom.jiafei的包,需要编写的语句是:(10),该语句所在的位置为(11)。
7.如果我们要对一个二进制文件进行读写,可使用java.io包中提供的FileInputStream类和(12)类。
8.LinkedList定义了表示(13)这种数据结构的(14)类。
得分
二.选择题(本大题共30题,每题1分,共30分。)
请选择一个最合适的选项,填入到答题卷中。
1、用Java虚拟机执行类名为Hello的应用程序的正确命令是( )。
A. java Hello.class
B. Hello.class
C. java Hello.java
D. java Hello
2、一个包含Java类A,B,C,且A为主类的源程序,编译产生的类文件是( )。
A. A.class
B. A.class, B.class, C.class
C. A.class, B$.class, C$.class
D. A$.class, B$.class, C$.class
3、设Hello.html文件嵌入一个Applet类Hello,运行这个Applet的命令是( )。
A. appletviewer Hello.html
B. 点击Hello.class
C. appletviewer Hello.class
D. 点击Hello.java
4、下列表达式正确的是( )。
A. byte=340
B. Boolean=1
C. long l=-2f
D. double=0.9239d
5、执行下列代码后,哪个结论是正确的?( )
String[] s = new String[10]
A. s[10]为””
B. s[9]为null
C. s[0]为未定义
D. s.length()为10
6、下列语句不正确的是( )。
A. int a[][] = new int[][3];
B. int a[][]={{1,3}, {2,3,4}, {1,2}};
C. String s[][]=new String[2][];
D. String s[][]={{“can”,“I”}, {“help”,”you”}};
7、分析以下程序的输出结果( )
public class X{
public static void main(String[] args) {
String s1 = new String(“true”);
Boolean b1= new Boolean(true);
if (s1.equals(b1) {
System.out.println(“Equal”);
}
} }
A. 无输出
B. 输出”Equal”
C.在第五行出现编译错误
D. 程序执行后产生异常
8、下述声明中哪一种可防止该类产生子类?( )
A. static class fooBar{ }
B. private class Foobar{ }
C. abstract class FooBar{ }
D. final public class FooBar{}
9、如果要求子类可以在任何包中访问父类中的成员,下面哪一个修饰符是可以达到这个目标的最为严格的修饰符?( )
A. public
B. private
C. Protected
D. 没有任何修饰符
10、下面对methoda()方法的哪一种声明是调用该方法时不需要建立methoda()方法所在类的实例?( )
A. abstract public void methoda();
B. public abstract double methoda();
C. static void methoda(double d1) { }
D. public native double methoda() { }
11、下列哪个不是对方法public void add(int a)的重载( )。
A. public int add(int a)
B. public void add(long a)
C. public void add(int a, int b)
D. public void add(float a)
12、分析下列程序:
1)
class A{
2)
public float getNum( ) {return 3.0f; }
3)
}
4)
public class B extends A{
5)
//这里要插入方法
6)
}
在该程序的第5行中插入下面哪个方法会引起编译错误?( )
A. public float getNum( ) {return 4.0f;}
B. public void getNum( ) { }
C. public void getNum(double d) { }
D. public double getNum(float d) {return 4.0d; }
13、下面对默认构造方法的说法正确的是( )
A. 默认的构造方法会为方法中的变量进行初始化。
B. 编译程序会为每一个类创建默认的构造方法。
C. 默认的构造方法会调用其超类的无参数构造方法
D. 当一个类仅定义了带参数的构造方法,编译程序还是会为这个类创建一个默认的无参数构造方法。
14、Java语言与其他主要语言相比较,独有的特点是( )。
A. 面向对象
B. 多线程
C. 平台无关性
D. 可扩展性
15、下列哪种方法返回String中的字符数?( )
A. size( )
B. length( )
C. width( )
D. girth( )
16. 假设X,Y,Z都是接口,下列哪条是正确的代码( )。
A. public interface A implements X { void aMethod( ) ;}
B. interface B implements Y { void aMethod( );}
C. interface C extends X, Y, Z { void aMethod( ); }
D. interface C extends X { protected void aMethod( ); }
17. 对于每个try块,下列结论正确的是( )。
A. 必须只有一个catch块
B. 必须有至少一个catch块
C. 必须有finally块
D. 必须有try-try-again块
18. 符合对象和类关系的是: ( )
A、人和老虎B、书和汽车
C、楼和土地D、汽车和交通工具
19. 字符流与字节流的区别在于 ( )
A.前者带有缓冲,后者没有
B.前者是块读写,后者是字节读写
C. 二者没有区别,可以互换使用
D. 每次读写的字节数不同
20.在Java中,关于final关键字的说法不正确的是( )。
A. 如果修饰变量,则一旦赋了值,就等同一个常量
B. 如果修饰类,则该类只能被一个子类继承
C. 如果修饰方法,则该方法所在的类不能被继承
D. final 关键字既可以修饰成员变量也可以修饰成员方法。
21.设一数组由以下语句定义:int age=new int[10];则数组的第一个元素的正确引用方法为( )
A. age[1] B. Age[0] C. age[] D. age[0]
22.有一JAVA语言定义的类Worker是类Person的子类,Worker的构造方法中有一句”super()”,该语句( )。
A.调用类Worker中定义的super()方法B、调用类Person中定义的super()方法
C.调用类Person的构造方法
D、语法错误
23. 设有数组的定义:char m[]=new char[6],则m.length的值为( )。
A.5
B.6
C. 10
D.12
24. 下列代码哪个是错误的:
A. double a = 1000000000.0;
B. float a = 1000000000;
C. int a = 1000000 ;
D. long a = 100000000000000;
25. 关于Java中的包,提法错误的是:( )
A.一个包中可以有多个不同类名的类
B.一个Java源代码文件中只能有一条package语句。
C.一个包只能有一个public类
D.不同包中的类文件一般需要放到不同的目录下。
26. 下面程序代码的输出是:
int i =98;
i = i>>98<<98;
System.out.println(i);
A. 0
B. 98
C. 99
D.上述答案都不正确
27. 若y的值为3,则Java语句System.out.println(“3+2=”+y+2)
将输出的结果是
A. 3+2=32 B. 3+2=5
C. 3+2=3+2 D. 3+2=3
28. 下面提法错误的是( ):
A.一个包中的公有类对于其它包是可见的(即其它包可访问该公有类)。
B.如果类A是公有类,那么类A所在的源代码文件名须为A.java.
C.非公有类不能被扩展(即不能被继承)。
D.公有类的子类未必一定是公有类。
29. 下列不可作为java语言修饰符的是()
A.eat
B.$1
C._1
D.17ap6
30. 如下代码定义了一个类Test:
class Test {
private int y ;
Test (int x) { y=x ;}
}
现在为Test类生成一个对象,正确的语句是( )。
A.Test t = new Test( ); B. Test t=new Test(10, 20);
C.Test t; D. Test t=new Test(10);
得分
三.程序改错题(本大题共7 题,每题2分,共14分。)
下面所有题目至少包含1处错误,请指出错误及错误原因,并修改这个错误。
1、
public class X{
public static void main(String[] args) {
byte b=127;
byte c=126;
byte d=b+c; }
}
2、
public abstract class Test{
publicabstract void methodA( );
publicabstract void methodB( )
{System.out.println(“Hello”); }
}
3、
class A{
publicint i=0;
publicA(String text)
{ i=1;}
}
publicclass B extends A{
publicB(String text)
{ i=2;}
}
4、
class ExceptionTest{
public static void main(String[] args){
check(-1);
}
static void check(int i) throws Exception{
if( i<0) throw new Exception();
}
}
5、
interface IA{
void show();
void show(int i);
}
class A implements IA{
public void show(int i){
System.out.println("A show()");
}
}
6、class Aaa{
int i;
Aaa(){i=-1; }
Aaa(int a){ i = a;}
Aaa(double d){Aaa((int)d);}
}
7、//包aaa中定义了以下类A
package aaa;
public class A{
void abc(){ System.out.println("abc");
}
}
//缺省包中的类Test
import aaa.A;
class Test{
public static void main(String[] args){
A a = new A();
a.abc();
}
}
得分
四.程序阅读题(本大题共8题,每题3分,共24分。)
1、运行Bclass,输出结果是?
class Aclass{
void go( ) {
System.out.println(“Aclass”);
}
}
public class Bclass extends Aclass{
void go( ) {
System.out.println(“Bclass”);
}
public static void main(String args[]) {
Aclass a = new Aclass();
Aclass a1 = new Bclass();
a.go( );
a1.go( );
}
}
2、运行Example,输出结果是?
public class Example{
String str=new String(“good”);
char[] ch={‘a’,’b’,’c’};
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str +“and“);
System.out.print(ex.ch);
}
public void change(String str, char ch[]) {
str =“test ok”;
ch[0] =‘g’;
}
}
3、运行X,输出结果是?
public class X{
private static int a;
public static void main(String[] args) {
modify(a);
System.out.println(a);
}
publicstatic void modify(int a){
a++;
}
}
4、
运行Test,输出结果是?
class A{
publicString toString() {return“4”;}
}
classB extends A{
publicString toString() {return super.toString() +“3”; }
}
publicclass Test{
publicstatic void main(String[] args){
B b= new B();
System.out.println(b.toString());
}
}
5、
运行B,输出结果是?
class A{
A() { System.out.print(“Aclass“);
}
publicclass B extends A{
B()
{System.out.print(“Bclass“);}
publicstatic void main(String args[]) {
A a = new A();
A a1= new B();
}
}
6、运行B,输出结果是?
public class A{
String a=”hello”;
}
publicclass B extends A{
String a =“aaa”;
publicstatic void main(String args[]) {
A bar = new B();
System.out.println(bar.a);
}
}
7、运行Test,输出结果是?
class Test extends TT{
public static void main(String args[]) {
Test t = new Test(“Tom”);
}
publicTest(String s) {
super(s);
System.out.println(“How do you do?”);
}
publicTest( ) {this(“I am Tom”);}
}
classTT{
publicTT( ) { System.out.println(“What?”); }
publicTT(String s) {
This();
System.out.println(“I am“+s);
}
}
8、
运行Test,输出结果是?
abstract class Shape{
abstract void draw();
void doSomething(){draw();}
}
class Rect extends Shape{
void draw(){System.out.println("rect");}
}
class Triangle extends Shape{
void draw(){System.out.println("triangle");}
}
class Test{
static void f(Shape a){a.doSomething();}
public static void main(String[] args){
f(new Triangle());
Shape a = new Rect();
a.doSomething();
}
}
得分
五.编程题(本大题共3题,第1题2分,第2题11分,第3题5分,共18分。)
1.定义一个接口Showable,要求如下:
(1)
接口名:Showable。该接口是public接口
(2)
有一个抽象方法show()。
2.编写一个Student类,要求如下
(1)类名:Student,该类为public,表示学生信息
(2)该类实现第1题所定义的Showable接口。
(3)该类包含String类型的实例变量:ID(表示学号)、Name(表示姓名),以及double类型的实例变量:English、Math、Computer、Sum、Average(分别表示英语、数学、计算机的成绩以及3门课的总成绩、平均成绩),以上成员变量均为private权限。
(4)定义无参数的构造方法,将Name设置为“无名氏”。
(5)定义包含5个参数的构造方法,通过5个参数设置对象的学号、姓名以及三门课的成绩。
(6)定义并实现计算总成绩方法getSum()和计算平均成绩方法getAve()。
(7)实现Showable接口的Show()方法,屏幕输出字符串:“本科生xxx”。(xxx为学生姓名)
3.将上题Student类扩展成研究生类Graduate。要求如下:
(1)增加一个String类型的实例变量Major(专业),增加一个double类型的实例变量Analysis(数值分析成绩)
(2)覆盖父类的getSum()和getAve()方法,求4门课的总成绩和平均成绩。