Java编译器:停止抱怨死代码

时间:2011-03-08 09:43:14

标签: java compiler-construction return dead-code

出于测试目的,我经常开始在现有项目中键入一些代码。所以,我想要测试的代码出现在所有其他代码之前,例如:

public static void main(String[] args)
{
    char a = '%';
    System.out.println((int)a);
    // To know where '%' is located in the ASCII table.

    // But, of course, I don't want to start the whole project, so:
    return;

    // The real project starts here...
}

但编译器抱怨return - 语句,因为下面的“死代码”。 (在C ++中,编译器服从程序员并简单地编译return语句)

为了防止编译器抱怨,我写了一个愚蠢的if语句:

if (0 != 1) return;

我讨厌它。为什么编译器不能按我要求做?是否有一些编译标志或注释或其他什么来解决我的问题?

由于

2 个答案:

答案 0 :(得分:10)

没有标志可以解决此问题。使死代码成为编译时错误的规则是part of the JLS (§14.21 Unreachable Statements),并且无法关闭。

循环中存在明显的漏洞,允许这样的代码:

if (true) return;

someOtherCode(); // this code will never execute, but the compiler will still allow it

完成显式以允许“注释”或条件编译(取决于某些static final boolean标志)。

如果您感到好奇:漏洞是基于以下事实:在检查代码的可达性时,if语句的条件表达式的已知常量值if陈述之内或之后。类似的情况发生在while,其中考虑了已知常量值 ,因此此代码将无法编译:

while (true) return;

someOtherCode(); // this will be flagged as an unreachable statement

答案 1 :(得分:1)

你的项目不应该有很多死鳕鱼,但是我有两种方法来解决原型问题。

使用/ * * /注释掉代码。

    // But, of course, I don't want to start the whole project, so:
    /*
    // The real project starts here...


    */
}

或创建第二种方法。

    // But, of course, I don't want to start the whole project, so:
    // realProject();
}

public static void realProject()
    // The real project starts here...
}