Java核心技术梳理-异常处理
目录
try{ //业务代码} catch(IOException ex){ //错误处理 } catch(Exception ex){ //错误处理代码}
当try块代码出错时,系统生成一个异常对象,并将对象抛给运行环境,这个过程叫做抛出异常,运行环境接收到异常对象是,会寻找处理该异常对象的catch代码块,找到合适的catch块,就将对象给其处理,如果找不到,则运行环境终止,程序也将退出。
2.2 异常类继承体系
Java提供了丰富的异常类,这些异常类有严格的继承关系
从这个图可以看出异常主要分为两类,Error与Exception,Error错误一般是指与虚拟机相关的问题,如系统崩溃、虚拟机错误,这些错误无法恢复或不可能捕获,将导致应用程序崩溃,这些不需要我们去捕获。
在捕获异常时我们通常把Exception类放在最后,因为按照异常捕获的机制,从上至下判断该异常对象是否是catch中的异常类或其异常子类,一旦比较成功则用此catch进行处理。如果将Exception类放在前面,那么就会进行直接进入其中,因为Exception类是所有异常类的父类,那排在它后面的异常类将永远得不到执行的机会,这种机制我们称为先小后大。
2.3 多异常捕获
Java 7 开始,一个catch块中可以捕获多种类型的异常:
public static void main(String[] args) { try { Integer a = Integer.parseInt(args[0]); Integer b = Integer.parseInt(args[1]); Integer c = a / b; System.out.println(c); } catch (IndexOutOfBoundsException | NumberFormatException | ArithmeticException ie) { //异常变量默认final,不能重新赋值 ie = new ArithmeticException("text"); } catch (Exception ex) { } }
多个异常之间用竖线(|)隔开,并且异常变量默认final,不能重新赋值。
2.4 获取异常信息
异常捕获后我们想要查看异常信息,可以通过catch后的异常形参来获得,常用的方法如下:
-
getMessage():返回异常的详细描述字符串。
-
getStackTrace():返回异常跟踪栈信息。
-
printStackTrace():将异常跟踪栈信息按照标准格式输出。
-
printStackTrace(PrintStream p):将异常跟踪栈信息输出到指定输出流。
try{ //业务代码}catch(XXXException xx){ //异常处理}catch(XXXException xx){ }finally{ //资源回收}
在异常处理中,try是必须的,没有try块,后面的catch和finally没有意义,catch和finally必须出现一个,finally块必须是最后。
如果try