Java 中的无效代码和无法访问的代码

Java 中的无效代码和无法访问的代码

原文: https://howtodoinjava.com/puzzles/dead-code-and-unreachable-code-in-java-puzzle/

学习识别 Java 中的无效代码和无法访问的代码。 在您的 Java 面试编码问题中可能会提出这样的谜题。

1.无效代码和无法访问的代码错误

为了理解无效代码,在这个题目中,我在下面给出了一段代码。 如果代码是在 Eclipse IDE 中编译的,请尝试确定代码中的问题。

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 语言规范

“我们的想法是,从包含该语句的构造器,方法,实例初始化器或静态初始化器的开始,必须有一些可能的执行路径。 分析考虑了语句的结构。

除了对条件表达式具有恒定值truewhiledofor语句进行特殊处理外,在流量分析中不考虑其他表达式的值。

这意味着在确定不可访问的代码时不会考虑'if'块。 因为如果您通过'if'语句的路径之一,则可以到达第二个print语句。 一切都取决于编译器,它在编译期间确定了这一点。

在其他两个语句中,编译器确定了不可访问性,因此它报错错误。

如果我们再次像这样覆盖第二种方法。

public void howToDoInJava_method2() 
{
	System.out.println("how to do");

	if (true) 
	{
		return;
	}
	else
	{
		return;
	}

	System.out.println("in java");
}

现在,编译器确定它根本无法到达最后一个打印语句,因此'javac'再次报告了第二种方法的不可达代码。

如果您仍然对 Java 中的无效代码有疑问,请在评论部分写下。 我将尝试解决您的查询。

学习愉快!