3

forループがあります:

for(Location l : locs) {
    System.out.println("X:"+l.getX()+", Y:"+l.getY());
    try {
        if(layer.getObject(l) != null) 
            out.add(layer.getObject(l));

    } catch(NullPointerException e) {

    }
}

反復ごとに、Location[]配列からLocationを取得し、その場所のXとYを出力します。次に、次の行は、(標準のマップライブラリではなく)マップレイヤー内の場所からオブジェクトを取得し、それをに追加しますArrayList

を取得してjava.lang.ClassCastExceptionいますが、それは私の質問ではありません。その問題は私が自分で解決することができます。私の質問は、出力が次のように表示される理由です(特に、例外の表示方法)。

run:
X:0, Y:1
X:0, Y:2
X:0, Y:3
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LMapGrid.OverlayObject;
X:1, Y:1
X:1, Y:3
X:2, Y:1
X:2, Y:2
X:2, Y:3
    at MapGrid.MapGrid.getAdjacentOfType(MapGrid.java:86)
    at BehaviorMap.BehaviorMap.main(BehaviorMap.java:26)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

検出されたオブジェクトは場所(1,1)にあるため、場所(1,1)で例外がスローされました。プログラムの最初から設定します。プログラムはメインスレッドで実行されています。しかし、私の質問は、なぜ出力がこのように表示されるのかということです。

これがレイアウトされている方法は、プログラムが(0,3)に達したときに例外がスローされたことを意味しているように見えますが、(1,1)に達したときに例外がスローされたに違いありません。次に、出力は、例外が検出されると、ループが終了するまでプログラムが実行を継続したことを意味します。

私はこの振る舞いを理解していません。未処理の例外が発生した場合、なぜプログラムは単に終了しないのですか?さらに、例外を呼び出す行の前に例外メッセージが表示されるのはなぜですか?ブロックのSystem.out.println前に来ることに注意してください。try

最後に、なぜエラーがそのような奇妙な方法で分割されるのですか?(エラーメッセージが表示され、プログラムが実行を継続しているように見えた後、詳細が表示されます。)プラットフォームはNetBeans7.2です。

4

1 に答える 1

3

これがレイアウトされている方法は、プログラムが (0,3) に達したときに例外がスローされたことを暗示しているように見えますが、(1,1) に達したときに例外がスローされたに違いありません。次に、出力は、例外が見つかると、ループが終了するまでプログラムが実行を継続したことを意味します。

キャッチされなかった例外のデフォルトの動作は、それらを標準エラー ストリーム ( System.err) に出力することです。これは、標準出力ストリームとは異なる順序でコンソールに表示できます ( System.out)。

この振る舞いがわかりません。未処理の例外が発生した場合、プログラムは単純に終了しないのはなぜですか? さらに、例外を呼び出す行の前に例外メッセージが表示されるのはなぜですか? System.out.println が try ブロックの前にあることに注意してください。

何をしているかによりますMapGrid.MapGrid.getAdjacentOfType。例外をキャッチして を呼び出しているように見えException.printStackTrace()ます。これは標準エラーに出力されます。

最後に、エラーがこのように奇妙な方法で分割されるのはなぜですか? エラーメッセージが表示されるため、プログラムが実行を継続しているように見えた後に詳細が表示されます。プラットフォームは NetBeans 7.2 です。

繰り返しますが、出力ストリームとエラー ストリームは、(相互に関連して) 書き込まれた順序と同じ順序でコンソールに表示されるとは限りません。

于 2013-02-15T05:48:19.017 に答える