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

时间:2012-02-04 16:30:37

标签: java

我到处搜索试图找出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);
  }

4 个答案:

答案 0 :(得分:15)

这并不意味着什么特别 - 它只是一个构成名称一部分的字母,与之前的l或之后的e完全相同。

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

答案 1 :(得分:4)

我们无法真正告诉我,因为你没有提供变量声明,但在Java中$可以是变量名的一部分,例如你可以这样做:

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

这样的内容将打印Hello

答案 2 :(得分:3)

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

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

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

原始源代码如下所示:

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);
  }

答案 3 :(得分:1)

允许美元符号用变量名称,但按惯例,它不会被使用。看看这里 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html