仅凭 的声明main()
,不可能说哪个答案是客观正确的。根据方法的定义,任何陈述都可能是真的。
main 方法旨在捕获和处理所有类型的异常。
main 方法旨在捕获和处理FileNotFoundException
.
上述两种说法都适用于以下情况:
public static void main(String[] args) throws FileNotFoundException {
while (true) {
try {
doSomething();
}
catch (Exception e) {}
}
}
声明的异常不会被 抛出main()
,但这不是错误;只是毫无意义和误导。
如果发生这种情况,主方法应该简单地终止FileNotFoundException
。
如果发生任何异常,主方法应该简单地终止。
上述两种说法都适用于以下情况:
public static void main(String[] args) throws FileNotFoundException {
try {
doSomething();
}
catch (Exception e) {
return;
}
}
当然,我们可以根据一个体面且合理的程序员可能打算与此方法签名进行通信来猜测问题的意图。这将是他们打算让该方法 throw FileNotFoundException
,并且必须处理其他 checked Exception
s。我们也可以合理地假设“处理”不仅意味着“过程”,而且特别是它不会(重新)抛出这样的异常。
这些假设立即排除了#1 和#2。
剩下的问题是“简单终止”是否包括抛出异常,或仅包括显式return
/ System.exit()
。在前一种情况下,#3 和#4 都可能为真:
public static void main(String[] args) throws FileNotFoundException {
try {
doSomething();
}
catch (FileNotFoundException fnfe) {
throw fnfe;
}
catch (Exception e) {
return;
}
}
main()
在后一种情况下,#3 和 #4 都不可能为真,同时也满足将 throw的假设FileNotFoundException
。
总而言之,这些选项的措辞不好。如果我必须选择一个答案,那将是基于 MartinV 答案的逻辑的#3。我的假设是#3中的“应该”这个词是教授的一个不幸的选择,而像“可能”这样的词会是一个更好的选择。使用比“简单终止”(并且可以说是“处理”)更精确的语言也是一个好主意。