为了账号安全,请及时绑定邮箱和手机立即绑定

静态方法不能直接调用非静态方法

静态方法不能直接调用非静态方法

30秒到达战场 2021-04-09 14:15:34
根据javatpoint中的限制,静态方法不能直接调用非静态方法。“直接”到底是什么意思,为什么我不能这样做?是的,我可以通过哪些间接方式来做到这一点?
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

根据用javatpoint编写的限制,静态方法不能直接调用非静态方法。


当然可以。他们只需要一个实例来调用它们。这是直接调用非静态方法的静态方法的示例:


class Example {

    public static void main(String[] args) {

        Example e = new Example();

        e.hiThere();     // <========== Direct call to instance method

        go(e);

    }

    private static void go(Example e) {

        e.hiThere();     // <========== Direct call to instance method

    }

    private void hiThere() {

        System.out.println("Hi there");

    }

}

“直接”到底是什么意思,为什么我不能这样做?


它们可能意味着“不使用实例”。这根本不是我直接定义“直接”的方式。例如,在上面的示例中,main如果没有hiThere实例将其调用,则无法调用。但是一旦有了一个实例(在本main例中,通过创建一个实例),就可以直接对其进行调用hiThere。同样在示例中,go可以直接调用hiThere; 它接收实例作为参数。


是的,我可以通过哪些间接方式来做到这一点?


它们不是间接的:您需要在其上调用该方法的实例。但是,当静态方法具有实例时,调用该实例方法与其他任何方法调用一样直接。


查看完整回答
反对 回复 2021-04-28
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这意味着,如果您有实例方法a,则无法从静态方法调用它,b因此


void a() {

   // ...

}


static void b() {

    a();

}

无效。


您不能仅仅因为静态方法未在实例内部运行而就不能做到这一点,因此它不知道在哪个实例上调用该方法。


查看完整回答
反对 回复 2021-04-28
?
ITMISS

TA贡献1871条经验 获得超8个赞

“直接”在这里表示您没有在对象上调用该方法。


例如,


public class Foo {


   public static void method1() {

       Foo myFoo = new Foo();

       myFoo.method2();   // This is OK - we're calling method2 on an object.


       method2();         // This doesn't compile - we're trying to call method2 directly.


   }


   public void method2() {

       System.out.println("This is method2");

   }

}

因此,当有对象被调用时,静态方法可以调用非静态方法。但是,直接调用而不引用该对象是无法完成的。


当然,您可以直接从另一个调用一个静态方法。您还可以直接从另一个方法中调用一个非静态方法。


查看完整回答
反对 回复 2021-04-28
  • 3 回答
  • 0 关注
  • 848 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信