【问题标题】:unreported exception java.io FileNotFoundException; must be caught or declared to be thrown未报告的异常 java.io FileNotFoundException;必须被抓住或宣布被扔掉
【发布时间】:2012-02-18 02:21:54
【问题描述】:

我的客户代码:

public static void inputFiles()
{

  File inputFile = new File("colors2.txt");
  if (!inputFile.exists()) {  
        throw new FileNotFoundException(("File not found"));  
   }  
  ColorSet colorSetter = new ColorSet(inputFile);
}

我的供应商类构造函数:

public ColorSet(File source) throws FileNotFoundException
{
   if (!source.exists()) {  
        throw new FileNotFoundException(("File not found"));  
   }  
    colorInput = source;
}

我不断得到 “未报告的异常 java.io FileNotFoundException;必须被捕获或声明为抛出”

我尝试在客户端方法中捕获它,但它告诉我它不能在正文块中调用,也许我做错了?

【问题讨论】:

    标签: java


    【解决方案1】:

    如果你在 java 中抛出一个检查异常,你需要在你的方法签名中声明它。此外,如果您调用引发检查异常的方法(或构造函数),那么您将需要在 try-catch 块中处理该异常,例如:

    try {
        ColorSet colorSetter = new ColorSet(inputFile);
    } catch (FileNotFoundException fnfe) {
        // do something sensible with the exception.
    }
    

    如果您要抛出运行时异常,则无需声明您的方法会抛出它们。在这种情况下,我建议您使用 IllegalArgumentException,因为您似乎正在检查提供给您的方法的参数是否有效。

    还要注意,从构造函数中抛出异常通常被认为是不好的。认为这是更多的经验法则......

    【讨论】:

    【解决方案2】:

    它抱怨的原因是它想要inputFiles() throws FileNotFoundException


    也就是说,如果你在ColorSet 的构造函数中有它,我很好奇为什么你在inputFiles 中需要它,以及为什么inputFiles 是复数,即使它只输入一个文件。

    您的替代解决方案是不抛出 FileNotFoundException 并在 inputFiles 方法的 ColorSet 的构造函数中捕获异常。

    【讨论】:

      【解决方案3】:

      inputFiles() 也必须声明它

      【讨论】:

      • 所以对于我的客户端方法,应该是:public static void inputFile() throws FileNotFoundException?
      • 是的,这就是它需要做的事情
      【解决方案4】:

      如前所述,您需要让 inputFiles() 也使用当前方法抛出它。

      不过,我建议让 ColorSet 的构造函数抛出异常,然后在 inputFiles() 中捕获异常,或者只是让 inputFiles() 将异常传递给它的调用者(在 inputFiles() 中没有文件检查代码方法)。这种方法删除了重复的代码,并确保在有人仍然创建 ColorSet 对象时抛出异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多