我正在进行一些练习,并对在静态初始化器中处理异常感到困惑。
在线共识似乎是:初始化者只能抛出未经检查的异常,或者在所有其他构造函数也声明异常时检查异常。
但是我不明白为什么:
一个答案说"因为在您的来源中无法处理这些例外情况"。为什么会这样?人们不能抓住异常并有意义地处理它吗? Why doesn't Java allow to throw a checked exception from static initialization block?
另一个回复说如果我们不为构造函数声明异常,那么将会有一个"无参数构造函数,它不会声明它会抛出任何东西"。我真的不理解"无参数构造函数"的部分。当初始化器只是抛出一个已检查的异常时,为什么会给我们一个无参数构造函数? Can initializer block throw exception?
第一个版本的代码可以使用,但第二个版本不会。
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");
}
}
谢谢!