黑马程序员技术交流社区

标题: static [打印本页]

作者: 张海洋    时间: 2013-3-23 16:32
标题: static
是否可以从一个static方法内部发出对非static方法的调用?
作者: blackcaismine    时间: 2013-3-23 16:39
不可以。静态方法直接产生在公共内存空间,而非静态想要创建对象后才能使用
作者: 魏福伟    时间: 2013-3-23 16:44
不可以,静态的只能访问静态的,非静态的可以访问静态的和非静态的
作者: IT菜鸟    时间: 2013-3-23 17:11
static的方法,属于整个类的,可以用类名.方法来访问
非static的方法 书专属于某个对象,使用对象名.方法名来访问
当我们用类名直接调用时非static 的方法时,可能这个类的对象并没有new,调用也就无从谈起。
作者: 秦久启    时间: 2013-3-23 17:13
不可以的,静态方法只能访问静态方法,非静态方法既可以访问静态方法又可以访问非静态方法
作者: HM李超    时间: 2013-3-23 17:18
   认真看视频吧,大哥~~毕老大讲的很清楚
   试想一下:静态是随着类的加载而加载的,首先存在于内存中,而非静态属于对象成员,只有new一个对象时,才会加载到内存,
如果没有new一个对象时,非静态成员就不存在了,这时静态去访问非静态,可能吗?能访问到不存在的东西吗?
作者: 刘海陆    时间: 2013-3-23 17:22
不可以,静态方法不能访问非静态成员
作者: 芦子骐    时间: 2013-3-23 17:26
不可以 ,  首先你要清楚staic 静态方法跟非静态方法进内存的先后顺序,弄清楚了这一点,这些问题的答案就很清晰了

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

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

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2