Java本地类.class文件名

时间:2011-12-12 18:31:42

标签: java

当同一个类的多个实例方法中存在同名的本地类时,.class文件的名称是什么? JVM如何区分这些本地类?

5 个答案:

答案 0 :(得分:3)

代码:

public class Test {

    public static void main(String[] args) {
    }

    public void method1() {
        class class1 {

        }
    }

    public void method2() {
        class class1 {

        }
    }
}

生成的类:

Test.class
Test$1class1.class
Test$2class1.class

所以它是OuterClass$(number)InnerClass

答案 1 :(得分:1)

使用local classes和匿名类,编译器会在生成的名称中添加一个数字。

编译以下代码生成了类Test.classTest$1Local.classTest$2Local.classTest$1Another.class,因此编译器(jdk1.6.0_24)总是在名称中添加一个数字(也许为了避免与内部类冲突)并且如果有两个具有相同名称的本地类,则它会增加数字以避免冲突。

public class Test {
    public void foo() {
        class Local {
        }
    }

    public void bar() {
        class Local {
        }
    }

    public void baz() {
        class Another {
        }
    }
}

答案 2 :(得分:0)

考虑以下课程:

public class test
{
    private void meth1()
    {
        class abc{}
    }
    private void meth2()
    {
        class abc{}
    }
}

它将生成以下类文件:

  1. 的Test.class
  2. 测试$ 1abc.class
  3. 测试$ 2abc.class

答案 3 :(得分:-1)

JVM使用格式org.package.OuterClass$InnerClass

为匿名类分配一个唯一的编号。

http://www.retrologic.com/innerclasses.doc7.html

答案 4 :(得分:-1)

输出.class文件名的格式为PublicOuterClass$InnerClass.class。如果内部类是匿名类,那么它将被替换为数字,并从1开始按顺序编号。