
今天使用静态内部类实现单例模式时,看到一个小细节。静态内部类 Inner 中 instance 居然是私有成员变量,而且在外部类 Singleton 中使用的时候居然直接引用了。我看到好多地方都这样用,而且下面代码测试也能通过。请问为什么静态内部类中的私有成员变量可以在外部类中使用?
public cass Singleton
{
private Singleton(){ }
public static Singleton getInstance() { return Inner.instance; /*此处使用了静态内部类的私有静态成员变量?*/ } //在第一次被引用时被加载 static class Inner { private/*why?*/ static Singleton instance = new Singleton(); } public static void main(String args[]) { Singleton instance = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); System.out.println(instance == instance2); } }
1 GhostFlying 2016-11-14 21:27:11 +08:00 static inner class 被视作 top level 的 class 的一个 member ,和 field 和 method 一样 http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.1 |
2 000wangxinyu000 OP @GhostFlying 奥奥~明白了~ |