在循环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,则继续并打印该字符串。然后它将检查输入字符串到特殊单词的索引,这里再见!!如果它是特殊的字,那么线程本身在返回时停止执行。