在循环java之后到达代码

在循环java之后到达代码,java,while-loop,logic,conditional-statements,unreachable-code,Java,While Loop,Logic,Conditional Statements,Unreachable Code,我有一段来自一个简单聊天应用程序的代码,但这不是这个问题的重要部分。在我看来,这是代码中不可触及的部分: while (!end) { outputToServer.println(consoleInput.readLine()); } communicationSocket.close(); } catch (Exception e) { // TODO: handle exception } } @

我有一段来自一个简单聊天应用程序的代码,但这不是这个问题的重要部分。在我看来,这是代码中不可触及的部分:

while (!end) {
            outputToServer.println(consoleInput.readLine());
        }

        communicationSocket.close();

    } catch (Exception e) {
        // TODO: handle exception
    }
}

@Override
public void run() { // receiving message from other clients

    String serverTextLine;

    try {
        while ((serverTextLine = inputFromServer.readLine()) != null) {
            System.out.println(serverTextLine);

            if (serverTextLine.indexOf("*** Goodbye") == 0) {
                end = true;
                return;
            }
        }

    } catch (Exception e) {

    }

}

我不明白的是,当使用它作为条件的while循环在它之前时,程序将如何到达将“end”变量设置为true的代码部分。。。我想这是一些我不记得的基本java东西,或者是我一直忽略的东西:)请帮帮忙?

因为代码说控件将到达行

end = true;
当情况

serverTextLine.indexOf("*** Goodbye") == 0
返回true

这就是indexOf(String)返回的方法:如果存在字符串中的子字符串的索引,如果找不到,则返回-1


只有当字符串以子字符串开头时,才能将“0”作为索引。例如,当服务器文本行以“***再见”开头时

最明显的建议是其他线程点击这里的关闭开关,将“end”设置为true。另一个明显的建议是,在待写catch块中设置一个“end”。(也就是说,如果你失去了连接,只需发送“end”并退出循环)它不是“before”它。这些while循环采用不同的方法,如果您正在重写
run()
,则可能正在执行一些线程。是的,
run
方法上方的
@Override
的存在表明该类是线程使用的
线程或
Runnable
。因此,这几乎肯定是多线程代码,其中一个线程设置
end
,另一个线程检查它。@JonKiparsky您的不满是有道理的,但这是网络编程的一个例子,因此故意忽略了这一点。我是线程和线程的新手,并且仍然在了解这个概念,所以我相信你对另一个线程的看法是正确的。你们都是。非常感谢。是的,但我不明白的是,当它在代码中实际更改循环条件的部分之前不断通过循环时,它将如何到达.indexOf:)每当输入不为null时,程序将打印一些字符串作为输出。!!while循环检查输入字符串是否为null,如果该字符串不是null,则继续并打印该字符串。然后它将检查输入字符串到特殊单词的索引,这里再见!!如果它是特殊的字,那么线程本身在返回时停止执行。