黑马程序员技术交流社区

标题: static问题 [打印本页]

作者: 唐溪永    时间: 2012-2-21 09:32
标题: static问题
是否可以从一个static方法内部发出对非static方法的调用?为什么呢
作者: 何招俊    时间: 2012-2-21 09:40
不行,
可以这样理解
static修饰的方法可以直接用类名调用
非static修饰的方法必须用类new出对象才能调用
当我们用类名直接调用时,可能这个类的对象并没有new。
如果这时候static方法里调用非static的方法就会出现空指针异常,
当然这种错误编译时就不会通过
作者: 马胜平    时间: 2012-2-21 09:51
因为在装载class得时候static方法首先完成,此时非static属性和方法还没有完成初始化,要构造方法调用后才初始化可用。。。所以不能调用。
作者: 张开开    时间: 2012-2-21 10:42
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。
作者: 许圣建    时间: 2012-2-21 11:58
本帖最后由 许圣建 于 2012-2-21 11:59 编辑

都是可以实现的,但是这并不是java静态方法的出现目的,你在静态方法内部创建一个本类对象就行了,main函数是不是静态,他是不是可以使用所有的方法,只不过类方法更简洁,对象方法处理的更具针对性。
一个工具的使用最优方法一般在它被创造时已经明确了,因需创造,而不是创造后找使用的地方,类方法就是整个类的方法,
非静态方法就是个体对象的方法,我们当然希望所有的方法都是类方法,可是那样要定义多少个类,语言是现实世界的抽象和描述,合乎人的世界观

作者: 李会启    时间: 2012-2-21 12:26
这样是不可以的,因为static方法调用的时候不需要创建对象,而非static方法必须创建对象之后才可以被调用,
作者: 袁野    时间: 2012-2-21 13:23
我的是这样理解的 静态的方法是先跟着类进行加载。非静态是跟随对象加载的  先加载类 后加载的对象 所以在静态方法里不可以调用非静态的方法 ,反之则才可以
作者: dangfei    时间: 2012-2-21 14:17
程序加载入虚拟机时,静态方法被调入内存可以直接使用;非静态方法必须初始化(New())后才能使用,所以非要使用的话,要先new所在类。
作者: 【专】【属】    时间: 2012-2-21 17:17
这样应该是不行的。因为对static修饰的,是类成员的,是所有对象都共享的。而非static的是每一个实例对象所特有的。
static在类载的时候就存在了,是生命周期最长的,而实例对象是在new的时候才会存在。
作者: 温昌寿    时间: 2012-2-21 17:21
static是公共的,只要你程序加载的时候这个并会自动运行,但是我想应该是可以在里面调用非静态的对象,但是在那之前你必须先要对先进行创建与初始化
作者: 花开~的季节    时间: 2012-2-21 17:23
不能,因为static是随着类的加载已存在,优先于类




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