Java方法描述符中美元符号的含义是什么?

10
例如,它是Jikes RVM堆栈的一部分。
at [0x70cfba90, 0x708cfaa4] Lorg/apache/lucene/index/SegmentInfos; 
       **access$000**(Ljava/lang/String;)V
at [0x70cfbb04, 0x708b55c8] Lorg/apache/lucene/index/SegmentInfos$
       FindSegmentsFile; run()Ljava/lang/Object; at line 554
at [0x70cfbb24, 0x708c4a8d] Lorg/apache/lucene/index/SegmentInfos; 
       read(Lorg/apache/lucene/store/Directory;)V at line 272

'access' 应该是一个方法名。但是我检查了类的源代码和接口,没有叫做 'access' 的方法。我在 Google 上也没找到答案,因为 Google 不喜欢任何标点符号。有人可以帮忙吗?非常感谢。


这是用于访问方法的特殊生成代码。http://www.retrologic.com/innerclasses.doc7.html - wkl
1个回答

12

引用自@birryree链接的article:

类C的私有成员m可以被另一个类D使用,如果一个类包含另一个类,或者它们都被一个公共类所包含。由于虚拟机不知道这种分组方式,编译器在C中创建了一个本地访问协议的访问方法,允许D读取、写入或调用成员m。这些方法的名称形式为access$0、access$1等。它们从不公开。访问方法独特之处在于,它们可以添加到封闭类中,而不仅仅是内部类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接