简单介绍一下java的异常处理机制,主要参考了某机构的教材
简单说就是当程序出现异常,java虚拟机会先去看是否异常被捕获,即异常代码是否被try...catch包裹,如果存在则去查找对应的catch的错误,然后去执行对应的异常处理方式。
例如:
以上的catch可以写不同的错误类,如:NullPointerException,ClassNotFoundException等。可以对应来捕获异常,如:
try{
...
}catch(NullPointerException e){
...
}catch(RuntimeException e){
...
}catch(Exception e){
...
}finally{
...
}
注意,以上catch的错误类型是有包含关系的。
就像上面的,NullPointerException属于RuntimeException,而RuntimeException属于Exception。
常见的RuntimeException主要有以下几个:
IllegalArgumentException(传参不合法);NullPointerException(空指针异常);ArrayIndexOutOfBoundsException(数组越界);ClassCastException(类转换异常);NumberFormatException(字符串转换数值异常)等。
另外也可以自定义异常处理。如:
class 异常类名 extends Exception{
...
}
需要说明的还有异常类Exception有三个常用方法,可以在catch中使用:
1、printStackTrace输出错误信息,用来输出错误堆栈中的信息。使用如:
try{
..
}catch(Exception e){
e.printStackTrace();
}
2、getMessage可以获得错误信息。
try{
..
}catch(Exception e){
System.out.println(e.getMessage());
}
3、getCause获得出现异常的原因。
但是如果异常未捕获则,在执行完finally代码块之后,当前线程所属的ThreadGroup的uncaughtException方法被调用之后,遇到异常的当前现成被终止。
以上为捕获异常的处理,还有一种是主动抛出异常的处理,如:
try{
...
}catch(Exception e){
throw e;
}
这样抛出必须得再自己捕获处理。
另外这个throw可以在任意位置throw new Exception(),然后再自己捕获,正好可以测试错误处理。
或者
public static void stringToDate(String str) throws ParseException{
...
}
抛出到调用该方法的地方来处理。
以上!