1. 谈谈你对Java平台的理解?

java-01

2. Exception和Error有什么区别?

在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢复程序。

java-02-01

java-02-02

NoClassDefFoundError 和 ClassNotFoundException 有什么区别?

  • ClassNotFoundException的产生原因:
    Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都将导致该类被加载到JVM内存中,如果这个类在类路径中没有被找到,那么此时就会在运行时抛出ClassNotFoundException异常。
  • NoClassDefFoundError产生的原因:
    如果JVM或者ClassLoader实例尝试加载(可以通过正常的方法调用,也可能是使用new来创建新的对象)类的时候却找不到类的定义。要查找的类在编译的时候是存在的,运行的时候却找不到了。这个错误往往是你使用new操作符来创建一个新的对象但却找不到该对象对应的类。这个时候就会导致NoClassDefFoundError。

3. 谈谈final、finally、 finalize有什么不同?

  • final 可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)。
  • finally 则是 Java 保证重点代码一定要被执行的一种机制。我们可以使用 try-finally 或者 try-catch-finally 来进行类似关闭 JDBC 连接、保证 unlock 锁等动作。
  • finalize 是基础类 java.lang.Object 的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用,并且在 JDK 9 开始被标记为 deprecated。

在以下 4 种特殊情况下,finally 块不会被执行:

  • 在 finally 语句块第一行发生了异常。 因为在其他行,finally 块还是会得到执行;
  • 在前面的代码中用了System.exit(int)已退出程序,exit 是带参函数;若该语句在异常语句之后,finally 会执行;
  • 程序所在的线程死亡;
  • 关闭 CPU。

Q.E.D.


Stay focused and work hard!