static final boolean $assertionsDisabled = !java/util/TaskQueue.desiredAssertionStatus();
在源文件java.util.TaskQueue.java
答案 0 :(得分:11)
理解断言机制如何工作以了解断言语句如何影响性能是很有用的。当编译器在类中找到断言时,它会向类中添加一个名为
$assertionsDisabled
的生成的静态最终字段。该字段未分配(这是合法的字节码)。断言本身被编译成以下形式的声明:
if ($assertionsDisabled)
if (!boolean_expression)
throw new AssertionError(String_expression);
答案 1 :(得分:3)
由于java标识符可以包含拉丁字母,$,_和从字母开始的数字,其中$和_是字母$assertionsDisabled
的类型,是boolean
类型的有效java标识符。
java/util/TaskQueue.desiredAssertionStatus()
似乎不是一个有效的表达式。可能它应该看起来像java.util.TaskQueue.desiredAssertionStatus()
。在这种情况下,它是从类desiredAssertionStatus()
调用静态方法TaskQueue
。
此方法返回布尔结果。 !
会反转结果。
唯一的问题是它究竟是什么?由于这里出现了明显的语法错误(/
而不是.
),我认为这一行是java代码反编译或“坏”编码尝试的结果。我对吗?
我刚检查了java.util.TaskQueue.java
的源代码。它不包含这样的行。所以,我很确定你现在已经从反编译中获得了它。您是否有IDE插件可以在没有找到源代码的情况下反编译所有类?
答案 2 :(得分:1)
这是因为这个类有一个断言,然后编译器为它自己创建这个变量。