-1

クラスからの友人のメモを読んでいますが、次のコードのコメントの質問に対する答えは何ですか?

public void withdraw(double amount) { 
        if (amount > balance) { 
            IllegalArgumentException exception1 = new IllegalArgumentException("Amount exceeds balance"); 
            throw exception1; //where caught?? 
        }
        balance = balance - amount;
    }
4

2 に答える 2

4

IllegalArgumentExceptionはチェックされていない例外であるため、プログラムのどこかでキャッチしないと、VMに到達するまでずっと上昇し、実行が停止します。

@JBNizetの功績により、メインスレッドではないスレッドからメソッドが呼び出された場合、例外がスローされると、そのスレッドは停止します。ただし、メインスレッドは実行を継続します。

于 2012-11-01T20:01:20.470 に答える
1

メソッド内で処理しない場合、メソッドからスローする例外は、それを呼び出したメソッドに委任されます。そして最後に、メソッド呼び出し階層をメインスレッドのスタックの一番下(メソッド)まで移動しますmain。ここで、mainメソッドが例外を処理しない場合JVMは、メインスレッドを停止するメソッドに到達し、発生した例外をフルスタックトレースとして表示します。

@JBNizetがコメントで指摘したように、メソッドがスレッドではない他のスレッドから呼び出された場合、例外がそのメソッドmainに到達すると、そのスレッドは停止します。runただし、メインスレッドは実行を継続します。すべてのスレッドに独自のstackがあり、メインスレッドstackが例外が発生したスレッドとは異なる理由を推測できます。

于 2012-11-01T20:01:04.290 に答える