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