A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 来明坤 中级黑马   /  2012-6-26 17:44  /  2674 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 来明坤 于 2012-6-26 17:56 编辑

是否可以从一个static方法内部发出对非static方法的调用?为什么

8 个回复

倒序浏览
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。
回复 使用道具 举报
可以通过创建对象,用对象调用。
public static void main(String[] args)
        {
          new Demo().show();
        }
因为非静态方法只有创建对象后才存在,static是类加载到内存就存在了。
回复 使用道具 举报
不可以,非static方法和static方法的生命周期不一样,意义也不一样,static方法是所有对象共享的,生命周期随着类的加载而存在;非static方法是每个对象特有的,随着对象的加载而存在
回复 使用道具 举报
可以,但是得通过new对象的方式
public class Test
{
        public static void main(String[] args)
        {
                new Test().method();
        }
       
        public void method()
       
        {
                System.out.println("a");
        }
}
回复 使用道具 举报
张华廷 发表于 2012-6-26 17:50
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而 ...

哦 明白了 还是看以前课件 有个标注 没弄明白怎么回事儿
回复 使用道具 举报
刘笑 中级黑马 2012-6-26 17:58:48
7#
不可以,可以这样理解,static修饰的方法可以直接用类名调用
非static修饰的方法必须用类new出对象才能调用
当我们用类名直接调用时,可能这个类的对象并没有new。
如果这时候static方法里调用非static的方法就会出现空指针异常,
当然这种错误编译时就不会通过
回复 使用道具 举报
理论上来讲是不可以的,static 方法的生命周期是在程序退出运行后才会终止,属于类方法,可以操作类变量。
关于类方法,在该类被加载到内存中时,就被分配了相应的入口地址,即使该类没有创建对象,也可以直接通过类名调用类方法(当然,类方法也可以通过对象调用)。所以,java规定:类方法中出现的成员变量必须是被所有对象共享的变量(类变量),即类方法不可以操作实例变量,这样规定的原因是:在类创建对象之前,实例对象还没有分配内存,类方法也不可以调用其他实例方法,因为在该类创建对象之前,实例方法没有入口地址。
回复 使用道具 举报
柯玲 中级黑马 2012-6-26 18:12:27
9#
不可以,若非要调用,必须创建非static方法的对象,main函数调用类方法就是一个很好的说明例子。
非static方法是类的成员,只有类创建对象以后,才能通过对象调用;
static方法是在类创建时就存在于静态方法区,不需要通过对象调用,可以脱离对象独立存在。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马