java异常处理机制详解-通俗易懂
文章目录
1. 异常之结构
1.1 Throwable
说到java异常,Throwable不得不提。Throwable是所有异常的父类。它有两个重要的子类:Error(错误)和 Exception(异常),两者都包含了大量的异常处理类。
1.1.1 Error
Error一般为系统级别异常,程序本身无法处理的错误,比如OutOfMemoryError、NoClassDefFoundError等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
1.1.2 Exception
Exception是程序本身可以处理的异常,程序中应当尽可能去处理这些异常。
Exception又分为两类:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
如果希望自定义一个检查性异常类,则需要继承 Exception 类。
如果你想自定义一个运行时异常类,那么需要继承 RuntimeException 类。
1.1.2.1 受检异常(CheckedException)
受检异常即为编译异常,在编译的时候必须处理异常,否则编译报错。
常见的受检异常如下:
IOException:一般是在读写数据的时候会出现。常见的IOException有FileNotFoundException、EOFException等。
SQLException:一般是在与数据库交互的时候会出现。
1.1.2.2 非受检异常(Unchecked Exception)
非受检异常即为运行时异常(RuntimeException),表示JVM在运行期间可能出现的错误,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理或不处理。
常见的运行时异常如下:
NullPointerException:程序调用的对象未初始化或对象不存在。
ClassNotFoundException:指该类不存在。
IndexOutOfBoundsException:指索引下标越界。
NumberFormatException:指数字转换异常,一般为要转换的数据不符合数字格式。
NoSuchMethodError:指程序调用的方法不存在。
ArrayIndexOutOfBoundsException:指对数组进行处理的时候,数组下标取值超出了数组的范围。
2. 异常之处理
java的异常处理分为抛出异常和捕获异常。
2.1 抛出异常
java异常抛出分为throw和throws。
2.1.1 throw
throw在方法内调用将异常抛出,后面的代码将不被执行。
public void methodName(String params){
//do something...
throw new ExceptionName();
}
2.1.2 throws
throws在方法声明时抛出异常,表示该方法无法处理该异常,将异常交给调用者去处理。
public void methodName(String params) throws Exception{
//do something...
}
2.2 捕获异常
java一般通过try{…}catch(){…}finally{…}来捕获异常。
public void methodName(String params){
try{
//do something...
} catch(Exception e) {
//do something...
} finally {
//do something...
}
}
2.2.1 try
try的作用为将可能发生异常的代码进行监听,若运行出现异常,则会抛出异常。其后可以接零个或者多个catch块。
2.2.2 catch
catch的作用为捕获try中抛出的异常,对异常进行处理。
2.2.3 finally
finally的作用为在try或catch块return之前调用执行,执行完成后才return。常用于释放资源等。
仅仅在下面几种情况下不会执行finally语句 :
①.如果在try 或catch语句中执行了System.exit(0)。
②.在执行finally之前jvm崩溃了。
③.try语句中执行死循环。
④.电源断电。
3. try,catch,finally执行顺序
- 首先执行try语句块,
a.若执行出现异常,则中断try语句执行,进入执行catch语句,然后执行return表达式,但不返回结果。
b.若执行没有异常,则接着执行try中return表达式,但不返回结果。 - 然后执行finally语句,
a.当finally语句没有return,执行完finally后返回try或catch中的执行结果。
b.当finally语句有return,则返回finally最后的执行结果。
4. 异常之输出
catch(Exception e)中的Exception是异常的异常类型,e则是形参。常用异常信息返回如下:
e.getCause():返回抛出异常的原因。
e.getMessage():返回异常信息。
e.printStackTrace():发生异常时,跟踪堆栈信息并输出。一般输出异常会利用log日志打印输出,不推荐此方法。
上一篇: 浏览器中在线预览pdf文件(不使用插件)
下一篇: Swagger入门通俗易懂