Понимание проверенных и непроверенных исключений в Java

Джошуа Блох в « 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, когда мне следует создать проверенный исключение, и когда это должно быть исключение во время выполнения?

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

659
задан TylerH 9 July 2019 в 18:47
поделиться