🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

4回答

1203閲覧

「基本」throwsの処理について

satoshiiiiii

総合スコア10

Java

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

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

0クリップ

投稿2019/11/24 08:12

編集2019/11/24 10:43

初心者です。
以下のコードで書いている例外処理についてです。

とあるサイトで「java.io.IOExceptionはRuntimeExceptionのサブクラスではないので,try文を使って例外を捕まえない限りは上位のメソッドに例外を投げることを宣言しないといけない」と書いてあったのですが、ここでいう「上位のメソッド」とはどこになるのでしょうか。

また、例外処理は具体的にどこで定義されているのですか?

package info.searchman; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Pra3_1 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ); int x = Integer.parseInt( br.readLine() ); int y = Integer.parseInt( br.readLine() ); if (x > y) { System.out.println( "xはyより大きい " ); } } }

throw,try-catchの概念もあまり理解できていません。
初歩的な質問で恐縮ですが、ご回答のほどお願いいたします。

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

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

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

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

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

guest

回答4

0

回答

ここでいう「上位のメソッド」とはどこになるのでしょうか。

JVMが起動すると "main" という名前のスレッドが起動し、Pra3_1#main を呼びます。上位メソッドは "main"スレッドのrun()だと思われますが、スタックトレースには表示されません。

また、例外処理は具体的にどこで定義されているのですか?

この場合、例外処理は記述されていません。仕様では、例外を捕捉しなければスレッドが死ぬとなっており、スタックトレースを出力してスレッドが死にます。スレッドが死んだ時、(デーモンスレッドを除く)スレッドが他に存在しなければ、JVMが終了します。

実験
System.inを閉じて例外を発生させます。

Java

1public static void main(String[] args) throws IOException{ 2 try (BufferedReader br = new BufferedReader(new InputStreamReader( System.in ) )){} 3 BufferedReader br = new BufferedReader(new InputStreamReader( System.in )); 4 int x = Integer.parseInt( br.readLine() );

スタックトレース

Java

1Exception in thread "main" java.io.IOException: Stream closed 2 at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170) 3 at java.io.BufferedInputStream.read(BufferedInputStream.java:336) 4 at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) 5 at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) 6 at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) 7 at java.io.InputStreamReader.read(InputStreamReader.java:184) 8 at java.io.BufferedReader.fill(BufferedReader.java:161) 9 at java.io.BufferedReader.readLine(BufferedReader.java:324) 10 at java.io.BufferedReader.readLine(BufferedReader.java:389) 11 at info.searchman.Pra3_1.main(Pra3_1.java:17)

投稿2019/11/24 12:48

xebme

総合スコア1090

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

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

0

ベストアンサー

Javaで書かれたmainを呼び出すプログラムが、上位のプログラムになります。
Javaではないので、「メソッド」と言わない可能性が高いです。

WindowsやLinux等の汎用OSで、Javaで書かれてコンパイル済みのmainを実行するためには、例えばjavaコマンドを使います。mainで発生した例外をjavaコマンドが受け止めますが、javaコマンドがどうするのかはjavaコマンドの実装によるでしょう。

普通だと、エラーメッセージを出して、javaコマンドを呼び出した上位プログラムに対してエラー終了のステータスを返すでしょうね。

投稿2019/11/24 11:43

otn

総合スコア85893

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

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

satoshiiiiii

2019/11/24 11:57

ご回答ありがとうございます。 言葉足らずな質問にも関わらず質問の意図を汲み取ってくださりありがとうございます。 仮想マシン、コマンドライン、javaプログラム。これらはそれぞれ違うものを指してるのでしょうか? ※仮想マシンとコマンドラインは同じものをさしてるのかもしれません。
otn

2019/11/24 12:17

Java仮想マシンを動かすのがjavaコマンドというプログラムです。 コマンドライン(シェル)はさらに、javaコマンドを呼び出すプログラムです。
satoshiiiiii

2019/11/24 12:42

私には判断しかねますが、貴殿の回答が正だと感じました。 分かりやすい回答ありがとうございます。
otn

2019/11/24 13:00

y_waiwaiさんやjimbeさんも同じことを言ってます。 xebmeさんは、javaコマンドの中で動くJava仮想マシンのさらに詳しい説明ですね。
satoshiiiiii

2019/11/24 13:27

別のものを「上位」としているので違うことを言ってると思ったのですが
otn

2019/11/24 13:38

「上位のメソッドでなく呼び出す別のプログラムがそれにあたる」という意味では同じです。 あとは、何倍の望遠鏡で見るかによって、上に何があるかの説明が変わってきます。 「別の星」と言った時に、月なのか、火星なのか、アルファケンタウリなのか。
satoshiiiiii

2019/11/24 14:29

なるほどです。 回答ありがとうございます。
guest

0

ざっくりですと,
Windows プログラムを実行した時, Windows が「上位」です.
java プログラムを実行した時, java 仮想マシンが「上位」です.

投稿2019/11/24 10:35

jimbe

総合スコア13202

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

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

satoshiiiiii

2019/11/24 10:44

回答ありがとうございます。 例外処理は具体的にどこで宣言されているのですか?
jimbe

2019/11/24 11:11

仮想マシンの中なので見えません.
satoshiiiiii

2019/11/24 12:42

回答ありがとうございました。
guest

0

main関数ってのはシステムから実行されますんで、ここで言う上位というのはコマンドライン、あるいはシェルということになろうかと思います
そこで例外が出れば、例外が出ました、というメッセージが出ますね

投稿2019/11/24 08:18

y_waiwai

総合スコア88040

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

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

satoshiiiiii

2019/11/24 08:28

ご回答ありがとうございます。 すみません、あまり回答の意味が飲み込めていません。 「コマンドラインあるいはシェル」といってるのは、コンソール画面のようなものをイメージしてしまうので、イメージがわきません。
satoshiiiiii

2019/11/24 08:30

なにか上位のメソッドが存在していて、そこにtryやcacthなどが書かれているイメージでした。
y_waiwai

2019/11/24 08:32

コンソール画面のことです。 実行したら分けのわからんエラーメッセージが出てきた、ということを想定してくれればいいかと。
y_waiwai

2019/11/24 08:33

コンソール画面でcacheしてくれて、わけのわからんエラー・メッセージを出力してくれる、ということですね
satoshiiiiii

2019/11/24 08:42

なるほど。画面のことですね。 画面は画面であってメソッドではないように思うのですが、違いますか? その例外処理について宣言されている場所を知りたいです。
satoshiiiiii

2019/11/24 08:42

この場合はこのエラーメッセージ、という処理の内容を書いている部分です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問