文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

try-catchとthrowsの使い分け

throws


参考
Javaの道:例外(3.throws、throw)


例外が発生したメソッド内で例外ハンドラを発見できない場合、
例外ハンドラを求めてメソッド呼び出し元を逆に探しにいく。


呼び出し元で例外処理を行うのがthrowsということかー

try-catchとthrows、どうやって使い分けるんだ???


このどちらを選択するかは、機械的には決められません。メソッドの役割を考えて選択する必要があります。
引用:
throwsを用いるかどうかはメソッドの役割で決まる - @IT

引用元のページにあるソースの説明にこうある。

この例では、受け取ったURLに問題がある場合に、MalformedURLException が発生します。よって、この例外の責任は呼び出した側にありますので、対処も呼び出した側で行うべきでしょう。よって、「throws MalformedURLException」としました。

 これに対して、IOException は、呼び出し側とは無関係に、このメソッドの内部で投げられる例外です。よって「try-catch」しました。


渡したURLが不正だったときは呼び出し元に、
メソッドの内部で発生する例外に関しては呼び出し先に記載しているよう。


この例で示した使い分けは、あくまでも一例にすぎませんが、メソッドの役割を考え「try-catch」すべき例外と「throws」すべき例外に分けることは、プログラムを見やすくし、トラブルの防止に役立ちます。


javaを使い始めたころ、(今も使い始めて半年も経ってないけど)
わけわからずコンパイルを通すだけのためにサジェストに出てきた「throwsを追加する」みたいのをクリックして無理やり動かした記憶がある。


どう実装するかはメソッドの目的をもとに考える必要があることがわかった。