Java高阶面试题(P6~P7)

1. 什么是 transient 变量?

答案:transient 变量是指不会被序列化的变量。


2. 什么是同步(synchronization)

答案: 在多线程环境中,同步是指控制多个线程访问共享资源的方式。没有同步的话,可能出现一个线程正在读取或使用共享资源,同时另一个线程却在修改它的情况,这会造成严重的错误。


3. 在 JDK 1.2 中,stop(), suspend() 和 resume() 这三个方法有什么变化?

答案:它们都被标注为 “deprecated”,也就是应该避免使用。


4. null 是一个关键字吗?

答案:不是。


5. 线程停止运行后是什么状态?

答案:线程停止运行后,就变成 DEAD 状态。


6. 什么是集合 API(Collection API)?

答案:集合 API 是指一组用于帮助处理对象集合的类和接口。

7. List 接口是做什么的?

答案:List 接口是用来处理有序且允许重复的对象集合的接口。


8. 什么时候应该将类定义为 final?

答案:不希望有子类的时候; 不希望功能被扩展的时候。


9. 能否将抽象方法声明为静态的?

答案:不允许,这样做会导致编译错误:illegal combination of modifiers abstract and static

10. 能否将接口声明为抽象的?

答案:可以。声明接口的时候加不加上 abstract 没有区别。


11. 能否声明一个内容为空的接口?

答案:可以。


12. 能否将接口声明为 final?

答案:不允许,这样做会导致编译错误。因为接口必须要有子类。


13. 如何处理 ClassCastException?

答案:在强制类型转换之前用 instanceof 判断是否可以转换。


14. 一个对象什么时候可以被回收(garbage collection)?

答案:当程序不可访问(unreachable)该对象的时候,该对象可以被回收。


15. 所有线程都要实现的一个方法是什么?

答案:run() 方法,不论该线程是继承自 Thread 类或是实现了 Runnable 接口。


16. 当异常没有被捕获时,会发生什么?

答案:当前线程所在的线程组会执行一个叫 uncaughtException() 的方法,最后程序会异常退出。


17. 构造方法中如何使用 this() 和 super()?

答案:前者用来调用当前类的其他构造方法;后者用来调用父类的构造方法。


18. 什么情况下垃圾收集器会执行对象的 finalize() 方法?

答案:当垃圾收集器检测到该对象不可访问(unreachable)时,会执行该对象的 finalize() 方法。


19. 方法重载(overloading)有什么要求?

答案:方法的名称必须一样;方法的参数声明必须不一样。


20. 编译器什么情况下会提供缺省构造方法(default constructor)?

答案:当一个类没有其他构造方法的时候,编译器会为其提供缺省的构造方法。


21. 非静态内部类可以使用哪些修饰符(modifier)?

答案:非静态内部类可以使用 final 或 abstract 修饰符。