当同一个类的多个实例方法中存在同名的本地类时,.class文件的名称是什么? JVM如何区分这些本地类?
答案 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.class
,Test$1Local.class
,Test$2Local.class
和Test$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{}
}
}
它将生成以下类文件:
答案 3 :(得分:-1)
JVM使用格式org.package.OuterClass$InnerClass
为匿名类分配一个唯一的编号。
答案 4 :(得分:-1)
输出.class
文件名的格式为PublicOuterClass$InnerClass.class
。如果内部类是匿名类,那么它将被替换为数字,并从1
开始按顺序编号。