第4章 类与对象
一、选择题
1.下列哪种类成员修饰符修饰的变量只能在本类中被访问?( D )
(A)protected (B)public (C)default (D)private
2.在Java语言中,哪一个包中的类是自动导入的?( A )
A)java.lang B)java.awt C)java.io D)java.applet
【解析】只有java.lang包中的类能够被自动导入。
3.给出下面的程序代码:
public class X4_1_3 { private float a; public static void m ( ){ }
}
如何使成员变量a被方法m( )访问( C ) (A)将private float a改为protected float a (B)将private float a改为public float a (C)将private float a改为static float a (D)将private float a改为float a 【解析】static类型的方法只能访问static类型的数据成员。
4.有一个类B,下面为其构造方法的声明,正确的是( B )。
(A)void B(int x) {} (B)B(int x) {} (C)b(int x) {} (D)void b(int x) {} 5.下面关于类的说法,不正确的是( C )。 (A)类是同种对象的集合和抽象 (B)类属于Java语言中的复合数据类型 (C)类就是对象 (D)对象是Java语言中的基本结构单位
【解析】类是对象的抽象,对象是类的实例
6.下面关于方法的说法,不正确的是( C )。 (A)Java中的构造方法名必须和类名相同
(B)方法体是对方法的实现,包括变量声明和合法语句 (C)如果一个类定义了构造方法,也可以用该类的默认构造方法
(D)类的私有方法不能被其他类直接访问
【解析】类中一旦用户定义了构造方法,该类默认的构造方法就不存在了,除非用户再自定义该类的默认构造方法。
7.关于内部类,下列说法不正确的是( A )。 (A)内部类不能有自己的成员方法和成员变量 (B)内部类可用private或protected修饰符修饰
(C)内部类可以作为其他类的成员,而且可访问它所在的类的成员
(D)除static内部类外,不能在类内声明static成员 8.定义外部类时不能用到的关键字是( C )。
(A)final (B)public (C)protected (D)abstract
【解析】定义外部类不能使用protected修饰符。
9.为AB类定义一个无返回值的方法f,使得使用类名就可以访问该方法,该方法头的形式为( D ) (A)abstract void f() (B)public void f() (C)final void f() (D)static void f() 【解析】只有static类型的方法才可以直接使用类名来引用。
10.定义一个公有double型常量PI,哪一条语句最好?( B )
(A)public final double PI; (B)public final static double PI=3.14; (C)public final static double PI; (D)public static double PI=3.14; 【解析】用public final static来定义常量,既可以节省存储空间,又可以保证数值不会被改变。
二、填空题
1. 对象 是对事物的抽象,而 类 是对对象的抽象和归纳。
2.从用户的角度看,Java源程序中的类分为两种: 系统定义的类 和 用户自己定义的类 。 3.一个类主要包含两个要素: 数据成员 和 成员方法 。 4.创建包时需要使用关键字 package 。
5.类中的 构造 方法是一个特殊的方法,该方法的方法名和类名相同。 6.如果用户在一个自定义类中未定义该类的构造方法,系统将为这个类定义一个默认构造方法。这个方法没有 形式参数 ,也没有任何 具体语句 ,不能完成任何操作。
6
7.静态数据成员被保存在类的内存区的 公共存储 单元中,而不是保存在某个对象的内存区中。因此,一个类的任何对象访问它时,存取到的都是 相同 (相同/不同)的数值。
8.静态数据成员既可以通过 对象名 来访问,也可以通过 类名 直接访问它。
9.定义常量时要用关键字 final ,同时需要说明常量的 数据类型 并指出常量的 具体值 。
10.方法体内定义变量时,变量前不能加 修饰符 ;局部变量在使用前必须 明确赋值 ,否则编译时会出错;而类变量在使用前可以不用赋值,它们都有一个 默认 的值。
11.static方法中只能引用 static 类型的数据成员和 static 类型的成员方法;而非static类型的方法中既可以引用 static 类型的数据成员和成员方法,也可以引用非static 类型的数据成员和成员方法。
12.引用static类型的方法时,可以使用 类名 做前缀,也可以使用 对象名 做前缀。
13.当程序中需要引用java.awt.event包中的类时,导入该包中类的语句为 import java.awt.event.*。
14.定义类时需要 class 关键字,继承类时需要 extends 关键字,实现接口时需要关键字 implements 。 三、判断题
1.类是一种类型,也是对象的模板。( √ ) 2.类中说明的方法可以定义在类体外。( × ) 3.实例方法中不能引用类变量。( × )
4.创建对象时系统将调用适当的构造方法给对象初始化。( √ )
5.使用运算符new创建对象时,赋给对象的值实际上是一个引用值。( √ )
6.对象赋值实际上是同一个对象具有两个不同的名字,它们都有同一个引用值。(7.对象可作方法参数,对象数组不能作方法参数。( × ) 8.class是定义类的惟一关键字。( √ )
9.Java语言会自动回收内存中的垃圾。( √ )
√ ) 7
第5章 子类与继承
一、选择题
1.已知有下面类的说明:
public class X5_1_1 extends x{ private float f =10.6f; int i=16;
static int si=10;
public static void main(String[] args) { X5_1_1 x=new X5_1_1(); } }
在main()方法中,下面哪条语句的用法是正确的?( A )
A.x.f B.this.si C.X5_1_1.i D.X5_1_1.f
【解析】由于x是在main方法内部定义的对象,因此它可以引用类的非static类型的属性,因此选A,而this和super不能在main方法中使用,使用类名只能引用本类的静态属性,因此B、C、D不对。
3.下面关于接口的说法中不正确的是(C )。 A.接口中所有的方法都是抽象的
B.接口中所有的方法都是public访问权限
C.子接口继承父接口所用的关键字是implements D.接口是Java中的特殊类,包含常量和抽象方法
【解析】子接口继承父接口所用的关键字也是extends,只有类实现接口时才使用implements。 4.区分类中重载方法的依据是( A )。 A.形参列表的类型和顺序 B.不同的形参名称 C.返回值的类型不同 D.访问权限不同 【解析】形参表的类型和顺序不同时区分重载方法的唯一标志。
5.子类对象能否直接向其父类赋值?父类对象能否向其子类赋值?( B ) A.能,能 B.能,不能 C.不能,能 D.不能,不能
【解析】子类对象可以直接赋值给父类对象,而父类对象不能直接赋值给子类对象。
6.Java语言类间的继承关系是( A )。 A.单继承 B.多重继承 C.不能继承 D.不一定 【解析】Java语言类间的继承关系是单继承,但一个类可以实现多个接口。
7.Java语言接口间的继承关系是( B )。
A.单继承 B.多重继承 C.不能继承 D.不一定
二、填空题
2.下列程序的运行结果是( C )。
public class X5_1_2 extends x{
int ab(){
static int aa=10; aa++;
System.out.println(aa); }
public static void main(String[] args) { X5_1_2 x=new X5_1_2(); x.ab(); } }
A.10 B.11 C.编译错误 D.运行成功,但不输出
【解析】方法体内的局部变量不能使用static修饰符。
【7.解析】Java语言接口间的继承关系允许多重继承。 8.一个类实现接口的情况是( A )。 A.一次可以实现多个接口 B.一次只能实现一个接口 C.不能实现接口 D.不一定
【解析】Java语言允许一个类一次实现多个接口。 9.定义外部类的类头时,不可用的关键字是( C )。 A.public B.final C.protected D.abstract
【解析】定义外部类时不能使用protected关键字。
10.如果局部变量和成员变量同名,如何在局部变量作用域内引用成员变量?( B )
A.不能引用,必须改名,使它们的名称不相同 B.在成员变量前加this,使用this访问该成员变量 C.在成员变量前加super,使用super访问该成员变量 D.不影响,系统可以自己区分
【解析】this可以用来引用本类对象。 11.下面说法不正确的是( B )。 A.抽象类既可以做父类,也可以做子类 B.abstract和final能同时修饰一个类
C.抽象类中可以没有抽象方法,有抽象方法的类一定是抽象类或接口
D.声明为final类型的方法不能在其子类中重新定义 【解析】abstract和final不能同时修饰一个类,因为abstract类需要子类,而final类不能有子类。
8
1.消息就是向对象发出 服务请求 ,是对 数据成员 和 成员方法 的引用。 2.在面向对象系统中,消息分为两类 公有消息 和 私有消息 。
3.在面向对象程序设计中,采用 继承 机制可以有效地组织程序结构。充分利用已有的类来创建更复杂的类,大大
提高程序开发的效率,提高代码的复用率,降低维护的工作量。
4. 数据成员的隐藏 是指在子类中重新定义一个与父类中已定义的数据成员名完全相同的数据成员。 5.子类可以重新定义与父类同名的成员方法,实现对父类方法的 覆盖 。
6.子类在重新定义父类已有的方法时,应保持与父类完全相同的 方法名 、 返回值类型 和 参数列表 ,否则就不
是方法的覆盖,而是子类定义自己特有的方法,与父类的方法无关。 7.this代表了 当前对象 的一个引用,super表示的是当前对象的 直接父类对象 的引用。 8.抽象类不能 创建 对象,该工作由抽象类派生的非抽象子类来实现。
9.如果父类中已有同名的abstract方法,则子类中就 不能 (能/不能)再有同名的抽象方法。 10.abstract类中不能有 private 访问权限的数据成员或成员方法。 11. interface 是声明接口的关键字,可以把它看成一个特殊类。接口中的数据成员默认的修饰符是 public static final ,接口中的成员方法默认的修饰符是 public abstract 。
12.如果实现某接口的类不是abstract的抽象类,则在类的定义部分必须 实现 该接口的所有抽象方法;如果实现某接口的类是abstract的抽象类,则它可以 不实现 该接口所有的方法。但是对于这个抽象类任何一个非抽象的子类而言,它们父类所实现的接口中的所有抽象方法以及自身所实现接口中的抽象方法都必须有实在的 方法体 。 13.包的作用有两个,一是 划分类名空间 ,二是 控制类之间的访问 。
14.封装也称 信息隐藏 ,是指类的设计者只为类的使用者提供类的可以访问的部分(包括类的数据成员和成员方法),而把类中的其他成员 隐藏 起来,使用户不能访问的机制。
15.Java提供了4种访问权限来实现封装机制,即 private 、 protected 、 默认 和 public 。 16.Java中提供两种多态机制, 重载 与 覆盖 。 17.当一个构造方法需要调用另一个构造方法时,可以使用关键字 this ,同时这个调用语句应该是整个构造方法的 第一条 可执行语句。
18.如果子类自己没有构造方法,那么父类也一定 没有 (有/没有)带参的构造方法,此时它将继承父类的 无参构造方法 作为自己的构造方法;如果子类自己定义了构造方法,则在创建新对象时,它将先执行 父类 的构造方法,然后再执行自己的 构造方法 。
19.对于父类的含参数构造方法,子类可以通过在自己的构造方法中使用 super 关键字来调用它,但这个调用语句必须是子类构造方法的 第一条 可执行语句。
20.创建一个名为myPachkage的包的语句为 package myPackage; ,该语句应该放在程序第一行 位置。
三、判断题
1.Java语言中,构造方法是不可以继承的。( √ )
2.子类的成员变量和成员方法的数目一定大于等于父类的成员变量和成员方法的数目。( × ) 3.抽象方法是一种只有说明而无具体实现的方法。( √ ) 4.Java语言中,所创建的子类都应有一个父类。( √ )
5.调用this 或super构造方法的语句必须放在第一条语句。( √ ) 6.一个类可以实现多个接口,接口可以实现“多重继承”。 ( √ ) 7.实现接口的类不能是抽象类。( √ )
8.使用构造方法只能给实例成员变量赋初值。( √ )
9.Java 语言不允许同时继承一个类并实现一个接口。( × )
9
第6章
一、选择题
1.给出下面程序代码:
byte[] a1, a2[]; byte a3[][]; byte[][] a4;
下列数组操作语句中哪一个是不正确的?( A ) A.a2 = a1 B.a2 = a3 C.a2 = a4 D.a3 = a4
public class X6_1_5 {
【解析】只有维数相同的数组才能相互赋值。 public static void main(String[] args) { 2.关于数组,下列说法中不正确的是( C )。 AB aa = new AB();
AB bb; A.数组是最简单的复合数据类型,是一系列数据的集合
bb = aa;
B.数组元素可以是基本数据类型、对象或其他数组
System.out.println(bb.equals(aa));
C.定义数组时必须分配内存 }
} D.一个数组中所有元素都必须具有相同的数据类型
class AB{ int x = 100; } 【解析】数组元素可以是基本数据类型、对象或其他数组。
A.true B.false C.编译错误 D.100
3.设有下列数组定义语句:
【解析】同一个类的两个对象可以相互赋值,赋值后
int a[] = {1, 2, 3};
两个对象具有相同的存储空间,因此是相同的。
则对此语句的叙述错误的是( C )。
6.已知有定义:String s=\,下面哪个表达式正确?
A.定义了一个名为a的一维数组
( A )
B.a数组有3个元素
A.s += \ B.char c = s[1];
C.a数组元素的下标为1~3
C.int len = s.length; D.String s = s.toLowerCase();
D.数组中每个元素的类型都是整数
【解析】字符串对象可以执行“+=”运算,但不能用
【解析】数组元素的下标是从0开始的。
s[1]这种方式取其中的字符,也不能用length求它的长度,
可以用length()求其长度,因此B、C不正确,不能再次
定义s字符串,因此D不正确。
二、填空题
1. Object类 是所有类的直接或间接父类,它在 java.lang 包中。
2.System类是一个功能强大、非常有用的特殊的类,它提供了 标准输入/输出 、 运行时 系统信息等重要工具。这个类不能 实例化 ,即不能创建System类的对象,所以它所有的属性和方法都是 static 类型,引用时以类名System为前缀即可。
3.Applet由浏览器自动调用的主要方法 init , start , stop 和 destroy 分别对应了Applet从初始化、启动、暂停到消亡的生命周期的各个阶段 。
4.数组是一种 复合 数据类型,在Java中,数组是作为 对象 来处理的。数组是有限元素的有序集合,数组中的元素具有相同的 数据类型 ,并可用统一的 数组名 和 下标 来唯一确定其元素。
5.在数组定义语句中,如果[]在数据类型和变量名之间时,[]之后定义的所有变量都是
数组 类型,当[]在变量名之后时,只有[]之前的变量是 数组 类型,之后没有[]的则不是数组类型。 6.数组初始化包括 静态 初始化和 动态 初始化两种方式。
7.利用 System 类中的 arraycopy() 方法可以实现数组元素的复制;利用 Arrays 类中的 sort() 和 binarySearch() 方法可以实现对数组元素的排序、查找等操作。 8.Java语言提供了两种具有不同操作方式的字符串类: String 类和 StringBuffer 类。它们都是 java.lang.Object 的子类。
4.执行语句:int[] x = new int[20];后,哪个是正确的?(C) A.x[19]为空 B.x[19]未定义 C.x[19]为0 D.x[0]为空 【解析】此语句定义了x数组后,x[0]~x[19]的值全部为0。 5.下面代码运行后的输出结果为( A )。
10