前言: Java 中 Exception 继承自Throwable。在程序的编译、运行过程中,JVM检测、捕获这些异常,保证程序运行的健壮性。
Exception 分类
Exception 总共有两大类:
- Unchecked Exception(Runtime Exception)
- Checked Exception(非Runtime Exception)
提醒:所有的RuntimeException都是Unchecked Exception,其余的全是CheckedException.
区别:Unchecked 与Checked 区别在于,对于CheckedException,我们必须对其检查处理,也就是必须添加try…catch…捕获异常、或者throw 抛出异常。而对于UncheckedException,可以选择处理,也可以不处理。推荐不处理这些异常。
![](https://img.haomeiwen.com/i935378/0712e4e6c67992d0.png)
异常处理
- try 块:用于捕获异常。其后可接零个或多个catch块,若没有catch块,则必须跟一个finally块。
- catch 块:用于处理try捕获到的异常。
- finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。其实 finally 语句块是在 try 或者 catch 中的 return 语句之前执行的。更加一般的说法是,finally 语句块应该是在控制转移语句之前执行,控制转移语句除了 return 外,还有 break 和 continue。
在以下特殊情况下,finally块不会被执行:
1)在finally语句块中 发生了异常。
2)try或者catch中System.exit(0)退出程序。
3)程序所在的线程死亡。
4)计算机断电、失火、或遭遇病毒攻击
![](https://img.haomeiwen.com/i935378/08e6ceb80e0be4e3.png)
- 代码示例:
//该代码直接借用的@Dandan Meng 的,他写的很棒,我就没有再去创建
public class ExceptionTest
{
public static void main(String[] args)
{
int c = 0;
try
{
int a = 3;
int b = 0;
// 这块代码出现了异常 ,除数不能为0
c = a / b;
// 那么异常之后的代码都不会被执行
System.out.println("Hello World");
}
catch (ArithmeticException e)
{
e.printStackTrace();
}
finally
{
//不管有没有发生异常,finally语句块都会被执行
System.out.println("Welcome");
}
System.out.println(c);
// 当b为0时,有异常,输出为c的初始值0
}
}
小结
关于异常,知识点不是很多,网络上资料很全面,我写的这些大部分摘抄自网络,下面附上比较不错的参考博客
参考链接:
http://www.cnblogs.com/mengdd/archive/2013/02/03/2890923.html
https://docs.oracle.com/javase/8/docs/api/overview-tree.html
https://www.ibm.com/developerworks/cn/java/j-lo-finally/
网友评论