黑马程序员技术交流社区
标题:
为什么静态方法只能访问静态成员?
[打印本页]
作者:
刘一锋
时间:
2011-10-6 23:00
标题:
为什么静态方法只能访问静态成员?
为什么静态方法只能访问静态成员?我只是大致知道因为是static的关系,被他修饰的成员随着类的加载而加载,但是具体的原因还是不太清楚,谁能给我讲一下?感激不尽!
作者:
刘一锋
时间:
2011-10-6 23:20
???没有人知道吗
作者:
黄新灵
时间:
2011-10-6 23:23
话说静态成员函数和非静态成员函数。这两者之间的一个重大区别是,静态成员函数不接受隐含的this自变量。所以,它就无法访问自己类的非静态成员。
作者:
陆华山
时间:
2011-10-6 23:23
类的静态方法随类的加载而加载,也就是说类创建了,静态方法就存在在方法区了,可是可能这个时候还没有进行对象的初始化,既然没有对象初始化,那对象的成员变量,成员方法自然就不存在,静态方法就访问不了,。。。如果你实例化对象了,成员方法自然可以访问静态的,因为它早存在了。。。
作者:
张校云
时间:
2011-10-6 23:30
静态方法和属性不需要创建对象直接可以调用,非静态方法和属性只有创建对象后,才可以通过对象调用,试想,当你通用一个类调用它的静态方法时,没有创建实例对象,它的静态方法怎么调用非静态属性呢,显然不能调用,所以这个类的静态方法不能调用这个类的非静态属性,但是它可以通过本类调用它的静态属性。
作者:
刘一锋
时间:
2011-10-6 23:34
有没有例子呢!
作者:
宁超
时间:
2011-10-6 23:36
在Java中静态方法里只能访问本类方法中的静态成员,不能直接访问非静态的属性和方法。这是因为静态方法不依赖于对象,所以当类加载成功后,静态方法就可以访问了。而此时的对象不一定存在,非静态成员自然也不一定存在。而且即使存在非静态成员,静态方法也不知道访问哪一个对象的成员。
静态方法中也不能出现this关键字,因为this是针对对象而言的。本类中的非静态方法可以访问本类的静态属性,也可以调用静态方法。
作者:
王家虎
时间:
2011-10-6 23:39
首先static表示的是静态,当类中的方法或属性被static修饰之后就表示它属于类所拥有了,也就是static的东西会随着类的加载而加载,也就是随着类的产生而产生。之所以静态方法只能访问静态的成员是因为非静态的成员只有在对象产生之后才可以产生,对象比类后产生,当你用静态方法去访问非静态的成员时这些非静态的成员根本就没有产生,你怎么访问呢?但静态的成员却随着类的加载就产生了,此时成员已经产生了,所以你就可以访问了。所以静态方法只能访问静态成员。
作者:
刘一锋
时间:
2011-10-6 23:45
{:soso_e183:}ok我明白了,非静态成员的对象是关键啊,他比静态要晚产生,谢谢大家!
作者:
Java1211张美红
时间:
2015-12-28 14:42
静态方法是优先与对象存在,也就是说,当你用静态方法调用未存在的对象中的非静态成员,自然就出错了!
作者:
braingao
时间:
2015-12-28 14:44
这么老的帖子都被我搜出来了,diaodiaodiao
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2