Java中的异常层次结构
如果出现RuntimeException异常,那么就一定是你的问题
throws ...
public class ThrowableTest {
//根据给定的参数获取一个FileInputStream对象,并进行接下来的操作
public void getFileInputStream(String name) throws FileNotFoundException {
//...
}
}
注:不需要声明Java的内部错误,即从Error继承的异常,因为我们对此完全无法控制。同样,也不应该声明从RuntimeException继承的那些非检查型异常,这些运行时错误完全在我们的控制之中,应该多花时间修正错误,而不只是生命这些有可能发生的错误
如果发生异常,该方法将不会得到一个FileInputStream对象,而是抛出声明的异常
throw ...
/*可以感觉到EOFException的用意,因为我们可以往流中放入null值,所以我们没法找到一个不
可能的值来表示到达流的末尾,所以只能通过抛异常的方式来告诉用户到达末尾了*/
public void readDate(Scanner in) throws EOFException{
int index = getStream();
if(index<0){
throw new EOFException();
}
}
一旦方法抛出了异常,这个方法就不会返回到调用者
try/catch
public void read(String filename){
try{
InputStream in = new FileInputStream(filename);
int b;
while ((b=in.read())!=-1){
//process input
}
}catch (IOException exception){
exception.printStackTrace();
}
}
要捕获那些你知道如何处理的异常,而继续传播那些你不知道怎样处理的异常
finally
public void read(String filename){
InputStream in = null;
try{
in = new FileInputStream(filename);
int b;
while ((b=in.read())!=-1){
//process input
}
}catch (IOException exception){
exception.printStackTrace();
}finally {
try {//内层try语句块只有一个职责,就是确保关闭输入流,并报告finally子句中可能出现的错误
in.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
在实际中,try-with-resources语句可能比finally子句更常用
原文:https://www.cnblogs.com/isclay/p/15311870.html