美元符号在Java方法描述符中的含义?

时间:2011-09-28 04:03:29

标签: java descriptor dollar-sign

例如,它是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'应该是方法名称。但我检查了类源代码及其接口,没有任何方法称为“访问”。我无法在Google上找到答案,因为Google讨厌各种标点符号。有人可以帮忙吗?非常感谢。

1 个答案:

答案 0 :(得分:11)

引自article链接的@birryree

  

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