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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

8 个回复

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

评分

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

查看全部评分

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

评分

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

查看全部评分

回复 使用道具 举报
不可以,静态方法不能访问非静态成员
回复 使用道具 举报
不可以 ,  首先你要清楚staic 静态方法跟非静态方法进内存的先后顺序,弄清楚了这一点,这些问题的答案就很清晰了

static是先进入内存的静态内存区,而非静态必须是创建对象后才进入内存的堆内存中

在这里如果在一个 static 方法中调用了一个非静态的方法,那么这个static静态方法在进入内存的时候就会找不到所调用的方法,因为该方法还没有被实例化。

就好比你去一个屋子找人,必须是你要找的人事先已经在屋子里了,你才能找到他,所以,非静态可以调用静态和非静态,而静态只能调用静态。

评分

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

查看全部评分

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