Java では、考えられるすべてのコード パスが値を返すか、例外をスローすることを確認するだけで十分です。たとえば、次のコードは有効です。
public boolean test() {
if (3 < 5) {
return true;
} else {
throw new RuntimeException("Holy crap!");
}
}
あなたの例では、ブロックは return で終了するため、ハッピー パスがカバーされ、 ;try
を超えるコードは必要ありません。finally
さらに、 でスローされた例外try
はメソッドの外に伝播し、メソッドの最後に到達する機会がないため、考えられるすべてのパスがfinally
ブロックの下のセクションにヒットすることはなく、return ステートメントは必要ありません。return
(実際、末尾にステートメントを追加すると、コンパイラは到達不能コードに関する警告またはエラーを表示する場合があります!)
コードが/ /ブロックcatch
を超えて流れる可能性があるため、句を追加すると状況が変わります。try
catch
finally
public String test(){
try{
// Do my work
return "myValue";
}
catch (Exception ex) {
System.out.println("O noes something went wrong");
// swallow exception
}
finally {
System.out.println("I'm in Finally");
}
// Oh no! If an exception was caught, code can actually flow through here.
// Compiler will complain about a missing return statement until you add one.
// return "someOtherValue";
}