static final boolean $assertionsDisabled = !java/util/TaskQueue.desiredAssertionStatus();
这是看到的源文件java.util.TaskQueue.java
任何人都知道这是什么意思?
static final boolean $assertionsDisabled = !java/util/TaskQueue.desiredAssertionStatus();
这是看到的源文件java.util.TaskQueue.java
任何人都知道这是什么意思?
了解断言机制如何工作,看看断言语句如何影响性能是有益的。当编译器在类中找到断言时,它会将生成的名为
$assertionsDisabled
的静态最终字段添加到类中。该字段未分配(这是合法的字节码)。断言本身被编译成形式的语句:
if ($assertionsDisabled)
if (!boolean_expression)
throw new AssertionError(String_expression);
谢谢,@Tomasz Nurkiewicz。完美答案(+1)。但我相信这不是何健问的。我相信他只是不明白这句话语法上的意思。 – AlexR
由于Java标识符可以包含拉丁文字母,$ _和数字从字母其中$开始,_是一种字母$assertionsDisabled
是一个有效的Java标识符类型为boolean
。
java/util/TaskQueue.desiredAssertionStatus()
似乎不是一个有效的表达式。可能它应该看起来像java.util.TaskQueue.desiredAssertionStatus()
。在这种情况下,它是调用类TaskQueue
的静态方法desiredAssertionStatus()
。
此方法返回布尔结果。 !
反转结果。
唯一的问题是它究竟是什么?由于显而易见的语法错误出现在这里(/
而不是.
)我假设这行是Java代码反编译或“坏”编码尝试的结果。我对吗?
我刚才检查了java.util.TaskQueue.java
的源代码。它不包含这样的线。所以,我现在很确定你从解编中得到了它。如果没有找到它们的源代码,你可能有IDE插件反编译所有的类吗?
这是因为这个类有一个断言,然后编译器自己创建这个变量。
那么问题是什么?它是一个设置为'desiredAssertionStatus()'方法的反向返回值的布尔变量。实际上,'java/util/TaskQueue'部分不是有效的Java源代码。 – Thomas