如何知道Try / Catch Block要捕获的内容

时间:2015-02-22 02:12:33

标签: java try-catch

我只是尝试使用BufferedReader读取文本文件,并且我使用try-catch块来假设捕获任何IOExceptions。我认为它确实如此,甚至在问题出现的情况下添加了FileNotFoundException。但我还是得到了:

错误:未报告的异常java.lang.Exception;必须被抓住或宣布被抛出

而且我不明白我没有抓到的部分。这是我的代码:

public Grade load(){

Grade newList = new Grade();
try {
  int year;
  String newLine;

  BufferedReader inFile = new BufferedReader(new FileReader(inputName));

  while((newLine = inFile.readLine())!= null){

    year = Integer.parseInt(inFile.readLine());
    newList.addGrade(new Grade(year));  
  } 

  inFile.close();
}//try

 catch (FileNotFoundException e) {
  System.out.println("Failed to copy the file:  "+e.getMessage());}
 catch(IOException e){
  System.out.println("Failed to copy the file:  "+e.getMessage());}

    return newList;
 }//load

2 个答案:

答案 0 :(得分:0)

我假设Grade.addGrade方法或Grade构造函数被声明为抛出java.lang.Exception

使用Integer.parse方法时捕获java.lang.NumberFormatException也是一种很好的做法。

答案 1 :(得分:0)

数目:

首先,如果你想知道要捕获什么(或者更好地说,抛出什么),首先需要查看Java文档。这将向您展示每个官方支持的类的每个方法的详细概述,因此您最好在执行输入/输出等敏感操作之前查看它。

所以,我建议做的是在现有语句的末尾添加一个额外的catch块,并使其捕获java.lang.Exception,更好地称为主异常,从中派生所有其他异常并进行扩展。

这不是解决问题的最理想的方法,但它不会像在多if语句的末尾放置else语句那么大,因为你只是提供所有其他块发生故障时的后备块。这只是满足编译器的额外保护层。

代码演示

这只是演示代码,只是为了展示应该做什么。由于我不知道你的项目是什么,和/或你在做什么,我只会展示你需要做什么的准系统,并且我知道如何直接或间接导致任何事情发生。最终产品中使用的代码。

public Grade load(){

Grade newList = new Grade();
try {
  int year;
  String newLine;

  BufferedReader inFile = new BufferedReader(new FileReader(inputName));

  while((newLine = inFile.readLine())!= null){

    year = Integer.parseInt(inFile.readLine());
    newList.addGrade(new Grade(year));  
  } 

  inFile.close();
}//try

 catch (FileNotFoundException e) {
  System.out.println("Failed to copy the file:  "+e.getMessage());}
 catch(IOException e){
  System.out.println("Failed to copy the file:  "+e.getMessage());}

    return newList;
 }catch(Exception e){
     e.printStackTrace();
     //...OTHER HANDLING CODE. THE ABOVE COULD BE LEFT BLANK...//
 }//load