我正在经历一些练习,并且对在静态初始化程序中处理异常感到非常困惑。
网上的共识似乎是:初始化器只能抛出未检查的异常,或者当所有其他构造函数也声明了异常时,才可以抛出已检查的异常。
但是我不明白为什么:
- 为什么初始化程序不能只抛出检查异常?为什么它必须由其他构造函数声明?如果我们不声明异常,会发生什么,就像一步一步一样?
一个答案是“因为无法在您的源代码中处理这些异常”。为什么会这样?人们不能只捕获异常并有意义地处理它吗?为什么 Java 不允许从静态初始化块中抛出已检查的异常?
另一个回应说,如果我们不为构造函数声明异常,将会有一个“没有声明它抛出任何东西的无参数构造函数”。我真的不明白“无参数构造函数”的部分。当初始化器简单地抛出一个检查异常时,为什么会给我们留下一个无参数的构造函数呢? 初始化程序块可以抛出异常吗?
第一个版本的代码可以工作,但第二个版本不行。
1. static { try { if(B <= 0 || H <= 0) { throw new Exception("Breadth and height must be positive"); } } catch(Exception e) { System.out.println(e); } 2. static { if(B <=0 || H<= 0){ throw new Exception("Breadth and height must be positive"); } }
谢谢!