了解 Java 中的已检查异常与未选中异常
Joshua Bloch在“Effective Java”中说:
对可恢复条件使用已检验的异常,对编程错误使用运行时异常(第 2 版中的项目 58)
让我们看看我是否正确地理解了这一点。
以下是我对已检查异常的理解:
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. 运行时异常是未经检查的异常吗?
以下是我对未经检查的异常的理解:
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. 我应该冒泡确切的异常还是使用异常来掩盖它?
以下是我的阅读材料