关闭DataOutputStream和DataInputStream时出现unreachable code错误
不可达代码报错原因分析
- 该报错的本质是Java编译器检测到对应代码片段永远没有执行机会,属于编译阶段的提前校验拦截。
- 你的第一段代码中
while(true)是无退出条件的死循环:循环内部没有任何break、return语句,也没有主动抛出异常终止流程的逻辑,循环会永远运行,因此写在循环后的资源关闭代码永远不可能被执行,直接触发unreachable code报错。 - 第二段代码可正常运行的核心差异是:
while(true)内部存在明确的退出分支,当用户输入字符串为Exit时会执行break跳出循环,后续的资源关闭代码存在可执行路径,因此编译器不会判定为不可达代码。
修复方案
给第一段代码的死循环增加退出分支即可,示例如下:
while (true) { System.out.println(inputFromServer.readUTF()); int choice = scan.nextInt(); // 新增退出逻辑,比如输入0时退出 if (choice == 0) { outputToServer.writeInt(choice); socket.close(); break; } if (choice == 1) { outputToServer.writeInt(choice); System.out.println(inputFromServer.readUTF()); } }
内容的提问来源于stack exchange,提问作者Sergio
相关产品推荐
相关产品推荐

