Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Оператор throws и исключения

#java


Всем привет, друзья! Хотелось бы спросить:
checked исключения, как я понял обязательно должны содержать оператор throws в сигнатуре
метода или обрабатываться в конструкции try, catch?
Подскажите пожалуйста, заранее спасибо!
    


Ответы

Ответ 1



Если написать что-то которое относится допустим к checked исключениям: тот же FileNotFoundException, то Idea вас попросит либо обернуть это в try, catch конструкцию либо вам нужно будет добавить в сигнатуру метода оператор throws и класс (FileNotFoundException) это для checked. А для unchecked вы можете написать: int a = 5; int b = 0; int c = a/b; System.out.print(c) //выведет Arithmetic exception, но так как Arithmetic exception это класс unchecked, Idea вас не будет просить обернуть это в конструкцию try, catch либо добавить оператор throws в сигнатуру метода потому что это UNCHECKED исключения

Ответ 2



Да, это все написано в спецификации, в главе 11 «Исключения». Виды исключений определены в §11.1.1 11.1.1. The Kinds of Exceptions ... Exception is the superclass of all the exceptions from which ordinary programs may wish to recover. The class RuntimeException is a direct subclass of Exception. RuntimeException is the superclass of all the exceptions which may be thrown for many reasons during expression evaluation, but from which recovery may still be possible. RuntimeException and all its subclasses are, collectively, the run-time exception classes. Error is the superclass of all the exceptions from which ordinary programs are not ordinarily expected to recover. Error and all its subclasses are, collectively, the error classes. The unchecked exception classes are the run-time exception classes and the error classes. The checked exception classes are all exception classes other than the unchecked exception classes. 11.1.1. Виды исключений ... Exception является суперклассом для всех исключений, от которых программы могут пожелать восстановиться. Класс RuntimeException является непосредственным наследником Exception. RuntimeException представляет собой суперкласс всех исключений, которые могут быть сгенерированы по разным причинам в процессе определения выражения, но восстановление после которых еще возможно. RuntimeException и его подклассы коллективно представляют собой классы исключений времени выполнения. Error является суперклассом всех исключений, при которых восстановление обычных программ невозможно. Error и его подклассы коллективно представляют собой классы ошибок. Классами непроверяемых исключений являются классы исключений времени выполнения и ошибок. Классами проверяемых исключений являются все классы исключений, кроме проверяемых. Проверяемое исключение должно быть либо поймано, либо определено в throws метода или конструктора, в противном случае возникает ошибка компиляции. При этом в throws может быть определено Это описано в §11.2.3 11.2.3. Exception Checking It is a compile-time error if a method or constructor body can throw some exception class E when E is a checked exception class and E is not a subclass of some class declared in the throws clause of the method or constructor. 11.2.3. Проверка исключений Если тело метода или конструктора может генерировать некоторый класс исключений E, где E — класс проверяемого исключения и E не является подклассом некоторого класса, объявленного в конструкции throws метода или конструктора, то генерируется ошибка компиляции. Какие блоки и в каких случаях могут генерировать те или иные исключения описано в §11.2.1 и §11.2.2. Для лучшего понимания, советую прочитать всю 11-ю главу, она достаточно коротка, содержит примеры и полно описывает работу с исключениями в Java.

Комментариев нет:

Отправить комментарий