建议114:不要在构造函数中抛出异常 Java异常的机制有三种:Error类及其子类表示的是错误,它是不需要程序员处理也不能处理的异常,比如VirtualMachineError虚拟机错误,ThreadDeath线程僵死等。RunTimeException类及其子类表示的是非受 ...
建议114:不要在构造函数中抛出异常
Java异常的机制有三种:
- Error类及其子类表示的是错误,它是不需要程序员处理也不能处理的异常,比如VirtualMachineError虚拟机错误,ThreadDeath线程僵死等。
- RunTimeException类及其子类表示的是非受检异常,是系统可能会抛出的异常,程序员可以去处理,也可以不处理,最经典的就是NullPointException空指针异常和IndexOutOfBoundsException越界异常。
- Exception类及其子类(不包含非受检异常),表示的是受检异常,这是程序员必须处理的异常,不处理则程序不能通过编译,比如IOException表示的是I/O异常,SQLException表示的数据库访问异常。
我们知道,一个对象的创建过程经过内存分配,静态代码初始化、构造函数执行等过程,对象生成的关键步骤是构造函数,那是不是也允许在构造函数中抛出异常呢?从Java语法上来说,完全可以在构造函数中抛出异常,三类异常都可以,但是从系统设计和开发的角度来分析,则尽量不要在构造函数中抛出异常,我们以三种不同类型的异常来说明之。
(1)、构造函数中抛出错误是程序员无法处理的
在构造函数执行时,若发生了VirtualMachineError虚拟机错误,那就没招了,只能抛出,程序员不能预知此类错误的发生,也就不能捕捉处理。
(2)、构造函数不应该抛出非受检异常
我们来看这样一个例子,代码如下:
class Person { public Person(int _age) { // 不满18岁的用户对象不能建立 if (_age < 18) { throw new RuntimeException("年龄必须大于18岁."); } } public void doSomething() { System.out.println("doSomething......"); }}
原标题:编写高质量代码:改善Java程序的151个建议(第8章:异常___建议114~117)
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。