黑马程序员技术交流社区
标题:
关于static方法的问题
[打印本页]
作者:
来明坤
时间:
2012-6-26 17:44
标题:
关于static方法的问题
本帖最后由 来明坤 于 2012-6-26 17:56 编辑
是否可以从一个static方法内部发出对非static方法的调用?为什么
作者:
张华廷
时间:
2012-6-26 17:50
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。
作者:
车风波
时间:
2012-6-26 17:51
可以通过创建对象,用对象调用。
public static void main(String[] args)
{
new Demo().show();
}
因为非静态方法只有创建对象后才存在,static是类加载到内存就存在了。
作者:
李伟
时间:
2012-6-26 17:51
不可以,非static方法和static方法的生命周期不一样,意义也不一样,static方法是所有对象共享的,生命周期随着类的加载而存在;非static方法是每个对象特有的,随着对象的加载而存在
作者:
耿鑫
时间:
2012-6-26 17:53
可以,但是得通过new对象的方式
public class Test
{
public static void main(String[] args)
{
new Test().method();
}
public void method()
{
System.out.println("a");
}
}
作者:
来明坤
时间:
2012-6-26 17:53
张华廷 发表于 2012-6-26 17:50
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而 ...
哦 明白了 还是看以前课件 有个标注 没弄明白怎么回事儿
作者:
刘笑
时间:
2012-6-26 17:58
不可以,可以这样理解,static修饰的方法可以直接用类名调用
非static修饰的方法必须用类new出对象才能调用
当我们用类名直接调用时,可能这个类的对象并没有new。
如果这时候static方法里调用非static的方法就会出现空指针异常,
当然这种错误编译时就不会通过
作者:
李文龙
时间:
2012-6-26 18:04
理论上来讲是不可以的,static 方法的生命周期是在程序退出运行后才会终止,属于类方法,可以操作类变量。
关于类方法,在该类被加载到内存中时,就被分配了相应的入口地址,即使该类没有创建对象,也可以直接通过类名调用类方法(当然,类方法也可以通过对象调用)。所以,java规定:类方法中出现的成员变量必须是被所有对象共享的变量(类变量),即类方法不可以操作实例变量,这样规定的原因是:在类创建对象之前,实例对象还没有分配内存,类方法也不可以调用其他实例方法,因为在该类创建对象之前,实例方法没有入口地址。
作者:
柯玲
时间:
2012-6-26 18:12
不可以,若非要调用,必须创建非static方法的对象,main函数调用类方法就是一个很好的说明例子。
非static方法是类的成员,只有类创建对象以后,才能通过对象调用;
static方法是在类创建时就存在于静态方法区,不需要通过对象调用,可以脱离对象独立存在。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2