我的客户代码:
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块中调用,也许我做错了?
答案 0 :(得分:2)
它抱怨的原因是它需要inputFiles() throws FileNotFoundException
。
那就是说,如果你在ColorSet
的构造函数中有它,我很好奇你为什么需要它inputFiles
,为什么inputFiles
是复数,即使它只是输入一个文件。
您的备用解决方案不是抛出FileNotFoundException并在inputFiles方法中捕获ColorSet构造函数中的Exception。
答案 1 :(得分:2)
如果要在java中抛出已检查的异常,则需要在方法签名中声明它。此外,如果您调用抛出已检查异常的方法(或构造函数),那么您将需要在try-catch块中处理该异常,如:
try {
ColorSet colorSetter = new ColorSet(inputFile);
} catch (FileNotFoundException fnfe) {
// do something sensible with the exception.
}
如果要抛出运行时异常,则不需要声明方法会抛出它们。在这种情况下,我建议您使用IllegalArgumentException,因为您似乎正在检查提供给您的方法的参数是否有效。
另请注意,从构造函数中抛出异常通常被认为是不好的。认为这是更多的经验法则......
答案 2 :(得分:1)
inputFiles()
必须声明它
答案 3 :(得分:0)
如前所述,您需要使用inputFiles()将其与当前方法一起抛出。
我建议,只需使用ColorSet的构造函数抛出异常,然后在inputFiles()中捕获异常,或者让inputFiles()将异常传递给它的调用者(在inputFiles()中没有文件检查代码方法)。此方法删除重复的代码,并确保在有人仍然创建ColorSet对象时抛出异常。