约书亚·布洛赫在《有效的Java》中说过
为以下情况使用检查异常 可恢复条件和运行时 编程错误的例外 (第二版第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. 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. 现在,上面的代码不能也是一个受控异常吗?我可以试着挽回这样的局面吗?我可以吗?(注:我的第三个问题在上面的陷阱里)
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中,什么时候应该创建检查异常,什么时候应该是运行时异常?
何时选择已检查异常和未检查异常