# Java 中的无效代码和无法访问的代码 > 原文: [https://howtodoinjava.com/puzzles/dead-code-and-unreachable-code-in-java-puzzle/](https://howtodoinjava.com/puzzles/dead-code-and-unreachable-code-in-java-puzzle/) 学习识别 Java 中的无效代码和无法访问的代码。 在您的 [Java 访谈](https://howtodoinjava.com/java-interview-questions/)编码问题中可能会提出这样的谜题。 ## 1.无效代码和无法访问的代码错误 为了理解死代码,在这个难题中,我在下面给出了一段代码。 如果代码是在 Eclipse IDE 中编译的,请尝试确定代码中的问题。 ```java public class IdentifyProblemsInCode {     public void howToDoInJava_method1() {         System.out.println("how to do");         return;         System.out.println("in java");     }     public void howToDoInJava_method2() {         System.out.println("how to do");         if (true) {             return;         }         System.out.println("in java");     }     public void howToDoInJava_method3() {         System.out.println("how to do");         while (true) {             return;         }         System.out.println("in java");     } } ``` 我将在下一节中给出上述难题的答案,但我建议您先尝试一下。 它只是为了好玩。 ## 2.解决方案 – 代码无效 我们所有人都必须面对与“ **Unreachable code** ”相关的编译**错误**,并且有些人可能已经注意到“ **无效代码警告**”。 以上难题仅与他们有关。 在第一种方法`howToDoInJava_method1()`中,第二条打印语句无法访问,因此编译器会出于明显的原因而抱怨。 在第二种方法`howToDoInJava_method2()`中,第二条打印语句也无法访问,但是奇怪的编译器只会警告您。 稍后我们将尝试在这里获得逻辑。 同样在第三种方法`howToDoInJava_method3()`中,第二条打印语句不可访问,因此编译器将再次发出错误消息。 为什么! ## 3.什么是死代码 方法 2 中无法访问的代码称为“ **死代码**”。 这是**纯粹是 Eclipse 编译器报告的错误**,如果您使用“ ***javac*** ”编译上述类,则 Java 内置编译器将仅抱怨其他两种方法。 [第一和第三]。 > **引用 Java 语言规范 –** > > “我们的想法是,从包含该语句的构造函数,方法,实例初始化程序或静态初始化程序的开始,必须有一些可能的执行路径。 分析考虑了语句的结构。 > > 除了对条件表达式具有恒定值 **true** 的`while`,`do`和`for`语句进行特殊处理外,在流量分析中不考虑其他表达式的值。 这意味着在确定不可访问的代码时不会考虑`'if'`块。 因为如果您通过`'if'`语句的路径之一,则可以到达第二个 print 语句。 一切都取决于编译器,它在编译期间确定了这一点。 在其他两个语句中,编译器确定了不可访问性,因此它抱怨错误。 如果我们再次像这样重写第二种方法。 ```java public void howToDoInJava_method2() { System.out.println("how to do"); if (true) { return; } else { return; } System.out.println("in java"); } ``` 现在,编译器确定它根本无法到达最后一个打印语句,因此`'javac'`再次报告了第二种方法的不可达代码。 如果您仍然对 Java 中的**无效代码有疑问,请在注释部分写下。 我将尝试解决您的查询。** 学习愉快!