Java 中的内部 Class
Inner Class in Java
我正在阅读学习 Java 中的内在 class。我找到了这段代码
class Animal{
class Brain{
}
}
编译后,javap 'Animal$Brain'
输出为
Compiled from "Animal.java"class
Animal$Brain {
final Animal this[=13=];
Animal$Brain(Animal);
}
这解释了内部 class 如何在内部 class 构造函数中获取对其封闭实例的引用。但是当我像这样将内部 class 定义为私有时
class Animal{
private class Brain{
}
}
然后在编译后,javap 'Animal$Brain'
给出输出为
Compiled from "Animal.java"
class Animal$Brain {
final Animal this[=15=];
}
那么为什么输出不同呢?
为什么没有显示内部 class 构造函数?
在后一种情况下,内部 class 正在获取包含 class 实例的引用。
好问题。根据this,
如果没有使用任何选项,javap 打印出包,受保护的,和 public 传递给它的 classes 的字段和方法
由于您已将 Brain
声明为私有内部 class,其默认构造函数将隐式设为私有,因此在 Animal
[=24= 外部不可见].
参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9
默认情况下,javap 打印 类 的非私有成员。
您可以使用 -p 选项显示所有 类 和成员。
//javap -p 'Animal$Brain.class'
Compiled from "Animal.java"
class Animal$Brain {
final Animal this[=10=];
private Animal$Brain(Animal);
}
我正在阅读学习 Java 中的内在 class。我找到了这段代码
class Animal{
class Brain{
}
}
编译后,javap 'Animal$Brain'
输出为
Compiled from "Animal.java"class
Animal$Brain {
final Animal this[=13=];
Animal$Brain(Animal);
}
这解释了内部 class 如何在内部 class 构造函数中获取对其封闭实例的引用。但是当我像这样将内部 class 定义为私有时
class Animal{
private class Brain{
}
}
然后在编译后,javap 'Animal$Brain'
给出输出为
Compiled from "Animal.java"
class Animal$Brain {
final Animal this[=15=];
}
那么为什么输出不同呢? 为什么没有显示内部 class 构造函数? 在后一种情况下,内部 class 正在获取包含 class 实例的引用。
好问题。根据this,
如果没有使用任何选项,javap 打印出包,受保护的,和 public 传递给它的 classes 的字段和方法
由于您已将 Brain
声明为私有内部 class,其默认构造函数将隐式设为私有,因此在 Animal
[=24= 外部不可见].
参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9
默认情况下,javap 打印 类 的非私有成员。
您可以使用 -p 选项显示所有 类 和成员。
//javap -p 'Animal$Brain.class'
Compiled from "Animal.java"
class Animal$Brain {
final Animal this[=10=];
private Animal$Brain(Animal);
}