特定のメソッドがスローする、またはスローする可能性のある例外を確認する方法を尋ねているようです。実行しようとしているメソッドを教えてくれないので、答えるのは難しいです。しかし、Java の要点の 1 つは、Java が静的に型付けされていることであり、実際には、どのメソッドによってどの例外がスローされる可能性があるかを正確に知っています。呼び出す可能性のある例外メソッドを明示的にキャッチしないのはコンパイル時エラーなので、何かをキャッチする必要があるかどうかはすぐにわかります。これに対する例外はRuntimeException
、意図的にコンパイル時のコントラクトの一部ではない子です。
一般に、RuntimeException
s はキャッチされるべきではありません。それらは、プログラムが最初に入るのを許してはならないある種の状態を示しています ( null
a のトリガーをチェックしないなどNullPointerException
) が、作業しているメソッドのドキュメントを確認できます彼らが何を投げるかを見るために。たとえば、String.substring()
をスローする可能性があると言いますIndexOutOfBoundsException
。通常、事前に必要なインデックス チェックを行う必要がありますが、事前にそれができない場合は、次のようにキャッチできます。
int userInputWeCantTrust = -4;
try {
System.out.println("foo".substring(userInputWeCantTrust));
} catch (IndexOutOfBoundsException e) {
System.err.println("Looks like I can't trust you, user.");
}
これを行うときは、例外の型をできるだけ明示し (例: catch IndexOutOfBoundsException
、 not )、ブロックRuntimeException
内にできるだけ少ないコードを配置する必要があります。try
そうしないと、伝播し続けることを許可する必要がある例外を誤ってキャッチする危険があります。
キャッチまたはスローの決定は、設計上の決定です。特定の例外を処理できる場合は、それを try-catch でラップします。そうでない場合は、ラップしません。
例 1、整数の解析、default
失敗時のデフォルト:
public static int parse(String s, int default) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return default;
}
}
例 2、ユーザー入力を解析し、メイン メソッドでエラー レポートを処理します。
// the throws note here isn't actually necessary, since NFE is a RuntimeException
public static int parse(String s) throws NumberFormatException {
return Integer.parseInt(s);
}
public static void main(String[] args) {
try {
for(String s : args){
System.out.println(parse(s));
}
} catch (NumberFormatException e) {
System.err.println("You entered an invalid number.");
}
}
それは本当にあなたのユースケースに依存します。