2012-02-17 192 views
0

我的客户端代码:未报告的异常java.io FileNotFoundException;必须捕获或声明抛出

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异常;必须捕获或声明抛出“

我试着在客户端方法中捕获它,但它告诉我它不能在body block中调用,也许我做错了吗?

回答

1

inputFiles()有权宣布它还有

+0

所以对于我的客户端方法,它应该是:public static void inputFile()throws FileNotFoundException? – pood 2012-02-17 18:26:07

+0

是的,这就是它需要做的 – 2012-02-17 18:35:10

2

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


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

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

2

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

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

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

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

+0

我不知道你不应该抛出构造函数。我们假设使用确切的构造函数(来自CS proff) – pood 2012-02-17 18:27:43

+0

构造函数和异常可能存在一些问题:http://stackoverflow.com/a/1371559/355499,http://futuretask.blogspot.com/ 2006/05/Java的针尖10构造的例外,are.html – 2012-02-17 19:53:01

0

如前所述,您需要将inputFiles()与您当前的方法一起使用。我只是建议使用ColorSet的构造函数抛出异常,然后在inputFiles()中捕获异常,或者让inputFiles()将异常传递给它的调用者(而不必在inputFiles中检查代码) ) 方法)。此方法删除重复的代码,并确保在有人仍然创建ColorSet对象时引发异常。

相关问题