3
static final boolean $assertionsDisabled = !java/util/TaskQueue.desiredAssertionStatus();

在源文件中可以看到java.util.TaskQueue.java

4

3 回答 3

11

引用6.2.1 断言开销

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

if ($assertionsDisabled)
  if (!boolean_expression)
    throw new AssertionError(String_expression);
于 2012-05-23T09:23:56.853 回答
3

由于 java 标识符可以包含拉丁字母,$、_ 和以字母开头的数字(其中 $ 和 _ 是一种字母$assertionsDisabled)是一个有效的 java 标识符类型boolean

java/util/TaskQueue.desiredAssertionStatus()似乎不是一个有效的表达方式。大概应该是这样java.util.TaskQueue.desiredAssertionStatus()的。desiredAssertionStatus()在这种情况下,它是从 class调用静态方法TaskQueue

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

唯一的问题是它到底是什么?由于这里出现了明显的语法错误(/而不是.),我假设这一行是反编译 java 代码或“错误”编码尝试的结果。我对吗?

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

于 2012-05-23T09:28:15.837 回答
1

正是因为这个类有一个断言,那么编译器就为自己创建了这个变量。

于 2013-12-12T18:11:41.197 回答