1

StackOverFlow の新機能であり、Java の新機能です。これより前に C でプログラミングしており、Java の基礎を習得しようとしています。

次のコードについて少し混乱しています。

public class Exercise5 {
private static int[] ia = new int[3];
static int x = 5;   
public static void main(String[] args) {
    while(true) {
        try {
            ia[x] = 1;
            System.out.println(ia[x]);
            break;  
        } catch(ArrayIndexOutOfBoundsException e) {
            System.err.println(
                "Caught ArrayIndexOutOfBoundsException");
                e.printStackTrace();
            x--;
        } finally {
            System.out.println("Are we done yet?");     
        }
    }
    System.out.println("Now, we're done.");
}   

}

私はまだtry、catch、そしてfinallyブロックに頭を悩ませようとしています。私が理解していないのは、このコードでは、例外が発生しない最初のインスタンスが発生するまでプログラムが実行され、その後whileループを終了することです。

私の理解では、while ループはメモリがなくなるまで実行されるので、非例外の最初のインスタンスでコードが while ループを終了する方法を誰かが説明してください。

ありがとうございました!

マルコ

4

4 に答える 4

3

まず、xは5に等しく、次にプログラムはwhileループに入ります。5は配列のサイズよりも大きいため、例外が発生し、例外ブロックに移動します。ここで、xが減少し、while再びループに陥ります。2に達するまでx、もう例外はありません。したがって、breakラインに到達する可能性があります。したがって、プログラムはwhileループを終了して終了できます

于 2013-01-29T08:27:30.297 に答える
0

サイズが3の配列、値が5の変数xを作成しました。したがって、最初の反復ではが表示されますArrayIndexOutOfBoundsExceptionが、catchブロック内xではデクリメントされます。もう一度行きxます。今は4、3よりも大きく、最後は2です。これで例外は表示されず、プログラムが完了します。

于 2013-01-29T08:28:48.183 に答える
0

最初に Try が例外なく実行されると実行され、1 回の繰り返しで中断し、Finally が実行されます。

例外が発生した場合、それは catch ブロックに移動し、次に finally に移動します。

上記の動作に従ってループを繰り返します..さらに明確にするためにお気軽にお問い合わせください.

于 2013-01-29T08:29:27.777 に答える
0

try{}

例外が発生するまでコードを実行します

catch(ExceptionType e){}

スローされた例外が上記の例外タイプを満たす場合、次のブロックが提供された例外とともに実行されます。e

finally{}

スローされた例外に関係なく実行

于 2013-01-29T08:25:20.580 に答える