Java异常类层次结构图:Exception和Error有什么区别?

大家好,我叫向导。秋季招聘来了,我对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");
}

图片[1]-Java异常类层次结构图:Exception和Error有什么区别?-唐朝资源网

输出:

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

图片[2]-Java异常类层次结构图:Exception和Error有什么区别?-唐朝资源网

请问代码在

终于被处决了?

不一定!在某些情况下,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面试题/知识点收集

技术要点:

相关文章:

© 版权声明
THE END
喜欢就支持一下吧
点赞183赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容