爪哇的内部班级



我正在阅读学习java中的内部类。我找到了这个代码

class Animal{
   class Brain{
   }
}

编译后,javap 'Animal$Brain'将输出作为

提供
Compiled from "Animal.java"class 
Animal$Brain {
    final Animal this$0;
    Animal$Brain(Animal);
}

解释了内部类是如何获取内部类构造函数中其封闭实例的引用。但是,当我将内部类定义为私人

class Animal{
   private class Brain{
   }
}

然后在编译后,javap 'Animal$Brain'将输出作为

Compiled from "Animal.java"
class Animal$Brain {
    final Animal this$0;
}

那么为什么输出有所不同?为什么不显示内部类构造函数?在后一种情况下,内类也正在获得封闭类实例的引用。

好问题。据此,

如果没有使用选项,Javap将传递给IT

的类的包装,受保护,公共字段以及公共字段和方法

由于您已将Brain声明为私人内部类,因此其默认的构造函数将被隐式私有化,因此在Animal类之外不会可见。

参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.8.8.9

默认情况下,Javap打印了类的非私人成员。

您可以使用-p选项显示所有类和成员。

//javap -p 'Animal$Brain.class'
Compiled from "Animal.java"
class Animal$Brain {
  final Animal this$0;
  private Animal$Brain(Animal);
}

相关内容

  • 没有找到相关文章

最新更新