2012-02-14 4 views
1

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

Метод B является чем-то вроде, как показано ниже:

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

Да, 'SomeException' является подклассом' RuntimeException'. –

ответ

2

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

Также обратите внимание, что вы можете просто удалить throws SomeException в этом случае. Подробнее here.

1

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

Посмотрите на этот учебник - Unchecked Exceptions.

0

Даже если 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.

Смежные вопросы