在用java编译Tic Tac Toe游戏程序时,会创建一个($附加名称)

在用java编译Tic Tac Toe游戏程序时,会创建一个($附加名称),java,Java,编译Tic-Tac-Toe的代码时,以及使用swing和awt包在java中运行一些代码时。我得到一个$added类文件生成,与ClassName.class文件并行。原因可能是什么?它是否是由于ActionListeners的使用而发生的。通常,在执行涉及结构的C程序时,会生成此类.bak文件的创建 这两种方案都需要支持。名称中包含$的类文件只不过是顶级类中可能使用的内部类或匿名内部类 例如,如果您有这样的类声明:- public class A { public class B {

编译Tic-Tac-Toe的代码时,以及使用swing和awt包在java中运行一些代码时。我得到一个$added类文件生成,与ClassName.class文件并行。原因可能是什么?它是否是由于ActionListeners的使用而发生的。通常,在执行涉及结构的C程序时,会生成此类.bak文件的创建


这两种方案都需要支持。

名称中包含
$
的类文件只不过是顶级类中可能使用的
内部类
匿名内部类

例如,如果您有这样的类声明:-

public class A {
    public class B {
    }
}
然后将生成两个类文件:-
A.class
A$B.class
。 这显示了
class B
class A
内部的包含

ActionListener的情况下,这就是代码中正在发生的事情

更新:-

如果您使用的是
匿名内部类
,那么您还将获得包含
$
的类名:-

interface A {
   public void show();
}

public class Foo {
    public static void main(String[] a) {

        new A() {
            @Override
            public void show() {
                System.out.println("Hello");
            }
        }.show();
    }
}
然后生成的类文件将是:-
Foo.class
Foo$1.class


因此,如果您使用
ActionListener
作为匿名内部类,那么您也会得到
$
,在您的
类文件中
匿名内部类的名称

名称中包含
$
的类文件只不过是您可能在顶级类中使用的
内部类
匿名内部类

例如,如果您有这样的类声明:-

public class A {
    public class B {
    }
}
然后将生成两个类文件:-
A.class
A$B.class
。 这显示了
class B
class A
内部的包含

ActionListener的情况下,这就是代码中正在发生的事情

更新:-

如果您使用的是
匿名内部类
,那么您还将获得包含
$
的类名:-

interface A {
   public void show();
}

public class Foo {
    public static void main(String[] a) {

        new A() {
            @Override
            public void show() {
                System.out.println("Hello");
            }
        }.show();
    }
}
然后生成的类文件将是:-
Foo.class
Foo$1.class


因此,如果您使用
ActionListener
作为匿名内部类,那么您也会在
类文件中为该
匿名内部类的
名称中获得该
$
,Java编译器会将“main”
Foo
类的内部类
Bar
编译为Foo$Bar

即:

class Foo {
   class Bar {
   }
}
将创建
Foo.class
Foo$Bar.class

你为什么这么问?我是说,真正的问题是什么


干杯。Keith.

是的,Java编译器将“main”
Foo
类的内部类编译为Foo$Bar

即:

class Foo {
   class Bar {
   }
}
将创建
Foo.class
Foo$Bar.class

你为什么这么问?我是说,真正的问题是什么


干杯。Keith。

没有,但我写了我只是通过类的对象调用,我从来没有将其用作内部类,所以我得到了两个文件,TTTFrame.class和TTTFrame$。class@RandMate.. 在这种情况下,您可能使用的是
匿名内部类
。请参阅更新的post.Nope,但我编写了我只是通过类的对象调用,我从未将其用作内部类,所以我得到了两个文件,TTTFrame.class和TTTFrame$。class@RandMate.. 在这种情况下,您可能使用的是
匿名内部类
。看更新的帖子。作为一个初学者只是好奇。作为一个初学者,我只是好奇。