2015-01-25 5 views
1

Я читаю книгу Сьерра Кете SCJP 6, и я упал в противоречие:Противоречие между главенствующими и исключением

Первостепенной метод может бросить более узкие или меньше исключений. Просто потому, что переопределенный метод «принимает риски» не означает, что исключение переопределяющего подкласса принимает одинаковые риски. Итог: метод переопределения не должен объявлять исключения, которые он никогда не будет бросать, независимо от того, что объявляет переопределенный метод .

Означает, что если наиважнейший метод может бросить исключение, если тот же метод из подкласса бросил Exeption, но после тестирования я обнаружил, что его невозможен для любого исключения, как исключение или SQLException или IOException. Но какой-того исключение такого NullPointerException она прекрасно работает

+0

Вы должны прочитать об Исключениях на Java, а также (желательно) прочитать документацию Oracle по [Throwable] (http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html) чтобы понять, что происходит между исключениями (проверенными), ошибками и непроверенными исключениями. – ha9u63ar

+0

Да, это глава 5 книги. Спасибо –

ответ

3

Важнейший метод не может расширить набор проверил исключение, что базовая декларация бросков. Потому что, если вы вызываете метод, как объявлено в базовом классе, вы не можете обрабатывать исключения, созданные подклассом, о котором вы не знаете.

A NullPointerException является unchecked exception. Любой метод может его бросить; он не должен быть в объявлении throws.

1

В книге рассказывается об отмеченных исключениях, только о том, что должен быть объявлен.

Исключено из исключений RuntimeExceptionне отмечено, что означает, что вы можете выбросить его без объявления.

0

Любой наиважнейшая метод может объявить бросить любую бесконтрольно исключение:

class Parent { 
    abstract void m1() throws IOException {} 
} 

class Child { 
    @Override void m1() throws IllegalArgumentException {} 
} 

Заявленные непроверенные исключения не входят подпись метода и, как правило, игнорируются компилятором. Тем не менее, они могут быть допущены для целей документации.

Вышеприведенное правило имеет смысл, поскольку метод может вызывать любое исключение, независимо от того, объявляет оно это или нет.

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