Java中的$符号是什么?请查看下面的Java代码

Java中的$符号是什么?请查看下面的Java代码,java,Java,我搜索了所有地方,试图找出val$editorkit或下面的$符号是什么意思,但没有运气…请帮助 private synchronized void updateHtmlEditor(HTMLEditorKit editorkit, StringReader reader) { Runnable runnable = new Runnable(editorkit, reader) { public void run() { try {

我搜索了所有地方,试图找出val$editorkit或下面的$符号是什么意思,但没有运气…请帮助

private synchronized void updateHtmlEditor(HTMLEditorKit editorkit, StringReader reader)
  {
    Runnable runnable = new Runnable(editorkit, reader)
    {
      public void run() {
        try {
          this.val$editorkit.read(this.val$reader, LinkParser.this.htmlViewEditor.getDocument(), LinkParser.this.htmlViewEditor.getDocument().getLength());

        } catch (IOException ex) {
          Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (BadLocationException ex) {
          Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
    };
    SwingUtilities.invokeLater(runnable);
  }

它并不意味着什么特别的东西——它只是一个构成名字一部分的字母,就像它前面的
l
或后面的
e


有关名称中允许和不允许的内容的完整详细信息,请参阅上的JLS部分。

允许在变量名称中使用美元符号,但按照惯例不使用美元符号。看看这里

我想我们真的不知道,因为您没有提供变量声明,但是在Java中,
$
可以是变量名的一部分,例如,您可以这样做:

String str$rr = "Hello";
System.out.println(str$rr);

类似的东西将打印
Hello

Java编译器使用$sign来生成内部类、合成字段和方法的名称。它对Java源代码中的标识符有效,但不鼓励使用

您显示的代码看起来像是匿名内部类的反编译代码。方法中的匿名
Runnable
实现
updateHtmlEditor
访问其周围方法的参数。为了使访问成为可能,需要声明参数
final
。在Java字节码中,匿名类有三个最终实例属性,
this$0
包含外部实例
LinkParser.this
val$editorkit
val$reader
包含外部方法参数,以及一个具有三个参数的构造函数,该构造函数将其参数分配给属性

还要注意,
LinkParser.this.htmlViewEditor
是对外部类
LinkParser
属性的引用。在这个示例中,对外部实例
LinkParser的显式引用。这个
可以省略

原始源代码如下所示:

private synchronized void updateHtmlEditor(final HTMLEditorKit editorkit, final StringReader reader)
  {
    Runnable runnable = new Runnable()
    {
      public void run() {
        try {
          editorkit.read(reader, htmlViewEditor.getDocument(), htmlViewEditor.getDocument().getLength());
        } catch (IOException ex) {
          Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (BadLocationException ex) {
          Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
    };
    SwingUtilities.invokeLater(runnable);
  }