Java基础练习题-错题集(一)
(1) 下面代码输出结果是?
class C { C() { System.out.print("C"); } } class A { C c = new C(); A() { this("A"); System.out.print("A"); } A(String s) { System.out.print(s); } } class Test extends A { Test() { super("B"); System.out.print("B"); } public static void main(String[] args) { new Test(); } }
选项: A. BB
B. CBB
C. BAB
D. None of the above
(2) 以下哪一个不是赋值符号?
选项: A. +=
B. <<=
C. <<<=
D. >>>=
(3) 以下哪些方法是Object类中的方法?
选项: A. clone()
B. toString()
C. wait()
D. finalize()
===================================================解题分析==============================================
(1) 解析 正确答案 B
初始化过程是这样的:
1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;
(1)初始化父类的普通成员变量和代码块,执行 C c = new C(); 输出C
(2)super("B"); 表示调用父类的构造方法,不调用父类的无参构造函数,输出B
(3) System.out.print("B");
所以输出CBB
(2) 解析 正确答案 C
>> 为带符号右移,右移后左边的空位被填充为符号位
>>> 为不带符号右移,右移后左边的空位被填充为0
没有<<<
<< 左移,左移后右边总是补0
A.很明显是赋值符号
B.<<=左移赋值
C.不是
D.>>>= 右移赋值,左边空出的位以0填充
B.<<=左移赋值
C.不是
D.>>>= 右移赋值,左边空出的位以0填充
(3) 解析 正确答案 ABCD
Object 类中方法及说明如下:
registerNatives() //私有方法
clone() //创建并返回此对象的一个副本。
equals(Object obj) //用于确认两个对象是否“相同”。
finalize() //当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
getClass() //返回此 Object 的运行类。
hashCode() //用于获取对象的哈希值。
notify() //唤醒在此对象监视器上等待的单个线程。
notifyAll() //唤醒在此对象监视器上等待的所有线程。
notifyAll() //唤醒在此对象监视器上等待的所有线程。
toString() //返回该对象的字符串表示。
wait(long timeout) //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
wait(long timeout, int nanos) //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
wait() //用于让当前线程失去操作权限,当前线程进入等待序列
wait(long timeout) //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
wait(long timeout, int nanos) //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
wait() //用于让当前线程失去操作权限,当前线程进入等待序列