2012-05-23 115 views
3
static final boolean $assertionsDisabled = !java/util/TaskQueue.desiredAssertionStatus(); 

这是看到的源文件java.util.TaskQueue.java任何人都知道这是什么意思?

+2

那么问题是什么?它是一个设置为'desiredAssertionStatus()'方法的反向返回值的布尔变量。实际上,'java/util/TaskQueue'部分不是有效的Java源代码。 – Thomas

回答

11

引用6.2.1 Assertion Overhead在:

了解断言机制如何工作,看看断言语句如何影响性能是有益的。当编译器在类中找到断言时,它会将生成的名为$assertionsDisabled的静态最终字段添加到类中。该字段未分配(这是合法的字节码)。断言本身被编译成形式的语句:

if ($assertionsDisabled) 
    if (!boolean_expression) 
    throw new AssertionError(String_expression); 
+0

谢谢,@Tomasz Nurkiewicz。完美答案(+1)。但我相信这不是何健问的。我相信他只是不明白这句话语法上的意思。 – AlexR

3

由于Java标识符可以包含拉丁文字母,$ _和数字从字母其中$开始,_是一种字母$assertionsDisabled是一个有效的Java标识符类型为boolean

java/util/TaskQueue.desiredAssertionStatus()似乎不是一个有效的表达式。可能它应该看起来像java.util.TaskQueue.desiredAssertionStatus()。在这种情况下,它是调用类TaskQueue的静态方法desiredAssertionStatus()

此方法返回布尔结果。 !反转结果。

唯一的问题是它究竟是什么?由于显而易见的语法错误出现在这里(/而不是.)我假设这行是Java代码反编译或“坏”编码尝试的结果。我对吗?

我刚才检查了java.util.TaskQueue.java的源代码。它不包含这样的线。所以,我现在很确定你从解编中得到了它。如果没有找到它们的源代码,你可能有IDE插件反编译所有的类吗?

+0

是的,你是对的。 – HeJian

+0

@HeJian,将JDK源连接到您的JDK。 JDK源文件位于您的JDK安装目录下的'src.zip'文件中 – AlexR

1

这是因为这个类有一个断言,然后编译器自己创建这个变量。

相关问题