1. 有以下类定义:
abstract class Animal {
abstract void say () ;
}
public class Cat extends Animal {
public Cat() {
System.out.printf(“I am a cat”);
}
public static void main(String[] args) {
Cat cat =new Cat();
}
}
运行后:
A. I am a cat
B. Animal 能编译,Cat不能编译
C. Animal不能编译,Cat能编译
D. 编译能通过,但是没有输出结果
2. 以下()不是Object类的方法
A. clone()
B. finalize()
C. toString()
D. hasNext()
3. 以下不是修饰符final的作用是()
A. 修饰常量
B. 修饰不可继承类
C. 修饰不可变类
D. 修饰不可覆盖的方法
4. (不定项)Java 8中,忽略内部接口的情况,不能用来修饰interface里的方法的有()
A. private
B. public
C. protected
D. static
5. (不定项)下面哪些是线程安全的?
A. Hashtable
B. Vector
C. TreeSet
D. LinkedList
//-------------------分割线-----------------------
B
D
C
AC
AB
答案详解:
1. Cat没有实现抽象方法,但是Animal能编译生成class文件。
2. clone():实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
hashCode():该方法用于哈希查找,一般 obj1.equals(obj2)可以推出obj1.hashCode()==obj2.hashCode()。
3. 不可变类(Immutable Class)是一旦被实例化就不会改变自身状态(或值)的类。
如 String就是一种典型的不可变类。不可变类的主要用途是在多线程环境 下确保对象的线程安全。不可变类一般建议使用final来修饰(比如String就是final类),否则子类可以通过继承不可变类的方式,增加setter方法,从而改变对象的状态,破坏不可变约束。但本题ABD更加常见和直接。
4. Java1.8 开始支持接口中定义静态方法。
5. 线程安全概念:
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行你的这段代码。如果每次运行的结果和单线程运行结果一致,就是线程安全的。
线程安全问题都是由 全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般线程安全;若有多个线程同时执行读写操作,就要考虑线程同步。
Vector和Stack都是同步的,线程安全。Hashtable方法也同步(synchronized)。