Понимание проверенных и непроверенных исключений в Java - PullRequest
658 голосов
/ 24 мая 2011

Джошуа Блох в « Effective Java » сказал, что

Используйте проверенные исключения для восстанавливаемых условий и исключения времени выполнения для ошибок программирования (Элемент 58 во 2-й редакции)

Посмотрим, правильно ли я понимаю.

Вот мое понимание проверенного исключения:

try{
    String userInput = //read in user input
    Long id = Long.parseLong(userInput);
}catch(NumberFormatException e){
    id = 0; //recover the situation by setting the id to 0
}

1.Вышеуказанное рассматривает проверенное исключение?

2.Является ли RuntimeException непроверенным исключением?

Вот мое понимание непроверенного исключения:

try{
    File file = new File("my/file/path");
    FileInputStream fis = new FileInputStream(file);   
}catch(FileNotFoundException e){

//3. What should I do here?
    //Should I "throw new FileNotFoundException("File not found");"?
    //Should I log?
    //Or should I System.exit(0);?
}

4.Не может ли приведенный выше код быть проверенным исключением?Я могу попытаться восстановить ситуацию, как это?Могу я? (Примечание: мой третий вопрос находится внутри catch выше)

try{
    String filePath = //read in from user input file path
    File file = new File(filePath);
    FileInputStream fis = new FileInputStream(file);   
}catch(FileNotFoundException e){
    //Kindly prompt the user an error message
    //Somehow ask the user to re-enter the file path.
}

5.Почему люди делают это?

public void someMethod throws Exception{

}

Почему они позволяют всплыть исключению?Разве обработка ошибок не быстрее, лучше?Зачем пузыриться?

6.Должен ли я вспомнить точное исключение или замаскировать его с помощью исключения?

Ниже приведены мои показания

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

Когда выбирать отмеченные и непроверенные исключения

Ответы [ 21 ]

0 голосов
/ 08 апреля 2014

Если кому-то нужно еще одно доказательство неприязни к проверенным исключениям, см. Первые несколько абзацев популярной библиотеки JSON:

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

Так почему же в мире кто-то может заставить разработчиков продолжать проверять исключение, если мы вместо этого должны «просто обернуть его»? лол

http://developer.android.com/reference/org/json/JSONException.html

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