2

私は基本的な Java 演習テストの質問に答えていましたが、次の質問に対する正しい答えが、テスト中に私をすり抜けてしまいました。

質問: 「例外がキャッチされない場合、finally ブロックが実行され、残りのメソッドはスキップされます - TRUE または FALSE?」

私は ThrowTest クラス (一番下に貼り付けられています) で答えを証明しようとしていますが、Java の例外処理はやや慣れていないことがわかりました。catch ブロックの ArrayIndexOutOfBoundsException 部分をコメント アウトして、クラスをそのままコンパイルします。次に、入力パラメーターを渡さずにクラスを実行すると、例外 (ArrayIndexOutOfBoundsException 例外) が作成されます。最終的な System.out.println は実行されないと予想されますが、実際には実行されません。

ArrayIndexOutOfBoundsException catch ブロックのコメントを外して再コンパイルすると、クラスは実行時にその特定のエラーをキャッチし、下部の「メソッドの残り」println を実行します。それで、私のコードは「残りのメソッドがスキップされる」ことを証明しますか、それともメインメソッド以外のメソッドからテストする必要がありますか? おそらく、それをテストするより簡単な方法があります。

public class ThrowTest 
{

    public static void main(String[] args)
    {
    try
        {
            String anyString = args[0];
            System.out.println("Try  code executes");
        }

    catch(SecurityException e)  //any old exception
        {
            System.err.println ("Error: SecurityException. ");
            e.printStackTrace();
        }

    /* begin comment
    catch(ArrayIndexOutOfBoundsException e)
        {
            System.err.println("Error: Caught ArrayIndexOutOfBoundsException. ");
            e.printStackTrace();    
        }
    end comment */

    finally
        {
            System.out.println("finally block executes!");  
        }

        System.out.println("Rest of method executes!");
    }

}
4

2 に答える 2

0

あなたのコードは、すべてが説明どおりに機能することを実際に証明しています。例外をキャッチすると、その後のメソッドの残りが実行されます。メソッドに例外をスローさせると、その実行はすぐに停止します。いずれにせよ、finally ブロックは常に実行されます。

于 2013-03-05T22:56:23.417 に答える