8

出于测试目的,我经常开始在已经存在的项目中输入一些代码。因此,我要测试的代码位于所有其他代码之前,如下所示:

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-statement,因为下面的“死代码”。(而在 C++ 中,编译器服从程序员并简单地编译 return 语句)

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

if (0 != 1) return;

我恨它。为什么编译器不能按我的要求做?是否有一些编译标志或注释或任何可以解决我的问题的东西?

谢谢

4

2 回答 2

10

没有标志可以改变这种行为。使死代码成为编译时错误的规则是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考虑语句条件表达式的已知常数值。类似的情况发生在考虑已知常数值的情况下,因此此代码将无法编译:ifwhile

while (true) return;

someOtherCode(); // this will be flagged as an unreachable statement
于 2011-03-08T09:46:36.087 回答
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...
}
于 2011-03-08T10:04:15.553 回答