首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

静态方法为啥不能调用非静态成员

2013-10-12 
静态方法为何不能调用非静态成员?我很久以前就知道静态方法不能调用非静态成员,但是从没想过为什么?只知道

静态方法为何不能调用非静态成员?

我很久以前就知道静态方法不能调用非静态成员,但是从没想过为什么?只知道书上这么说的。

今天忽然想了一下,豁然开朗:

那么静态方法为何不能调用非静态成员?

首先要从静态方法是如何被调用的呢说起? 类名.静态方法();

??????????非静态方法是如何被调用的呢? 实例变量名.非静态方法();

?????????? 实例变量名.非静态方法();???????非静态方法中的this是指代调用此方法的实例变量,(非静态方法中直接调用成员变量或成员方法其实默认是用 this.成员 做替换),this是当前实例变量。既然this是实例变量那么? 类名.静态方法(); 假设静态方法能调用非静态成员,那么静态方法中就可以出现this,既然能出现this,那么this指代什么呢?指代当前类名?

矛盾了吧?所以静态方法不能调用非静态成员。

?

既然提到this,我就多说一句:如果子类实例变量调用父类成员(属性和方法),父类中的this指代该子类实例变量,和上面 “this是当前实例变量”这句话不矛盾吧!

1 楼 cyruscript 2013-10-05   变量只有在内存中占有一席之地时才能被访问.

静态方法不能调用非静态成员,原因就是静态成员与非静态成员在内存中被实例化的时机不同。
静态成员在类加载的时候就会分配内存,就已然存在;而非静态成员即对象成员,那得等到对象实例化时才出来,在类加载时是不存在的。那在类加载时去引用一个不存在的成员,当然是不行的。 2 楼 edr_ 2013-10-05   cyruscript 写道变量只有在内存中占有一席之地时才能被访问.

静态方法不能调用非静态成员,原因就是静态成员与非静态成员在内存中被实例化的时机不同。
静态成员在类加载的时候就会分配内存,就已然存在;而非静态成员即对象成员,那得等到对象实例化时才出来,在类加载时是不存在的。那在类加载时去引用一个不存在的成员,当然是不行的。
正解!

热点排行