質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

Q&A

解決済

2回答

7648閲覧

throwsかtry/catchか

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

1グッド

1クリップ

投稿2018/02/14 04:08

編集2018/02/14 04:20

Javaの例外について質問です。

・throws
・try/catchして呼び出し元へthrow

の上記2つは同じことでしょうか?
だとしたら、使いわけがよくわかりません。

いろいろ調べてみて、

・throwsは呼び出し元のtry/catchへ例外を投げたいときに使う。
・try/catchはエラー後に行いたい処理がある場合に使う。

という結論に行き着きました。
[参考URL]
https://manga.crocro.com/?cat=java&pg=throw__throws
https://www.sejuku.net/blog/22387

throwsの場合の、呼び出し元のtry/catchへ例外を投げる必要性がわかりません。
同様に、try/catchして呼び出し元へthrowする必要性もわかりません。

try/catchして、そのcatch句でprintStackTrace()でエラー出力するのではだめなのでしょうか?

umyu👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/02/14 04:11

疑問に思うソースを例示してください。また「いろいろ調べてみて」出てきた参考URLなどあるとより欲しい回答が得られやすくなります。
退会済みユーザー

退会済みユーザー

2018/02/14 04:26

疑問に思うソースはあるのですが、今回の質問から少し脱線してしまうため別に書きます。アドバイスありがとうございます。
guest

回答2

0

ベストアンサー

throwsを使う場合は、上位のクラスでまとめて例外を扱うといった設計がなされている場合です。try/catchだと、発生した例外を握りつぶしたり分かりやすい例外(自分で作った例外クラスなど)に変換していthrowすることが可能になります。

投稿2018/02/14 04:21

unz.hori

総合スコア1057

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unz.hori

2018/02/14 04:24

補足です。例えばメソッドの戻り値や変数がIntegerかどうかを判定するときにIntegerにparseして判定を行うような処理があったとするとtry/catchで例外を捕まえてIntegerでないと判断したりします。またprintStackTraceでいいのではと質問にありますが、例外が発生しても無視して処理を続行するといった場合も少なからずあったりします。
退会済みユーザー

退会済みユーザー

2018/02/14 04:36

回答ありがとうございます。 設計によるが、例外発生後に特定の処理(例外の握りつぶし・例外の変換など)を行いたい場合以外は、上位のクラスに例外を投げて、まとめて例外処理をしたほうが良いということでしょうか?
unz.hori

2018/02/14 04:41

まぁ、処理が複雑で大きいシステムの場合は例外処理は色々大変なんで上位でまとめてやる方がすっきりします。小規模であれば都度例外処理を行っても問題はないと思います。システムを設計する上では正常系より異常系の方が結構大事になってきますので例外処理は重要になります。
guest

0

>throwsの場合の、呼び出し元のtry/catchへ例外を投げる必要性がわかりません。
呼び出し元のcatchに飛ぶということは呼び出し元の後続の処理を行わないということです。
「(1)ファイルからデータを読み、(2)それを編集し、(3)別ファイルに書き込む」というような場合、(1)で失敗したら(2)(3)を行う意義がありません。
よって、try句に(1)(2)(3)を書いて失敗したら呼び出し元でcatchします。

Java

1try{ 2 // (1) 3 String str = readFile(path); 4 5 // (2) 6 String editStr = editData(str); 7 8 // (3) 9 writeFile(editData); 10} 11catch(Exception e){ 12 // 失敗時の処理 13}

>try/catchして呼び出し元へthrowする必要性もわかりません。
メソッド全体をtrycatchで囲んでcatch句でthrowしたら、trycatchせずにthrows宣言するのと変わりません。
意味のあるcatch句のthrowとしては、「失敗の可能性のある部分だけをtrycatchで囲むことで、囲まれていない部分では失敗することを想定していないことを示す」や「特定の例外は上位に投げて、特定のはエラー処理をする(あまり例が浮かばないけれど・・・)」など

投稿2018/02/14 04:44

YamakawaJunichi

総合スコア630

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問