A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘一锋 黑马帝   /  2011-10-6 23:00  /  8123 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么静态方法只能访问静态成员?我只是大致知道因为是static的关系,被他修饰的成员随着类的加载而加载,但是具体的原因还是不太清楚,谁能给我讲一下?感激不尽!

10 个回复

倒序浏览
???没有人知道吗
回复 使用道具 举报
话说静态成员函数和非静态成员函数。这两者之间的一个重大区别是,静态成员函数不接受隐含的this自变量。所以,它就无法访问自己类的非静态成员。
回复 使用道具 举报
类的静态方法随类的加载而加载,也就是说类创建了,静态方法就存在在方法区了,可是可能这个时候还没有进行对象的初始化,既然没有对象初始化,那对象的成员变量,成员方法自然就不存在,静态方法就访问不了,。。。如果你实例化对象了,成员方法自然可以访问静态的,因为它早存在了。。。
回复 使用道具 举报
静态方法和属性不需要创建对象直接可以调用,非静态方法和属性只有创建对象后,才可以通过对象调用,试想,当你通用一个类调用它的静态方法时,没有创建实例对象,它的静态方法怎么调用非静态属性呢,显然不能调用,所以这个类的静态方法不能调用这个类的非静态属性,但是它可以通过本类调用它的静态属性。
回复 使用道具 举报
有没有例子呢!
回复 使用道具 举报
宁超 黑马帝 2011-10-6 23:36:34
7#
在Java中静态方法里只能访问本类方法中的静态成员,不能直接访问非静态的属性和方法。这是因为静态方法不依赖于对象,所以当类加载成功后,静态方法就可以访问了。而此时的对象不一定存在,非静态成员自然也不一定存在。而且即使存在非静态成员,静态方法也不知道访问哪一个对象的成员。
静态方法中也不能出现this关键字,因为this是针对对象而言的。本类中的非静态方法可以访问本类的静态属性,也可以调用静态方法。
回复 使用道具 举报
王家虎 黑马帝 2011-10-6 23:39:10
8#
首先static表示的是静态,当类中的方法或属性被static修饰之后就表示它属于类所拥有了,也就是static的东西会随着类的加载而加载,也就是随着类的产生而产生。之所以静态方法只能访问静态的成员是因为非静态的成员只有在对象产生之后才可以产生,对象比类后产生,当你用静态方法去访问非静态的成员时这些非静态的成员根本就没有产生,你怎么访问呢?但静态的成员却随着类的加载就产生了,此时成员已经产生了,所以你就可以访问了。所以静态方法只能访问静态成员。

评分

参与人数 1技术分 +2 收起 理由
李印东老师 + 2 说到点上了。

查看全部评分

回复 使用道具 举报
刘一锋 黑马帝 2011-10-6 23:45:52
9#
{:soso_e183:}ok我明白了,非静态成员的对象是关键啊,他比静态要晚产生,谢谢大家!
回复 使用道具 举报
静态方法是优先与对象存在,也就是说,当你用静态方法调用未存在的对象中的非静态成员,自然就出错了!
回复 使用道具 举报
这么老的帖子都被我搜出来了,diaodiaodiao
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马