000wangxinyu000
V2EX  ›  Java

JAVA 使用内部静态类实现单例模式的一个小疑问

By 000wangxinyu000 at 2016 年 11 月 14 日 · 5294 次点击

今天使用静态内部类实现单例模式时,看到一个小细节。静态内部类 Inner 中 instance 居然是私有成员变量,而且在外部类 Singleton 中使用的时候居然直接引用了。我看到好多地方都这样用,而且下面代码测试也能通过。请问为什么静态内部类中的私有成员变量可以在外部类中使用?

public class 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);  
}  

}

2 条回复
GhostFlying
   1
GhostFlying  
   2016 年 11 月 14 日   ❤️ 1
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
000wangxinyu000
   2
000wangxinyu000  
OP
   2016 年 11 月 15 日
@GhostFlying 奥奥~明白了~
© 2026 V2EX · 28ms · 3.9.8.5