

「try-catch」すべき例外と「throws」すべき例外の使い分けがよく分かっていません。  
例外処理を行うときにどういう場面で「try-catch」を使うのか、また「throws」を使用するのでしょうか。


CC BY-SA 3.0
2017-05-06T11:17:17.347
34487
2017-05-30T00:34:15.650
17348
question
java
Javaの例外処理について


昔の記事ですが。  
「throwsを用いるかどうかはメソッドの役割で決まる」  
<http://www.atmarkit.co.jp/ait/articles/0611/22/news144.html>


CC BY-SA 3.0
2017-05-28T06:19:40.177
35085
2017-05-28T06:19:40.177
21092
34487
answer


開発対象のソフトウェアの仕様次第だと思います。  
ある例外が発生したときに、

  * ユーザにエラーメッセージを見せ、対処を促す（ファイルの場所が間違っているから見直せ、とか）
  * 内部で代替処理を実行して処理を継続する（ファイルが無いので新しく作る、とか）

のように、「その例外が起きてもどうにか動かす」つもりであるならば、個別にtry-catchで捕まえて、エラー表示なり代替処理などを組み込みます。  
このとき、エラー表示や代替処理を実装すべきレイヤーまでthrowsして伝搬するのはアリですが、場合によっては、そのレイヤーにふさわしい例外クラスを定義して、ラップして再throwするのも良いです（throwsも使う）。

そうではなく、そもそもそのような例外が発生する使い方を想定しない（サポートしない）のであれば、try-
catchで捕まえた上で、`RuntimeException`などでラップして再throwです（throwsは使わない）。

この「想定外のエラー」は、ソフトウェアのどこか一箇所で集約処理します。try-
catchでもいいし、フレームワークを使っているなら、何らかの例外集約機構があるでしょう。  
「想定外のエラー」に対してできることは、ソフトウェアの処理を安全に停止させ、デバッグ用のログなどを吐き出すぐらいだと思います。  
最後に、ユーザに対して「なんかおかしなことが起きたから、開発者に連絡ください」とか表示するのが良いでしょうね。


CC BY-SA 3.0
2017-05-30T00:29:15.413
35118
2017-05-30T00:34:15.650
2017-05-30T00:34:15.650
8078
8078
34487
answer