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 语言规范
“我们的想法是,从包含该语句的构造器,方法,实例初始化器或静态初始化器的开始,必须有一些可能的执行路径。 分析考虑了语句的结构。
除了对条件表达式具有恒定值
true
的while
,do
和for
语句进行特殊处理外,在流量分析中不考虑其他表达式的值。
这意味着在确定不可访问的代码时不会考虑'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 中的无效代码有疑问,请在评论部分写下。 我将尝试解决您的查询。
学习愉快!