简单地在静态初始化器中抛出异常?

时间:2016-01-07 06:19:42

标签: java exception exception-handling initialization static-initializer

我正在进行一些练习,并对在静态初始化器中处理异常感到困惑。

在线共识似乎是:初始化者只能抛出未经检查的异常,或者在所有其他构造函数也声明异常时检查异常。

但是我不明白为什么:

  1. 为什么初始化程序只能抛出已检查的异常?为什么它必须由其他构造函数声明?如果我们不宣布例外,会发生什么,比如一步一步?
  2. 一个答案说"因为在您的来源中无法处理这些例外情况"。为什么会这样?人们不能抓住异常并有意义地处理它吗? Why doesn't Java allow to throw a checked exception from static initialization block?

    另一个回复说如果我们不为构造函数声明异常,那么将会有一个"无参数构造函数,它不会声明它会抛出任何东西"。我真的不理解"无参数构造函数"的部分。当初始化器只是抛出一个已检查的异常时,为什么会给我们一个无参数构造函数? Can initializer block throw exception?

    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");
      }
      }
      
    2. 谢谢!

0 个答案:

没有答案