【发布时间】:2011-02-22 09:57:11
【问题描述】:
package com.test;
public class OuterClass {
public class InnerClass {
public class InnerInnerClass {
}
}
public class InnerClass2 {
}
//this class should not exist in OuterClass after dummifying
private class PrivateInnerClass {
private String getString() {
return "hello PrivateInnerClass";
}
}
public String getStringFromPrivateInner() {
return new PrivateInnerClass().getString();
}
}
当使用Sun JVM 1.6.0_20 在命令行上运行javac 时,此代码会生成6 个.class 文件:
OuterClass.class
OuterClass$1.class
OuterClass$InnerClass.class
OuterClass$InnerClass2.class
OuterClass$InnerClass$InnerInnerClass.class
OuterClass$PrivateInnerClass.class
在eclipse中通过JDT运行时,只产生5个类。
OuterClass.class
OuterClass$1.class
OuterClass$InnerClass.class
OuterClass$InnerClass2.class
OuterClass$InnerClass$InnerInnerClass.class
OuterClass$PrivateInnerClass.class
反编译时,OuterClass$1.class 不包含任何内容。这个额外的类是从哪里来的,为什么要创建它?
【问题讨论】:
-
我能够确认这一点。
class OuterClass$1 extends java.lang.Object{ }。很奇怪。 -
如果您将 PrivateInnerClass 公开,它会消失吗?也许它与“伪造”对类的私有访问有关。
-
@Alex:不,1999 年的错误报告也提到了虚拟类。请参阅我的“答案”。
-
谢谢大家。我认为我能够根据我发送给你们的各种实况调查任务来解决我的问题。 :)
标签: java inner-classes anonymous-class