黑马程序员技术交流社区
标题:
为什么静态方法只能访问静态成员?????????
[打印本页]
作者:
yijian2033
时间:
2015-6-14 21:09
标题:
为什么静态方法只能访问静态成员?????????
那位大神指点一下,为啥静态方法只能访问静态成员呢?????????
作者:
黑马晓飞
时间:
2015-6-14 21:18
首先你可以这么想,这就是.netframework的游戏规则。静态方法和静态属性,是在你第一次使用这个类的时候加载到内存中,并且以后都不会消失(理论上),除非程序关掉。而非静态成员必须存在于一个实例化的对象中。也就是必须new一个对象分配到堆中后它才存在。你在没有new对象之前它都不存在,你怎么去访问它?
作者:
胡亚辉
时间:
2015-6-14 21:29
规定吧 没有探究这个
作者:
Foundmoon
时间:
2015-6-14 21:37
是看的jvm的加载顺序和生命周期
作者:
zlpiano
时间:
2015-6-14 22:27
二楼正解,不过一般指的是直接调用,如果事先新建好了对象,再按“对象引用.方法”来调用的话,是可以访问非静态成员的
作者:
林RM
时间:
2015-6-14 22:29
因为静态成员优先于非 静态成员存在
作者:
安安安
时间:
2015-6-14 22:50
静态方法和静态成员存放在方法区,第一次使用这个类时就加载到内存。
而非静态方法和成员使用的时候需要new一个对象,用对象调用。
在new对象之后才会存在于内存中。
如果用静态方法调用非静态成员的话,可能内存中还没有对象没有这个成员,也就会出现错误。
所以静态方法只能调用静态成员。
作者:
ARD
时间:
2015-6-14 22:58
这么想行了 首先java编译的时候是在内存中加载静态方法,或者静态变量,如果你没new一个对象 是没有普通变量的,所以静态的方法 访问非静态变量编译会失败的 ,反之非静态的方法访问静态变量或者方法就不会出现这个问题.因为静态的方法或者变量是随着类的加载而加载在内存中的,
作者:
rose_xiaomei
时间:
2015-6-16 00:17
二楼讲的很详细
作者:
MissMr.
时间:
2015-6-16 00:48
好像是那样
作者:
小龙编程世界
时间:
2015-6-16 08:17
1,静态是随着类的加载而加载
作者:
小龙编程世界
时间:
2015-6-16 08:20
1,静态是随着类的加载而加载
2,非静态是随着对象的创建才会能实现的
3,如果此程序没创建好该对象,你静态方法去访问非静态成员,会编译失败的
总结:所以静态方法只能访问静态成员。
作者:
给点正能量
时间:
2015-6-16 08:31
楼下解释让我丰富了许多
作者:
孟茹
时间:
2015-6-16 09:20
因为非静态是依赖于对象而存在的,也就是说只有创建了对象才能调用非静态方法和属性。这个是一个类加载顺序的问题,静态是随着类的加载而加载的,而这个时候构造函还没加载,也就是还没有创建对象,这个时候在静态里面调用非静态的就会报错
作者:
yang9876q
时间:
2015-6-16 09:28
学习了,赞一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2