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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨兴庭 高级黑马   /  2013-6-18 17:01  /  1867 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 巩建 于 2013-6-18 21:12 编辑

今天自己遇到非常困惑的地方?静态方法不可以调用非静态方法,静态方法中没有this关键字,我一直把这个当做结论来记的,今天看到一个论坛里的一个帖子,他的入学面试时问到了,静态方法可以调用非静态方法?吗我一想当然不可以,静态方法只能访问静态成员,不能访问非静态成员,静态方法不能调用非静态方法。我当时脑子里就是这么想的

但是静态方法不能调用非静态方法?我又想到静态方法是类方法,静态方法中没有this,所以但是静态方法不能调用非静态方法。

但是静态方法中又为什么没有this?this是个引用哪个对象调用方法就引用哪个对象,静态方法也可以被其他成员调用,那么为什么静态方法中没有this呢?我非常的迷惑

哪位哥么知道的?麻烦画个内存图帮忙解释下  ,老规矩30论坛金币感谢

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1

查看全部评分

5 个回复

倒序浏览
静态方法在是随着类的加载而加载的, 而类被加载的时候, 对象是还没有被建立的.

this是对象的引用, 对象还不存在的时候,就自然不能使用this.

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
杨兴庭 + 10
Super_Class + 1 赞一个!

查看全部评分

回复 使用道具 举报
很简单,this是指当前对象,而静态优先于对象存在,存储在方法区中,此时堆中还没有对象,所以在静态方法加载的时候就没有对象,何来的this

评分

参与人数 1黑马币 +5 收起 理由
杨兴庭 + 5 谢了。。

查看全部评分

回复 使用道具 举报
静态方法不属于任何一个类的对象,那么既然对象都不属于了,那么我想请问你,this指向什么呢?你只看见可以用对象.静态方法,但你有没有想到用类名.静态方法呢,此时都没创建出对象,请问this指向谁?

评分

参与人数 1黑马币 +10 收起 理由
杨兴庭 + 10 谢了

查看全部评分

回复 使用道具 举报
this是指当前对象,因为调用静态方法时是不需要实例对象的所以也就不会存在this了。

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 谢了。。

查看全部评分

回复 使用道具 举报
因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用
而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象
如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。

评分

参与人数 1黑马币 +5 收起 理由
杨兴庭 + 5 谢了。。。

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马