Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

mainでthrowするとどうなりますか?

どこに投げているんでしょうか

2

回答

6787

閲覧

2件の回答

評価

0

mainはどこから呼ばれていると思う?

評価

30

>どこに投げているんでしょうか
mainメソッドにthrows節がある場合は例外処理を投げていると言えると思います。

>mainでthrowするとどうなりますか?

まずfinally節があればそれを処理します。
そしてmainメソッドの外側にcatch節は存在しないので、
キャッチされなかった例外の処理が行われてmainスレッドが終了します。

キャッチされなかった例外の処理は
UncaughtExceptionHandler#uncaughtExceptionメソッドで行われます。

UncaughtExceptionHandlerインターフェースのuncaughtExceptionは以下です。
public void uncaughtException(Thread t, Throwable e)

ではどこのUncaughtExceptionHandlerオブジェクトが
uncaughtExceptionメソッドでキャッチされなかった例外の処理を行うかというと

優先されるのが例外が発生したスレッドのsetUncaughtExceptionHandlerメソッドで
設定されているUncaughtExceptionHandlerオブジェクトです。
(デフォルトでは設定されていません。)

それが設定されていなければスレッドが属するThreadGroupの
uncaughtExceptionメソッドが呼び出されます。
(ThreadGroupはUncaughtExceptionHandlerインターフェースを実装しています。)

ThreadGroup#uncaughtExceptionでは親ThreadGroupが存在すれば
親のuncaughtExceptionメソッドを呼び出します。

親ThreadGroupが無い場合にThreadのstaticメソッドの
setDefaultUncaughtExceptionHandlerでデフォルトの
UncaughtExceptionHandlerが設定されていれば
そのuncaughtExceptionメソッドを呼び出します。
(デフォルトでは設定されていません。)

親ThreadGroupが無く、デフォルトのUncaughtExceptionHandlerが
設定されていない場合はメッセージとスタックトレースを標準出力に表示します。

キャッチされなかった例外の処理が終了したらスレッドは終了し、
他に走っているユーザースレッドが無ければプログラムも終了します。

簡単に言うと特にキャッチされなかった例外の処理を特に実装していない場合は
例外のメッセージとスタックトレースを吐いてmainスレッドが終了します。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。