の宣言だけではmain()
、どちらの答えが客観的に正しいかを言うことは不可能です。メソッドの定義によっては、どのステートメントも真になる可能性があります。
mainメソッドは、すべてのタイプの例外をキャッチして処理するように設計されています。
mainメソッドは、をキャッチして処理するように設計されていFileNotFoundException
ます。
上記の両方のステートメントは、次の場合に当てはまります。
public static void main(String[] args) throws FileNotFoundException {
while (true) {
try {
doSomething();
}
catch (Exception e) {}
}
}
宣言された例外がによってスローされるmain()
ことはありませんが、それはエラーではありません。ただ無意味で誤解を招く。
mainメソッドは、FileNotFoundException
発生した場合は単に終了する必要があります。
mainメソッドは、例外が発生した場合に単に終了する必要があります。
上記の両方のステートメントは、次の場合に当てはまります。
public static void main(String[] args) throws FileNotFoundException {
try {
doSomething();
}
catch (Exception e) {
return;
}
}
もちろん、適切で合理的なプログラマーがこのメソッドシグネチャと通信することを意図している可能性があることに基づいて、質問の意図を推測することができます。これは、メソッドがをスローすることを意図しておりFileNotFoundException
、必然的に他のチェックされたを処理することになるでしょうException
。また、「処理」は単に「プロセス」を意味するのではなく、具体的にはそのような例外を(再)スローしないと合理的に想定できます。
これらの仮定はすぐに#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;
}
}
後者の場合、#3も#4も真になることはできませんが、main()
をスローするという仮定も満たすことができますFileNotFoundException
。
要するに、オプションはうまく表現されていません。もし私が答えを選ばなければならないとしたら、それはMartinVの答えの論理に基づいて#3になるでしょう。私の仮定では、#3の「すべき」という言葉は教授による不幸な選択であり、「かもしれない」のようなものがより良い選択肢だったでしょう。また、「単に終了する」(そして、間違いなく「処理する」)よりも正確な言語を使用することも良い考えでした。