大家好,我叫向导。秋季招聘来了,我对JavaGuide的内容进行了重构和完善,同步最新更新,希望对大家有所帮助。
前两篇:
例外
Java异常类层次图概览:
异常和错误有什么区别?
在 Java 中,所有异常都有一个共同的祖先,即 java.lang 包中的 Throwable 类。 Throwable 类有两个重要的子类:
Checked Exception 和 Unchecked Exception 有什么区别?
Checked Exception 是一个已检查的异常。在Java代码的编译过程中,如果被检查的异常没有被catch或throws关键字处理,则无法通过编译。
例如如下IO操作代码:
除了 RuntimeException 及其子类,其他的 Exception 类及其子类都是检查异常。常见的检查异常有:IO相关异常、ClassNotFoundException、SQLException…。
Unchecked Exception 表示未经检查的异常。在Java代码的编译过程中,即使不处理unchecked exception也可以正常编译。
RuntimeException 及其子类统称为未经检查的异常。常见的有(建议写下来,日常开发中会经常用到):
Throwable 类的常用方法有哪些? try-catch-finally 是如何使用的?
代码示例:
try {
System.out.println("Try to do something");
throw new RuntimeException("RuntimeException");
} catch (Exception e) {
System.out.println("Catch Exception -> " + e.getMessage());
} finally {
System.out.println("Finally");
}
输出:
Try to do something
Catch Exception -> RuntimeException
Finally
注意:不要在 finally 块中使用 return!当 try 语句和 finally 语句都有 return 语句时,try 块中的 return 语句将被忽略。这是因为try语句中的return返回值会暂时保存在一个局部变量中,当finally语句中的return被执行时,这个局部变量的值就变成finally语句中的返回值了。
明确提到:
如果 try 子句执行返回,编译后的代码会执行以下操作:
将返回值(如果有)保存在局部变量中。对 finally 子句的代码执行 jsr。从 finally 子句返回时,返回保存在局部变量中的值。
代码示例:
public static void main(String[] args) {
System.out.println(f(2));
}
public static int f(int value) {
try {
return value * value;
} finally {
if (value == 2) {
return 0;
}
}
}
输出:
0
请问代码在
终于被处决了?
不一定!在某些情况下,finally 中的代码不会被执行。
例如,如果虚拟机在 finally 之前终止,finally 中的代码将不会被执行。
try {
System.out.println("Try to do something");
throw new RuntimeException("RuntimeException");
} catch (Exception e) {
System.out.println("Catch Exception -> " + e.getMessage());
// 终止当前正在运行的Java虚拟机
System.exit(1);
} finally {
System.out.println("Finally");
}
输出:
Try to do something
Catch Exception -> RuntimeException
另外,在以下两种特殊情况下,finally块的代码不会被执行:
程序运行的线程死了。关闭 CPU。
相关问题:.
分类:
Java面试进阶指南Java面试题/知识点收集
技术要点:
相关文章:
暂无评论内容