为什么 内部类 不可以声明 静态变量

来源:互联网 发布:北京软件就业培训 编辑:程序博客网 时间:2024/04/30 04:28

        内部类的对象 脱离了其 外围类的对象 就不会存在, 静态变量 的作用就是 让该类的所有对象共享一个状态。 这个类的所有对象都可以获取和修改这个状态。如果仅仅是这个目的,就可以推出这个状态也是所有外部对象所共享的状态,因此这个定义就可以提升至 外围类中定义,没有必要在内部类中定义,因此在JAVA中不允许在内部类中声明 静态变量,但是可以允许其继承父类的 静态变量,因为父类可能有很多子类,这些子类不一定是用作内部类。

        内部类的用途就是 利用外围类对象的资源做事。

我在论坛中看到其他一个关于这个问题的分析(摘抄如下):

因为这会产生歧义。

比如

class   Outer   {
    int   outerX;
    Inner   inner1   =   new   Inner();
    Inner   inner2   =   new   Inner();
    class   Inner   {
        int   innerX;
    }
}

Outer   outer1   =   new   Outer();
Outer   outer2   =   new   Outer();

假如innerX是static的,那么这个static的含义是
1:仅是同一outer实例下的不同inner实例共享:
outer1.inner1.innerX=outer1.inner2.innerX,And  
outer2.inner1.innerX=outer2.inner2.innerX,But
outer1.inner1.innerX!=outer2.inner1.innerX,Hence
outer1.inner2.innerX!=outer2.inner2.innerX

2:   所有outer实例的inner实例都共享:
outer1.inner1.innerX=outer1.inner2.innerX,And  
outer2.inner1.innerX=outer2.inner2.innerX,And
outer1.inner1.innerX=outer2.inner1.innerX,Hence
outer1.inner2.innerX=outer2.inner2.innerX

 

这个分析是错误的,因为:

outer1.inner1.getClass() ==outer2.inner1.getClass()返回true;

所以,假如innerX是static的,同一个类调用其静态属性获取的值是指向同一个内存位置的。

 

原创粉丝点击