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

© 张海洋 中级黑马   /  2013-3-23 16:32  /  2217 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是否可以从一个static方法内部发出对非static方法的调用?

8 个回复

倒序浏览
不可以。静态方法直接产生在公共内存空间,而非静态想要创建对象后才能使用
回复 使用道具 举报
不可以,静态的只能访问静态的,非静态的可以访问静态的和非静态的
回复 使用道具 举报
static的方法,属于整个类的,可以用类名.方法来访问
非static的方法 书专属于某个对象,使用对象名.方法名来访问
当我们用类名直接调用时非static 的方法时,可能这个类的对象并没有new,调用也就无从谈起。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
不可以的,静态方法只能访问静态方法,非静态方法既可以访问静态方法又可以访问非静态方法
回复 使用道具 举报
   认真看视频吧,大哥~~毕老大讲的很清楚
   试想一下:静态是随着类的加载而加载的,首先存在于内存中,而非静态属于对象成员,只有new一个对象时,才会加载到内存,
如果没有new一个对象时,非静态成员就不存在了,这时静态去访问非静态,可能吗?能访问到不存在的东西吗?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
不可以,静态方法不能访问非静态成员
回复 使用道具 举报
黄玉昆 黑马帝 2013-3-23 17:55:55
8#
常见小测试题答案:http://bbs.itheima.com/thread-41087-1-1.html
下面的是我帖子中的原题和源代码。请不要一字不差的提问,谢谢
6、是否可以从一个static方法内部发出对非 static方法的调用?
不可以,如果其中包含对象的method();不能保证对象初始化.
static修饰的成员是在类加载的时候初始化的,而非static的成员是在创建对象的时候,即new操作的时候才初始化的。先后顺序是:先加载,才能初始化,那么加载的时候初始化static的成员,此时非static的成员还没有被加载必然不能使用,而非static的成员是在类加载之后,通过new操作符创建对象的时候初始化,此时static 已经分配内存空间,所以非静态成员可以访问静态成员!
      简单点说:静态成员属于类,不需要生成对象就存在了.而非静态需要生成对象才产生.,所以静态成员不能直接访问.  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马