Java面向对象软件开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

单元测试(一)

一、选择题(每小题2分,共50分)

1.Java中定义类头时,不可能用到的关键字是( )。

A.class

B.private

C.extends

D.public

2.下列类头定义中,错误的是( )。

A.public x extends y {...}

B.public class x extends y {...}

C.class x extends y implements y1 {...}

D.class x {...}

3.设A为已定义的类名,下列声明A类的对象a的语句中正确的是( )。

A.float A a;

B.public A a=A();

C.A a=new A();

D.static A a=new A();

4.设i、j为类X中定义的int型成员变量名,下列X类的构造方法中不正确的是( )。

A.void X(int k ){ i=k; }

B.X(int k ){ i=k; }

C.X(int m, int n ){ i=m; j=n; }

D.X( ){i=0;j=0; }

5.以下为类A中构造方法的声明,其中正确的是( )。

A.void A(int x){...}

B.public A(int x){...}

C.public a(int x){...}

D.static A(int x){...}

6.下列方法定义中不正确的是( )。

A.float x( int a,int b ) { return (a-b); }

B.int x( int a,int b) { return a-b; }

C.int x( int a,int b ) { return a*b; }

D.int x(int a,int b) { return 1.2*(a+b); }

7.Java语言中类间的继承关系是( )。

A.多重的

B.单重的

C.线程的

D.不能继承

8.Java中所有的类都是通过直接或间接地继承( )类得到的。

A.java.lang.Object

B.java.lang.Class

C.任意类

D.以上答案都不对

9.现有两个类A、B,以下描述中表示B继承自A的是( )。

A.class A extends B

B.class B implements A

C.class A implements B

D.class B extends A

10.对于任意一个类,用户所能定义的构造方法的个数至多为( )。

A.0个

B.1个

C.2个

D.任意个

11.Java中类的构造方法何时被调用( )。

A.类定义时

B.创建对象时

C.调用对象方法时

D.使用对象的变量时

12.类是具有相同( )的一组对象的总称,是对对象的抽象描述。

A.属性和行为

B.对象和方法

C.变量和数据

D.对象和属性

13.一个对象的生命周期分( )3个阶段。

A.使用、生成和清除

B.清除、使用和生成

C.生成、使用和清除

D.生成、清除和使用

14.用来导入已定义好的类或包的语句是( )。

A.main

B.import

C.public class

D.class

15.设i、j、k为类School中定义的int型成员变量名,下列类School的构造方法中不正确的是( )。

A.School( int m){ ... }

B.void School( int m){ ... }

C.School( int m, int n){ ... }

D.School( int h,int m,int n){ ... }

16.为了调用超类的构造方法,可以使用( )关键字后跟包含该超类所需参数的一对圆括号。

A.superclass

B.superconstructor

C.super

D.以上答案都不对

17.设ClassA为已定义的类名,下列声明ClassA类的对象ca的语句中正确的是( )。

A.public ClassA ca=new ClassA( );

B.public ClassA ca=ClassA( );

C.ClassA ca=new class( );

D.ca ClassA;

18.下列选项中,哪个是Java语言所有类的父类( )。

A.String

B.Vector

C.Object

D.KeyEvent

19.下列选项中,表示数据或方法只可以被同一包中的任何类或它的子类访问,即使子类在不同的包中也可以访问的修饰符是( )。

A.public

B.protected

C.private

D.final

20.下列选项中,表示数据或方法只能被本类访问的修饰符是( )。

A.public

C.private

B.protected

D.final

21.在类的定义中,通过使用( )关键字可创建一个现有类的子类。

A.extends

B.implements

C.inherits

D.modifies

22.如果子类中的方法mymethod()覆盖了父类中的方法mymethod(),假设父类方法头部定义如下:void mymethod(int a),则子类方法的定义不合法的是( )。

A.public void mymethod(int a)

B.protected void mymethod(int a)

C.private void mymethod(int a)

D.void mymethod(int a)

23.在某个类中存在一个方法:void sort(int x),以下不能作为该方法的重载的声明是( )。

A.public float sort(float x)

B.int sort(int y)

C.double sort(int x,int y)

D.void sort(double y)

24.当子类中的成员变量与父类中的成员变量同名时( )。

A.子类中的成员变量隐藏父类中的变量

B.父类中的成员变量隐藏子类中的变量

C.子类中变量无效

D.该声明非法

25.如果创建的一个子类覆盖一个父类public方法,则对该方法可以使用哪些修饰符修饰( )。

A.public

B.public和protected

C.private

D.任意修饰符都可以,由系统随机选取

二、填空题(每小题1分,共10分)

1.如果子类中的某个成员变量的命名与它的父类中的某个成员变量完全一样,则称子类中的这个变量________了父类的同名变量。

2.属性的隐藏是指子类重新定义从父类继承来的同名__________。

3.如果子类中的某个方法的名字、返回值类型和__________与它的父类中的某个方法完全一样,则称子类中的这个方法覆盖了父类的同名方法。

4.在Java程序中,通过类的定义只能实现单重继承,但通过_________的定义可以实现多重继承关系。

5.如果子类中的某个方法的名字、__________和参数列表与它的父类中的某个方法完全一样,则称子类中的这个方法覆盖了父类的同名方法。

6.如果一个方法没有返回值,则该方法返回值类型为______________。

7.同一个类中多个方法具有相同的方法名,不同的_____________称为方法的重载。

8.通过类MyClass中的不含参数的构造方法,生成该类的一个对象obj,可通过以下语句实现:_______________________________。

9.如果子类中的方法compute()覆盖了父类中的方法compute(),假设父类的compute()方法头部有可见性修饰符public,则子类的compute()的可见性修饰符必须是__________。

10.__________是类中的一种特殊方法,是为对象初始化操作编写的方法。

三、程序阅读题(每小题4分,共20分)

1.下面是一个类的定义,请完成程序。

        public  class  ____________{
            int  x,y;
            Myclass(int  i,__________){  // 构造方法
                x=i;
                y=j;
            }
        }

2.下列程序的输出结果是:____________________________。

        class Demo {
            public void test(){  System.out.println("NO");}
            public void test(int i){  System.out.println(i);}
            public void test(int a,int b){  System.out.println(a+b);}
        }
        public class Test{
            public static void main(String args[]){
                Demo de=new Demo();
                de.test();
                de.test(5);
                de.test(6,8);
            }
        }

3.下列程序的输出结果是:____________________________。

        public class Test{
            public static void main(String[] args){
                Count myCount = new Count();
                int times = 0;
                for(int i=0;i<100;i++)
                    increment(myCount , times);
                System.out.println("count is " + myCount.count);
                System.out.println("time is "+ times);
            }
            public static void increment(Count c , int times){
                c.count++;
                times++;
            }
        }
        class Count{
            public int count;
            Count(int c){
                count =c;
            }
            Count(){
                count =1;
            }
        }

4.运行类C的输出结果是:____________________________。

        class A{
            public A(){
                System.out.println("The default constructor of A is invoked");
            }
        }
        class B extends A{
            public B(){
                System.out.println("The default constructor of B is invoked");
            }
        }
        public class C{
            public static void main(String[]args)   {
                B  b=new  B();
            }
        }

5.阅读下列程序,写出输出结果:____________________________。

        class A   {
            String s="class A";
            void show(){
                System.out.println(s);
            }
        }
        class B extends A{
            String s="class B";
            void show(){
                System.out.println(s);
            }
        }
        public class TypeConvert{
            public static void main(String args[]){
                B b1;
                B b2=new B();
                A a1,a2;
                a1=(A)b2;
                a2=b2;
                System.out.println(a1.s);
                a1.show();
                System.out.println(a2.s);
                a2.show();
                b1=(B)a1;
                System.out.println(b1.s);
                    b1.show();
                    System.out.println(b2.s);
                    b2.show();
                }
            }

四、编程题(共20分)

1.设计一个时间类MyTime,包含一个构造方法,3个私有成员变量hour、minute、second以及它们相应的setter和getter方法,再加上一个转换成“××时:××分:××秒”格式字符串的方法toString。

2.设计一个日期类MyDate,包含一个构造方法,3个私有成员变量year、month、day以及它们相应的setter和getter方法,再加上一个转换成“××××年××月××日”格式字符串的方法toString。

3.设计一个FullTime类,包含一个MyTime类型的私有成员变量time以及与之相对应的setter和getter方法;一个MyDate类型的成员变量date以及与之相对应的setter和getter方法,一个构造方法,再加上一个转换成“××××年××月××日××时:××分:××秒”格式字符串的方法toString。

4.假设当前时间为2009年12月10日9点30分45秒,编写一个程序,用FullTime类设置时间为以上时间,并打印输出。