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

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

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

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

Q&A

解決済

1回答

3100閲覧

try catch 到達できないコードエラー

sususu

総合スコア99

Java

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

0グッド

0クリップ

投稿2018/05/09 03:00

ただ今java silverを勉強しているものです。
下記のコードで"B"が出力されるというのが正解なのですが、MyExceptionのcatchは到達不可能でエラーにはならないのでしょうか?

package zzz; public class ZZZ { public static void main(String[] args) { try{ test(); }catch(MyException e){ System.out.println("A"); } } public static void test(){ try{ throw Math.random() > 0.5? new MyException() : new RuntimeException(); }catch(RuntimeException e){ System.out.println("B"); } } } class MyException extends RuntimeException{}

下記の形は下段のcatchに到達する前に親がcatchするため到達不可でエラー出るというのは理解しているつもりなのですが、
これとあまり変わらず上記のコードも到達不可に感じます。
どう理解すればよいでしょうか?

エラー文
}catch(RuntimeException e){
}catch(MyException e){

すいませんがどなたかご教授お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

MyExceptionRuntimeExceptionを継承した非検査例外なので、明示的な宣言をしなくてもどこからでも投げられます

なので、catchを書いた部分のコンパイル時に「MyExceptionが飛んでくる可能性がない」という検証を厳密にやるのは、往々にして不可能です。

検査例外であれば、「内部で直接投げている」あるいは「throwsしたメソッドを呼んでいる」のどちらかでしか発生しませんので、「起きる可能性がない」といい切ることも容易に可能で、実際にコンパイラもチェックしていきます。

投稿2018/05/09 03:04

編集2018/05/09 03:11
maisumakun

総合スコア145183

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

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

maisumakun

2018/05/09 03:28

Class.newInstanceのように「宣言していない検査例外を投げる」コードもありますが、これはさすがに扱いづらいのでJava 9では非推奨となっています。 自分からUnsafeな領域に足を踏み入れる人のことなんて、構わなくてもいいでしょうし。
sususu

2018/05/09 04:25

ご回答ありがとうございます! おっしゃる通り検査例外に変更したらちゃんと到達不可になりました。 非検査例外は最後まで処理されないので飛んでくる可能性があるってことですね。 プログラムはいろいろな可能性を考えないといけないので大変ですね。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問