1

これは基本的なJavaサーバー(ソース)ですが、その部分に興味があるため、完全にはわかりwhile(true)ません。いつ終了するのでしょうか。

public static void main(String[] args) throws IOException {
    ServerSocket listener = new ServerSocket(9090);
    try {
        while (true) {
            Socket socket = listener.accept();
            try {
                PrintWriter out =
                    new PrintWriter(socket.getOutputStream(), true);
                out.println(new Date().toString());
            } finally {
                socket.close();
            }
        }
    }
    finally {
        listener.close();
    }
}

どのようにして最後の部分に到達するのでしょうか。

finally {
        listener.close();

それとも、それは単なる標準のネットワークコードwhile(true) ですか?

4

1 に答える 1

2

例外がスローされた場合、ループは中断されます。

JavaのIO関連コードは、失敗すると、ほとんどの場合、失敗した理由を示す例外をスローします。たとえば、 http://docs.oracle.com/javase/6/docs/api/java/io/package-summary.htmlで呼び出されているメソッドを調べて、どのような例外がスローされるかを確認できます。

while(true)は、デーモンやサーバーなどのメインループの一般的なイディオムであり、実行を停止することはないと予想されるか、例外をスローする形で停止します。

于 2013-03-13T22:23:07.443 に答える