1.finally中的代码和try-catch
finally中的代码和try-catch中的代码冲突时,finally中的代码一定会被执行且会忽略try-catch中的代码。
但是如果try-catch中有System.exit(0);(虚拟机退出语句),则不会去执行fianlly中的代码。另外如果try语句中含有return语句,finally语句在return语句执行后执行。
2.throws/throw处理方式:
1)throw 写在方法内,后面跟一个异常对象。
2)throws 在方法的定义中说明方法可能抛出的异常,后面跟异常类的名字,声明这个方法将不处理异常,把异常交给上一级方法处理。
3)调用时,调用者不能抛出范围更小的异常。
对于方法a,如果它定义了throws Exception。那么当它调用的方法b返回异常对象时,方法a并不处理,而将这个异常对象向上一级返回,如果所 有的方法均不进行处理,返回到主方法,如主方法也不进行处理,则到虚拟机中,程序中止。 如果在方法的程序中有一行throw new Exception(), 那么其后的程序不执行,如果没有对这个可能出现的检查结果进行处理,那么程序就会报错。
4)throws和throw没有必然的联系。
注意:
方法的覆盖中,如果子类的方法抛出的例外是父类方法抛出的例外的父类型,那么编译就会出错:子类无法覆盖父类。
子类抛出的例外或者与父类抛出的例外一致,或者是父类抛出例外的子类型,或者子类型不抛出例外。
如果父类型无throws时,子类型也不允许出现throws。此时只能使用try catch。
自定义异常:
a. 使其继承Exception或者RuntimeException。
b. 写构造器,直接调用父类的构造器