0

我正在经历一些练习,并且对在静态初始化程序中处理异常感到非常困惑。

网上的共识似乎是:初始化器只能抛出未检查的异常,或者当所有其他构造函数也声明了异常时,才可以抛出已检查的异常。

但是我不明白为什么:

  1. 为什么初始化程序不能只抛出检查异常?为什么它必须由其他构造函数声明?如果我们不声明异常,会发生什么,就像一步一步一样?

一个答案是“因为无法在您的源代码中处理这些异常”。为什么会这样?人们不能只捕获异常并有意义地处理它吗?为什么 Java 不允许从静态初始化块中抛出已检查的异常?

另一个回应说,如果我们不为构造函数声明异常,将会有一个“没有声明它抛出任何东西的无参数构造函数”。我真的不明白“无参数构造函数”的部分。当初始化器简单地抛出一个检查异常时,为什么会给我们留下一个无参数的构造函数呢? 初始化程序块可以抛出异常吗?

  1. 第一个版本的代码可以工作,但第二个版本不行。

    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");
    }
    }
    

谢谢!

4

0 回答 0