这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战java
在 Java 中,全部的异常都有一个共同的祖先 java.lang.Throwable
类。数组
Throwable
类有两个重要的子类:Exception
(异常)、Error
(错误),它们各自都包含大量子类;markdown
Exception
能被程序自己处理 (try-catch
),Error
是没法处理的 (只能尽可能避免);post
Error
:Error
属于程序没法处理的错误,咱们没办法经过 catch
来进行捕获。例如,Java 虚拟机运行错误 (Virtual MachineErro)、虚拟机内存不够错误 (OutOfMemoryError) 、类定义错误 (NoClassDefFoundError) 等。这些异常发生时,Java 虚拟机通常会选择线程终止。Exception
:程序自己能够处理的异常,能够经过 catch
来进行捕获。Exception
有能够分为 受检查异常 (必须处理) 和 不受检查异常 (能够不处理)。
catch
/throw
处理的话,就没办法经过编译;RuntimeException
及其子类之外,其余的 Exception
类及其子类都属于受检查异常;IOException
、ClassNotFoundException
、SQLException
……RunntimeException
及其子类统称为不受检查异常;NullPointerException
(空指针异常)、NumberFormatException
(字符串转换为数字)、ArrayIndexOutOfBoundsException
(数组下标越界)、ClassCastException
(类型转换异常)、ArithmeticException
(算数错误) 等。try
块:用于捕获异常,其后可接零个或多个 catch
块,若是没有 catch
块,则必须跟一个 finally
块;spa
catch
块:用于处理 try 捕获到的异常;线程
finally
块:不管是否捕获或处理异常,finally
块里的语句都会被执行。当在 try
块或 catch
块中遇到 return
语句时,finally
语句块将在方法返回以前被执行指针
public static int test(){
try{
return 5;
} catch (Exception e){
e.printStackTrace();
} finally{
return 8;
}
}
// 最后返回的是:8
复制代码
** 如下三种特殊状况下,finally
将不会被执行:code
try
或 catch
块中用了 System.exit(0)
退出程序;