1700449015
1700449016
在finally中处理return返回值,代码看上去很完美,都符合逻辑,但是执行起来就会产生逻辑错误,最重要的一点是finally是用来做异常的收尾处理的,一旦加上了return语句就会让程序的复杂度徒然提升,而且会产生一些隐蔽性非常高的错误。
1700449017
1700449018
与return语句相似,System.exit(0)或Runtime.getRuntime().exit(0)出现在异常代码块中也会产生非常多的错误假象,增加代码的复杂性,读者有兴趣可以自行研究一下。
1700449019
1700449020
注意 不要在finally代码块中出现return语句。
1700449021
1700449022
1700449023
1700449024
1700449026
编写高质量代码:改善Java程序的151个建议 建议114:不要在构造函数中抛出异常
1700449027
1700449028
Java的异常机制有三种:
1700449029
1700449030
Error类及其子类表示的是错误,它是不需要程序员处理也不能处理的异常,比如VirtualMachineError虚拟机错误,ThreadDeath线程僵死等。
1700449031
1700449032
RuntimeException类及其子类表示的是非受检异常,是系统可能会抛出的异常,程序员可以去处理,也可以不处理,最经典就是NullPointerException空指针异常和IndexOutOfBoundsException越界异常。
1700449033
1700449034
Exception类及其子类(不包含非受检异常)表示的是受检异常,这是程序员必须处理的异常,不处理则程序不能通过编译,比如IOException表示I/O异常,SQLException表示数据库访问异常。
1700449035
1700449036
我们知道,一个对象的创建要经过内存分配、静态代码初始化、构造函数执行等过程,对象生成的关键步骤是构造函数,那是不是也允许在构造函数中抛出异常呢?从Java语法上来说,完全可以在构造函数中抛出异常,三类异常都可以,但是从系统设计和开发的角度来分析,则尽量不要在构造函数中抛出异常,我们以三种不同类型的异常来说明之。
1700449037
1700449038
(1)构造函数抛出错误是程序员无法处理的
1700449039
1700449040
在构造函数执行时,若发生了VirtualMachineError虚拟机错误,那就没招了,只能抛出,程序员不能预知此类错误的发生,也就不能捕捉处理。
1700449041
1700449042
(2)构造函数不应该抛出非受检异常我们来看这样一个例子,代码如下:
1700449043
1700449044
class Person{
1700449045
1700449046
public Person(int_age){
1700449047
1700449048
//不满18岁的用户对象不能建立
1700449049
1700449050
if(_age<18){
1700449051
1700449052
throw new RuntimeException(“年龄必须大于18岁。”);
1700449053
1700449054
}
1700449055
1700449056
}
1700449057
1700449058
//看限制级的电影
1700449059
1700449060
public void seeMovie(){
1700449061
1700449062
System.out.println(“看限制级电影”);
1700449063
1700449064
}
[
上一页 ]
[ :1.700449015e+09 ]
[
下一页 ]