
例外のthrowsがよくわかりません。
(例1)
public static void main(String[] args) throws Exception {
new testClass().testA();
}
void testA() throws Exception {
FileReader exFile = new FileReader("exFile.txt");
}
(例2)
public static void main(String[] args) throws FileNotFoundException {
new testClass().testA();
}
void testA() throws FileNotFoundException {
FileReader exFile = new FileReader("exFile.txt");
}
上記2つの例ではどちらも
「java.io.FileNotFoundException: exFile.txt (指定されたファイルが見つかりません。)」
というログが出力されるようです。
throws ExceptionにしてもFileNotFoundExceptionと判別できるのならば、
あえてthrows FileNotFoundExceptionにする必要がなく、大抵の場合
throws Exceptionにしておけばよいと思うのですが、
その解釈は間違っているでしょうか?
No.3ベストアンサー
- 回答日時:
このサンプルでは、ただ例外をthrowするだけだから、意味がわかりづらいのでは。
この場合のthrows Exceptionは、単に「どういう例外がここからthrowされるか」なので、違いは「Exception(すべての例外のスーパークラス、すなわちすべての例外)がthrowされる」か「FileNotFoundExceptionという例外だけがthrowされる」かの違いです。これだけだと、あんまり意味があるように見えないかも知れないですね。では、すべてthrows Exceptionでいいじゃないか、というと、まぁそういえないこともないですが、そういう書き方は「例外処理の一番拙い処理法」といっていいでしょうね。なぜ、例外処理があるかといえば、例外というプログラム実行時に発生する問題をいかにして処理するか、その解決のためにあるわけです。例外は、「どのような問題が発生したか」を示す重要な役割を果たします。
あるメソッドが、throws FileNotFoundExceptionとして定義されていれば、そのメソッドを利用する人間は、「なるほど、このメソッドはファイルが見つからない場合に例外を返すんだな」とわかります。従って、ファイルが存在しない場合の対処法のみを用意しておけば事足ります。
では、メソッドがthrows Exceptionだった場合、そのメソッドを利用する人間は、一体どんな対処をすればいいんでしょうか? 果たしてどんな例外が起こるかもわからない。となると、具体的にどんな対策をすれば発生した例外に対し確実な対応ができるのか、これはかなり難しい問題となりますよ。結局、その処理を中断するとか、限られた対応しかできなくなりますね。
自分で全ソースコードを管理しているならば、throws Exceptionでもいいでしょうが、そのクラスが汎用性を持ち、他者から利用されるというような場合、厳密に例外を定義しておくことで、そのメソッドを利用する人間が確実に例外処理を行えるようになるわけです。
No.2
- 回答日時:
throwsはそのメソッドが何のエラーを発生させる可能性があるかを記述します。
Exceptionにしておくと実装者はとにかくエラーをハンドリングしなくてはならないですが、
FileNotFoundExceptionとなっていると、ファイルが見つからなかったときのエラーを処理しなければならないと判断できます。
どうしておくのが良いかはその実装によりますが、
広くしておくとそのメソッドを使う人に対して
詳細な判断材料を奪うこともありますので気をつけて実装してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java eclipse実行ができない 2 2022/07/27 04:47
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外(throws)について
-
「タイプ初期化子が例外をスロ...
-
JSPからServletへの値の引渡し
-
CreateEventについて
-
threadの中でのメモリ??
-
例外処理がまったくわかりませ...
-
カンマ付数字をDBへ追加する...
-
デバッグのこつ
-
LISPで例外を発生させるには?
-
obj.property のundefined判定
-
おススメのJavaScriptエディタ
-
JSPからのパラメータチェック
-
アサーションと例外処理の違い...
-
URLを指定して、ソース文字列を...
-
PHPのpack関数をJavaで実装でき...
-
pictureBoxの例外処理
-
file操作時のエラー
-
C#でPHPの可変関数のような事が...
-
WMIスクリプトを使用してMACア...
-
正規表現の書き方が分かりません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.Net Object型 空かどうか
-
数字か文字列かを判定する関数
-
VBA Evaluate関数 型が一致しま...
-
【JAVA】与えられた金額を貨幣...
-
VC++におけるCStringの変換
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
C#の捕捉されない例外処理の対...
-
ファイルダイアログを開いた時...
-
C# マルチスレッドにおける例外...
-
0除算の例外処理ができない!!...
-
時間の取得
-
Timestamp型への変換について(J...
-
例外ってIf文の中に入れますか...
-
Excelでのエラー
-
文字列が数字のみで構成されて...
-
VB.NETで16進数が正しいかどう...
-
String型の日付(2005/11/25)の...
-
VBA 400エラー 1004エラー
おすすめ情報