во время компиляции, как JVM может найти ненужный перехват CloneNotSupportedException, но не Exception? - PullRequest
1 голос
/ 07 декабря 2010

public class MyClass {
  public static void method() {
    try {
    // there is no compile time error for unnecessary catching 'Exception'
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {
    try {
      <b>// why compile time error for unnecessary catching 'MyException' or
      // 'CloneNotSupportedException' etc..
      // ultimately Exception, MyException &  CloneNotSupportedException all 
      // are checked exception
      </b>

    } catch (MyException e) {
      e.printStackTrace();
    }
  }
}
class MyException extends Exception {
}

second scenario
---------------
public class MyClass {
    public static void method() throws Exception {
    }

    public static void main(String[] args) {
        <b>// if Exception itself is not checked ,
        // why compile time error occured for calling method(); ??</b>
        method();
    }
}



Ответы [ 3 ]

3 голосов
/ 07 декабря 2010

Потому что RuntimeExceptions являются подклассами класса Exception.Следовательно, компилятор не может определить, генерирует ли какой-либо код какое-либо исключение времени выполнения, поскольку они могут быть сгенерированы jvm.С другой стороны, должны быть объявлены проверенные исключения, которые генерируются каким-либо методом, чтобы компилятор знал, какие исключения могут быть выброшены, и может определять ненужные блоки перехвата.

1 голос
/ 07 декабря 2010

Методы объявляют, какие исключения они выдают. Если вы перехватываете что-либо, что не является суперклассом каких-либо известных типов исключений, тогда перехват не требуется.

0 голосов
/ 07 декабря 2010

У нас есть проверенные исключения и непроверенные исключения.CloneNotSupportedException является проверенным исключением: если метод выдает его, вызывающая сторона должна перехватить этот тип исключения.И в этих случаях jvm может обнаружить, если он перехвачен, в то время как ни один метод внутри блока try никогда его не выбросит.

Exception Сам по себе не проверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...