JAVA高级(2)—— 异常机制

2018-01-02  本文已影响19人  AndroidMaster

一、基础

1、JAVA异常

1.1、Runtime异常

1)非Checked异常,所有RuntimeException及其子类的实例。
2)可以try...catch处理。

1.2、Checked异常

1)非Runtime异常的异常。
2)必须显示处理,否则编译不通过。

1.3、异常处理方式

一旦某个catch捕获到匹配,进入异常处理代码,其他catch不再有机会捕获,因此捕获小异常应该在前,捕获大异常应该在后。

1.4、小结

在以下4种特殊情况下,finally块不会被执行
1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。

2、自定义异常

1、继承Exception(Checked异常)或者RuntimeException(Runtime异常)
2、有2个构造器,无参和入参是一个字符串,该字符串就是getMessage()返回的值

3、重要方法

getStackTrace()   StackTraceElement[]     //返回异常跟踪栈信息
printStackTrace()    //将异常跟踪栈信息输出到标准错误输出
printStackTrace(PrintStream s)     //将异常跟踪栈信息输出到指定的输出流

4、StackTraceElement

主要包含发生异常的文件名,类名,方法名,行数等信息
Thread.getStackTrace() StackTraceElement[] //此方法返回StackTraceElement数组,每个元素代表一个堆栈帧。
Thread.currentThread().getStackTrace()[0].getClassName()//得到当前线程的名字
new Exception().getStackTrace()[0] //得到的是当前类的名字
Thread.currentThread().getStackTrace()[1].getClassName() //得到的是当前类的名字
new Exception().getStackTrace()[1] //得到调用类的名字
Thread.currentThread().getStackTrace()[2].getClassName() //得到调用类的名字

用途
1)我们可以封装一个日志库,在打印目标日志的时候,也可以通过这个调用栈打印出这个日志所在的行数,
这样就可以迅速的定位到日志输出行。
2)如果我们写了一个SDK,希望某个方法在固定的位置被调用,我们也可以在这个方法被调用的时候,
进行检查,看这个方法的调用位置是否正确
3)我们在进行源码分析的时候,如果想分析整个代码的执行流程,我们可以进行通过打印栈的信息来获取,
这个在源码分析的时候还是挺有用的。

5、常见异常

RuntimeException子类
1)java.lang.ArrayIndexOutOfBoundsException
2)java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。
3)java.lang.NullPointerException
4)java.lang.ClassNotFoundException

二、try catch finally的返回值问题

参考文献

深入理解java异常处理机制

上一篇 下一篇

猜你喜欢

热点阅读