约书亚·布洛赫(Joshua Bloch)在《有效的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.现在,上面的代码难道不是一个检查异常吗?我可以尝试恢复这种情况吗?我可以吗?(注意:我的第三个问题在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.我应该冒充确切的异常还是使用Exception屏蔽它?
以下是我的读物
DataSeries
类,用于保存必须始终基于时间顺序的数据。有一种方法可以DataPoint
在末尾添加新内容DataSeries
。如果我的所有代码在整个项目中均能正常工作,DataPoint
则永远不要将a添加到末尾,因为a的日期早于末尾的日期。整个项目中的每个模块都是按照这种原则构建的。但是,我检查了这种情况,并在发生这种情况时抛出了未经检查的异常。为什么?如果发生这种情况,我想知道谁在执行此操作并修复它。