打字猴:1.700448985e+09
1700448985
1700448986 //正常抛出异常
1700448987
1700448988 throw new RuntimeException();
1700448989
1700448990 }finally{
1700448991
1700448992 //告诉JVM:该方法正常返回
1700448993
1700448994 return;
1700448995
1700448996 }
1700448997
1700448998 }
1700448999
1700449000 public static void main(String[]args){
1700449001
1700449002 try{
1700449003
1700449004 doSomething();
1700449005
1700449006 }catch(RuntimeException e){
1700449007
1700449008 System.out.println(“这里永远都不会到达!”);
1700449009
1700449010 }
1700449011
1700449012 }
1700449013
1700449014 上面finally代码块中的return已经告诉JVM:doSomething方法正常执行结束,没有异常,所以main方法就不可能获得任何异常信息了。这样的代码会使可读性大大降低,读者很难理解作者的意图,增加了修改的难度。
1700449015
1700449016 在finally中处理return返回值,代码看上去很完美,都符合逻辑,但是执行起来就会产生逻辑错误,最重要的一点是finally是用来做异常的收尾处理的,一旦加上了return语句就会让程序的复杂度徒然提升,而且会产生一些隐蔽性非常高的错误。
1700449017
1700449018 与return语句相似,System.exit(0)或Runtime.getRuntime().exit(0)出现在异常代码块中也会产生非常多的错误假象,增加代码的复杂性,读者有兴趣可以自行研究一下。
1700449019
1700449020 注意 不要在finally代码块中出现return语句。
1700449021
1700449022
1700449023
1700449024
1700449025 编写高质量代码:改善Java程序的151个建议 [:1700438188]
1700449026 编写高质量代码:改善Java程序的151个建议 建议114:不要在构造函数中抛出异常
1700449027
1700449028 Java的异常机制有三种:
1700449029
1700449030 Error类及其子类表示的是错误,它是不需要程序员处理也不能处理的异常,比如VirtualMachineError虚拟机错误,ThreadDeath线程僵死等。
1700449031
1700449032 RuntimeException类及其子类表示的是非受检异常,是系统可能会抛出的异常,程序员可以去处理,也可以不处理,最经典就是NullPointerException空指针异常和IndexOutOfBoundsException越界异常。
1700449033
1700449034 Exception类及其子类(不包含非受检异常)表示的是受检异常,这是程序员必须处理的异常,不处理则程序不能通过编译,比如IOException表示I/O异常,SQLException表示数据库访问异常。
[ 上一页 ]  [ :1.700448985e+09 ]  [ 下一页 ]