黑马程序员技术交流社区

标题: 一个关于static的问题 [打印本页]

作者: xingkong123    时间: 2014-11-25 21:50
标题: 一个关于static的问题
是否可以从一个static方法内部发出对非static方法的调用?

作者: yy306525121    时间: 2014-11-25 22:32
不可以的,static的方法在虚拟机启动的时候要先创建,你想想,static的方法创建了,其他的方法还没创建呢,就开始调用了,当然不行了
作者: 依米阳光    时间: 2014-11-26 09:37
以前老师常说的一句话:静态只能调用静态,非静态成员可以调用非静态成员也可以调用静态成员,这是死规定。不关非静态成员有没有创建,静态成员调用非静态成员都是错误的。

关于为什么静态成员不能调用非静态成员?
因为静态成员总是比非静态成员创建的早,当静态成员存在的时候,非静态还可能不存在,所以规定静态成员不能调用非静态成员。

关于静态成员为什么比非静态成员创建的早?
因为静态成员当加载类的时候就已经被创建了,非静态只有在创建该类对象的时候才会被创建。
作者: 刘峻池    时间: 2014-11-26 20:35
必然是不可以的,非静态的方法往往会涉及到类中的成员,而静态方法是不操作对象的特有数据的,也就是不需要操作类中的成员。
作者: 韩邦龙    时间: 2014-11-26 23:08
本帖最后由 韩邦龙 于 2014-11-26 23:09 编辑

不可以,静态是随着类的加载而存在于方法区中,优先于对象先加载,而非静态随着对象的建立而存在对象里面。所以当静态方法访问对象时,对象还不存在,所以静态方法只能访问静态方法。同时静态内部不可以使用this,super字样,因为没有对象。希望能解决你的疑问。
作者: 考拉是只猫    时间: 2014-11-27 12:25
不可以 静态方法不可以调用非静态
作者: 跟上节奏    时间: 2014-11-27 12:48
不可以的,静态变量先于非静态创建
作者: chensc    时间: 2014-11-28 18:58
学习学习!
作者: abclulu    时间: 2014-11-30 11:24
不可以的 。。。。。。。。。
作者: 中国好熊猫    时间: 2014-11-30 11:28
当然不可以啊, static方法只能调用static方法啊 , 原因楼上说的很全了已经
作者: 菜鸟一号    时间: 2014-11-30 14:12
不行,静态方法优先于对象加载,而非静态变量必须要随着对象的加载而加载。




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