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

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

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

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

Q&A

解決済

2回答

286閲覧

Java のエラーの catch の意味について

mqnowa

総合スコア1

Java

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

0グッド

0クリップ

投稿2025/06/05 00:37

当方 Java 初心者のため、Java でのお作法がまだよく分かっていません。

他人の書いた、以下のようなソースコードがあります。

java

1private byte read() { 2 try { 3 if (bufferPointer == bytesRead) { 4 bytesRead = din.read(buffer, 0, BUFFER_SIZE); 5 if (bytesRead == -1) return -1; 6 bufferPointer = 0; 7 } 8 return buffer[bufferPointer++]; 9 } catch (IOException e) { 10 throw new RuntimeException(e); 11 } 12}

ここで、try-catch にて、IOException を単に RuntimeException に変換して例外を送出している必要性は何ですか?

try無しで書くと、どのような不都合がありますか?

プログラム全体を見なければ分からないという意見もあるかと思いますが、一般論としての単にエラーを送出するだけの try-catch の意味合いが知りたいです。

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

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

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

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

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

meg_

2025/06/05 00:46

> ここで、try-catch にて、IOException を単に RuntimeException に変換して例外を送出している必要性は何ですか? 作成者に意図を聞くことは出来ないのではないでしょうか?
guest

回答2

0

ベストアンサー

ここで、try-catch にて、IOException を単に RuntimeException に変換して例外を送出している必要性は何ですか?

既出のとおり。意図はわからない。

try無しで書くと、どのような不都合がありますか?

不都合ではないけれど、read()メソッドにthrows句を書く必要がある。

diff

1- private byte read() { 2+ private byte read() throws IOException {

そうすると、read()メソッドを呼び出しているところに、try-catchで囲む役割が押し付けられる。
それがヤだから、非チェック例外である「RuntimeException に変換して例外を送出している」のかもしれない。

投稿2025/06/05 01:20

shiketa

総合スコア4132

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

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

shiketa

2025/06/05 01:30

ちなみに。Kotlinにはthrows句がありません。チェック例外も非チェック例外同様にcatchすることを強制されない。try-catch式はあるので、必要なら例外をcatchすればいい。それはそれで、便利です。 この便利さをJavaで実現しようとすると、件のread()メソッドのように「RuntimeException に変換して例外を送出」する手がありそうです。
TakaiY

2025/06/05 01:50

この回答に一票。 IOExceptionなどの例外を『非チェック例外である「RuntimeException に変換して例外を送出している」』 して明示的に扱わなくていいようにすることで、コードをすっきりさせる効果があると思います。
mqnowa

2025/06/05 02:31

そもそも IOException は必ず catch しないとコンパイル通らないんですね......
jimbe

2025/06/05 05:08

>そもそも IOException は必ず catch しないとコンパイル通らない それがつまりお二方のコメントにある「チェック例外」(IOException )・「非チェック例外」(RuntimeException )というやつです。 これは「try無しで書くと、どのような不都合がありますか?」という時点で試してみれば分かる事です。 机上でコードを見るだけでなく試せることは試してみたほうが、実感としてより経験になるでしょう。 また、「一般論として」というワードがありますが、システムは1つ1つが特注品であり、コードの一部というのは大きな機械の中の歯車の1つ程度の意味しかありません。「プログラム全体を見なければ分からないという意見もあるかと思いますが」と仰っている通り、また他の回答の方も仰っている通り、そのような極一部を見て分かるものではありません。
guest

0

ここで、try-catch にて、IOException を単に RuntimeException に変換して例外を送出している必要性は何ですか?

「必要性」は分かんないよ。作者がそうしたかったから、ってのが理由だから。
単純に、ソースコードの他の場所でRuntimeExceptionをcatchして処理してる部分があるんでしょ?そこでRuntimeExceptionとして一括に処理したい、と。
それ以外考えつかないなぁ。

投稿2025/06/05 01:07

cametan

総合スコア57

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問