为什么 内部类 不可以声明 静态变量
来源:互联网 发布:北京软件就业培训 编辑:程序博客网 时间: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的,同一个类调用其静态属性获取的值是指向同一个内存位置的。
- 为什么 内部类 不可以声明 静态变量
- java 静态内部类不可以继承非静态内部类理解
- ViewHolder为什么要被声明成静态内部类
- 非静态内部类中为什么不能存在静态变量
- 【Java语法】java中成员内部类内为什么不允许有任何静态声明搜索
- Java内部类(3):非静态内部类为什么不能有静态成员变量和静态方法。
- 为什么局部内部类访问局部变量,局部变量必须声明为final?
- ListView优化中View Holder为什么用static声明为静态内部类
- 关于内部类为什么可以有静态常量,不能有静态变量的原因?
- 为什么java内部类访问局部变量必须声明为final?
- 匿名内部类 使用外部的变量为什么要声明成final
- 匿名内部类 使用外部的变量为什么要声明成final
- 静态成员变量不可以导出??
- java再复习——成员内部类为什么不能定义静态变量
- Java为什么使用静态内部类?
- Java SE -- 内部类与静态变量
- 非静态内部类不能有静态声明
- 构造函数为什么不可以声明为虚函数?
- vimrc backup
- uva3901
- VMware使用技巧
- s3c2440,linux,wince,android
- 三国志9
- 为什么 内部类 不可以声明 静态变量
- Dos 命令
- Linux下安装tomcat
- AS3应用程序模块化开发与ApplicationDomain
- 通过ConfigurationSection来轻松地加载配置文件
- 开源代码分析的一些笔记
- 使用动态链接库(DLL)
- 如何同时打开两个配置不同的firefox
- 学会控制自己 - 看《绿巨人》有感觉