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

2016-11-14 21:01:24 +08:00
 000wangxinyu000

今天使用静态内部类实现单例模式时,看到一个小细节。静态内部类 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);  
}  

}

4101 次点击
所在节点    Java
2 条回复
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
000wangxinyu000
2016-11-15 09:05:15 +08:00
@GhostFlying 奥奥~明白了~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/320495

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX