C ++では、以下のように例外をスローできない関数を宣言できます。
int myfunction (int param) throw(); // no exceptions allowed
Javaプログラミング言語でそのような宣言をすることはできますか?
いいえ、どのメソッドも常にチェックされていない例外(RuntimeException
およびError
)をスローできます。
Exception
チェックされた例外(から派生しないサブクラスRuntimeException
)をメソッド宣言にリストするだけで済みます。
そして醜い補足:コンパイラは宣言されていないチェック例外がスローされていないことをチェックしますが、いくつかの醜いトリックでそれを回避できます(これは卑劣なスローと呼ばれることもありますが、Project Lombokはそれを明示的にサポートしています)。
前のレイヤーに例外がまったくスローされないようにする方法があります。すべてのコードをtrycatchステートメントに入れるだけで、メソッドで例外が発生した場合でも、常にキャッチされます。
ただし、例外が前の(呼び出し元の)レイヤーに伝播しないことを保証するだけであり、メソッド本体で例外がまったく発生しないことは確かではありません。
いいえ、その意味ではありません。例外をスローしないように関数を宣言することはできますが(単にthrowsキーワードを含めないでください)、関数が例外をスローするのを防ぐことはできません。その関数でゼロ除算があると想像してください。プログラムの動作は未定義になります。