java dead code_Dead code and unreachable code in Java

学习识别Java中的无效代码和无法访问的代码。 在您的Java interview编码问题中可能会提出一个谜题。

1. Dead code and unreachable code errors

为了理解死代码,在这个难题中,我在下面给出了一段代码。 如果代码是在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. Solution – It has dead code

我们所有人都必须面对与“ Unreachable code ”相关的编译errors ,并且有些人可能已经注意到“ dead code warning ”。 以上难题仅与他们有关。

在第一种方法howToDoInJava_method1() ,第二条打印语句无法访问,因此编译器会出于明显的原因而抱怨。

在第二种方法howToDoInJava_method2() ,第二条打印语句也无法访问,但是奇怪的编译器只会警告您。 稍后我们将尝试在这里获得逻辑。

在第三个方法howToDoInJava_method3() ,第二个打印语句也无法访问,因此编译器将再次抱怨。

Why !!

3. What is dead Code

方法2中无法访问的代码称为“ Dead code ”。 这纯粹是Eclipse编译器报告的错误 ,如果您使用“ javac ”编译上述类,则Java内置编译器只会抱怨其他两种方法。 [第一和第三]。引用Java语言规范–

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

除了对while , do和条件表达式的常数值为true语句的特殊处理外,流分析中不考虑其他表达式的值。

这意味着在确定无法访问的代码时不考虑'if'块。 因为如果您通过'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中的死代码有疑问,请在注释部分写下。 我将尝试解决您的查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值