我写了以下代码
public class Reader1 {
private int pageNumber;
private class ReaderName1{
public int getPage(){
return pageNumber;
}
}
static class ReaderFound{
}
}
当我在已编译的代码上使用Java类文件反汇编程序javap时
1. for Reader1.class
class Reader1$ReaderName1 {
final Reader1 this$0;
private Reader1$ReaderName1(Reader1);
public int getPage();
}
2. for Reader1$ReaderName1.class
public class Reader1 {
private int pageNumber;
public Reader1();
static int access$000(Reader1);
}
3. for Reader1$ReaderFound.class
class Reader1$ReaderFound {
Reader1$ReaderFound();
}
我的问题是,因为ReaderFound是一个静态类,它怎么能有一个默认的构造函数?如果是这样的话?是允许的吗?
如果允许在Reader1 $ ReaderFound类中找到什么类型的构造函数,因为它不是静态的。 (此外,由于构造函数被隐式调用以初始化一个对象,因为ReaderFound是一个静态类,所以我们不会 对象。我对第一个问题的看法)
答案 0 :(得分:7)
Java中有四种嵌套类:静态成员类,非静态成员类,匿名类和本地类
静态成员类可以看作是在另一个类中声明的普通类。它不需要实例化封闭类的实例。由于不需要实例,因此它无法访问封闭类中的实例方法和变量。它可以访问类成员,即使它们是私有的。
class EnclosingClass {
static class StaticMemberClass { }
public static void main(String... args) {
EnclosingClass.StaticMemberClass nestedInstance =
new EnclosingClass.StaticMemberClass();
}
}
作为静态嵌套类不意味着您无法从中创建实例。因此,如果您不创建自定义构造函数,则将创建默认构造函数。