首页 > 其他 > 详细

非静态内部类不能拥有静态变量 为什么

时间:2016-08-08 17:07:40      阅读:402      评论:0      收藏:0      [点我收藏+]

下面这段代码,如果Lazyholder没有static修饰,则编译不过

class Singleton2 {
    private static class LazyHolder {
        private static Singleton2 singleton;
    }
    public Singleton2 getInstance() {
        return LazyHolder.singleton;
    }
}

"非静态内部类不能拥有静态变量" ,可以这样理解,因为JVM类加载的顺序为:

1.先加载类

2.执行static变量的初始化

3.对象创建

如果LazyHolder没有static,则本质上,它其实是Singleton2的非静态成员,则他必须在Singleton2对象创建之后才会进行加载,然而问题在于,另一方面根据JVM的加载顺序,static 的singleton变量又必须在LazyHolder对象存在之前完成加载,这就矛盾了。

非静态内部类不能拥有静态变量 为什么

原文:http://www.cnblogs.com/heben/p/5750079.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!