码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-08-08 17:08:20      阅读:111      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!