其他人都知道这意味着什么?

时间:2012-05-23 09:20:08

标签: java

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

在源文件java.util.TaskQueue.java

中看到

3 个答案:

答案 0 :(得分:11)

引用6.2.1 Assertion Overhead

  

理解断言机制如何工作以了解断言语句如何影响性能是很有用的。当编译器在类中找到断言时,它会向类中添加一个名为$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)

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