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

非静态内部类不能有静态成员

时间:2014-10-18 20:54:00      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:java   sp   问题   代码   ef   bs   as   对象   class   

1 非静态内部类为什么不能有静态成员,

如下代码 Java代码

public class OuterClass{  

     class InnerClass{  

         private static int i;       

}  

}

对于java类加载顺序我们知道,首先加载类,执行static变量初始化,接下来执行对象的创建,如果我们要执行代码中的变量i初始化,

那么必须先执行加载OuterClass,再加载Innerclass,最后初始化静态变量i,问题就出在加载Innerclass上面,我们可以把InnerClass看成OuterClass的非静态成员,它的初始化必须在外部类对象创建后以后进行,要加载InnerClass必须在实例化OuterClass之后完成,java虚拟机要求所有的静态变量必须在对象创建之前完成,这样便产生了矛盾。

2 静态内部类可以有静态成员:

我们可以把静态内部类作为外部类OuterClass的一个静态成员,在执行类加载过程中,静态内部类在加载OuterClass后会进行初始化,同样的原理,静态内部类的静态成员也将被初始化,进行内存的分配,注意到,这时无论是内部类还是外部类,对象都没有实例化,这也说明了非静态内部类为什么不能有静态成员的原因。 Java代码

public class OuterClass{  

     static class InnerClass{        

    private static int i;      

  }  

}

非静态内部类不能有静态成员

标签:java   sp   问题   代码   ef   bs   as   对象   class   

原文地址:http://www.cnblogs.com/lulu638/p/4033581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!