Java异常学习笔记----异常处理机制
上一篇 Java异常学习笔记(一) 下一篇 Java异常学习笔记(二)Java异常处理分为两大方法
a. try...catch...finally方式
b. throws方式
下面将详细阐述这两种方式以及它们的区别。
try... catch...finally方式
try...catch...finally的代码结构
trytry...catch...finally变种结构:
{
//可能出现异常的代码
}
catch(异常类名 异常名)
{
//异常处理
}
finally
{
//此处一般为了释放资源
}
try...catch...可选finally
try{ //... }try...mutil-catch... 可选finally
catch{ //... }
try{ //... }try...finally
catch{ //... }
...
catch{ //... }
不适合编译时异常
try{ //... }
finally{ //... }
下面是API中一个示例代码:
class MyClass {根据出错信息,我们可以确定发生的是NullPointerException,继承自RuntimeException,属于运行时异常。
public static void main(String[] args) {
crunch(null);//60行
}
static void crunch(int[] a) {
mash(a);//64行
}
static void mash(int[] b) {
System.out.println(b[0]);//67行
}
}
编译并不报错,运行出错(也说明这是运行时异常)。之后我们
添加try...catch包围出错的位置:
public static void main(String[] args) {
try{
crunch(null);
}catch (NullPointerException e)
{
//这里进行处理
System.out.println("数组访问异常");
}
}
注意:
1. try中的代码应该尽量少:因为try中的代码块消耗更多的虚拟机资源。
2. catch中不能空白:cath中必须有清晰的异常处理代码,不然会掩盖程序的异常,使程序难以调试。
3.try不一定能执行完:try中的代码执行时,一旦遇到异常,便放弃执行后续代码,立即跳转进入catch异常处理。所以try只能捕获一个异常,即使代码中可能有多个异常会产生。
4.catch是有序的:在有多个catch时,JVM会将程序中实际抛出的异常与catch中的异常按顺序逐个比较。所以必须是低等级异常在前,父级异常在后,平级异常没有先后。
另一种方式在后面继续。