Java-метод содержит другой метод выдает исключение

Внутри метода A есть метод B. Метод B выдает исключение, но метод A скомпилирован, даже если он не перехватывает исключение или выдает исключение, возможно ли это?

Метод B выглядит примерно так:

MethodB() throws SomeException{
   if(Some)
        doneSomething
        return
   else if(some)
        donesomethingElse
        return 
   throw SomeException  
}

3 ответа

Решение

Если SomeException продолжается RuntimeException, Тогда вам не нужно ловить его, даже если подпись выглядит так.

Также обратите внимание, что вы можете просто удалить throws SomeException в таком случае. Узнайте больше здесь.

Да, есть неконтролируемое исключение, которое не может быть поймано / переброшено.

Посмотрите на этот урок - непроверенные исключения.

Даже если SomeException это проверенное исключение, это может произойти из-за отдельной компиляции.

Предположим, вы пишете класс:

public class B {
  public static void foo() {
  }
}

Затем класс, который вызывает это:

public class A {
  public static void main(String[] args) {
    B.foo();
  }
}

Тогда скажи:

javac A.java
java A

Все хорошо. Теперь измените B:

public class B {
  public static void foo() throws java.io.IOException {
    throw new java.io.IOException();
  }
}

И на этот раз просто скомпилируйте B перед запуском:

javac B.java
java A

Ты получаешь:

Exception in thread "main" java.io.IOException
    at B.foo(B.java:4)
    at A.main(A.java:4)

В реальном мире это происходит, когда отдельные файлы.jar обновляются после того, как они были изменены сопровождающими, которые не понимают проблем, вызванных добавлением большего количества файлов. throws статьи.

Другие вопросы по тегам