java异常体系梳理

目录

    • 一 异常处理机制主要回答了三个问题
    • 二 异常体系
      • 2.1 常见Error及Exception
    • 三 异常处理机制
      • 3.1 throw和throws
      • 3.2 关于cry-catch-finally:
      • 3.3 异常处理原则

一 异常处理机制主要回答了三个问题

What:异常类型回答了什么被抛出;
where:异常堆栈跟踪回答了在哪抛出;
why:异常信息回答了为什么被抛出;

二 异常体系

Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理。
java异常体系梳理_第1张图片

2.1 常见Error及Exception

RuntimeException
java异常体系梳理_第2张图片
非RuntimeException
在这里插入图片描述
error
java异常体系梳理_第3张图片
其中NoClassDefFoundError的成因有:
1、类依赖的class或jar不存在(比如在spring中漏掉了某个jar包,没有引入)
2、类文件存在但是在不同的域中(对应的class在classpath中不可用,或者有多个不同的类加载器)
3、大小写问题。javac编译的时候无视大小写。有可能编译出来的class文件与想要的不一样。

三 异常处理机制

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

捕捉异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。

3.1 throw和throws

throws:通常被用在声明方法时,用来指定方法可能抛出的异常,多个异常可使用逗号分隔。throws关键字将异常抛给上一级,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。
例如:
在这里插入图片描述
throw:通常用在方法体中或者用来抛出用户自定义异常,并且抛出一个异常对象。程序在执行到throw语句时立即停止,如果要捕捉throw抛出的异常,则必须使用try-catch语句块或者try-catch-finally语句。
例如:java异常体系梳理_第4张图片

3.2 关于cry-catch-finally:

java异常体系梳理_第5张图片
关于try-catch的性能
设计方法
java异常体系梳理_第6张图片
通过运行可依发现cry-catch满于if-else,原因如下:
java异常体系梳理_第7张图片

3.3 异常处理原则

java异常体系梳理_第8张图片

你可能感兴趣的:(java异常)