异常对象两个重要的方法:
- 获取异常简单的描述信息:
String msg = exception.getMessage();
获取简短的异常信息。如果new异常时有形参,则msg为形参。
- 打印异常追踪的堆栈信息:
exception.printStackTrace();
异常的堆栈信息采用了异步线程的方式。
异常对象使用方法
- 建议捕捉异常以后调用printStackTrace方法,不然实际发生异常时我们并不知道。
- 我们以后查看异常的追踪信息,我们应该怎么看,可以快速的调试程序呢?
异常信息追踪信息,从上往下一行一行看。
但是需要注意的是:SUN写的代码就不用看了(看包名就知道是不是SUN公司写的代码)。主要的问题是出现在自己编写的代码上。
finally用来做什么?
通常在finally语句块中完成资源的释放/关闭。
try和finally的执行顺序
如果try语句中有return,则会先执行try语句,再执行finally,最后执行return。
final、finally、finalize的区别
final是一个关键字,可用于修饰变量、方法、类。其修饰的变量只能赋值一次,修饰的方法不能被重写,修饰的类不能被继承。
finally用于try语句中,表示执行完try语句中一定会执行的语句块。
finalize是Object类的一个方法,由JVM的GC(垃圾回收)机制自动调用。
自定义异常
- 编写一个类继承Exception或者RuntimeException.
- 提供两个构造方法,一个无参数的,一个带有String参数的。
public class MyException extends Exception{//编译时异常
public MyException(){
}
public MyException( String s){
super(s);
}
- 如果想自定义运行时异常,继承RuntimeException类即可。
运行时异常和编译时异常
- 除了RuntimeException,直接继承Exception类的为编译时异常,继承RuntimeException的为运行时异常。
- 编译时异常必须在代码中显式处理,如继续throws或者try捕获,而运行时异常可以不用在代码中处理。
继承类重写方法中的异常
子类重写方法不能比父类抛出更多(更宽泛