我正在尝试在方法中打开文件时第一次使用try块。我使用扫描仪将文件中的单词读入ArrayList,然后从该列表中返回一个随机单词。问题是,当我编译时,编译器说有一个无法访问的catch块。我不确定这是由代码本身引起的,还是由于我把返回语句放在哪里引起的。我是否在try块中放置了打开文件的代码,并在catch块之后保留返回随机选择的字符串的代码?或者我将文件代码和返回字符串的代码放在try块中?
public String loadPuzzle() {
try {
ArrayList<String> puzzles = new ArrayList<String>();
Scanner sc = new Scanner(new File("Categories.txt"));
while (sc.hasNext()) {
String line = sc.nextLine();
puzzles.add(line);
}
sc.close();
//do i do the return statement here or after the try and catch blocks?
int r = new Random().nextInt(puzzles.size() + 1);
return puzzles.get(r);
}
catch(FileNotFoundException e) {
System.out.println("The file was not found.");
return "";
// do i need to return a value in the catch blocks?
}
//the compiler throws the warning here: unreachable catch clause and FileNotFoundException already found
catch(IOException e) {
System.out.println(e);
return "";
}
}
答案 0 :(得分:4)
编译器绝对正确。第二个catch子句无法访问,因为您的代码不能抛出IOException
而不是FileNotFoundException
。
在您放置代码的第二部分时,这并不重要。我更喜欢把它放在catch子句中。
并且您不需要在catch子句中放置return
语句,但是当它返回类似错误代码的内容时。我会在方法的最后添加一个返回
答案 1 :(得分:0)
因为从您的try块抛出的最高异常是FileNotFoundException
所以在IOException
FileNotFoundException