💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 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.解决方案 – 代码无效 我们所有人都必须面对与“**无效代码**”相关的编译**错误**,并且有些人可能已经注意到“**无效代码警告**”。 以上题目仅与他们有关。 在第一种方法`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 中的**无效代码**有疑问,请在评论部分写下。 我将尝试解决您的查询。 学习愉快!