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

根据javatpoint中的限制,静态方法不能直接调用非静态方法。“直接”到底是什么意思,为什么我不能这样做?是的,我可以通过哪些间接方式来做到这一点?


30秒到达战场
浏览 852回答 3
3回答

慕森王

根据用javatpoint编写的限制,静态方法不能直接调用非静态方法。当然可以。他们只需要一个实例来调用它们。这是直接调用非静态方法的静态方法的示例:class Example {&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; Example e = new Example();&nbsp; &nbsp; &nbsp; &nbsp; e.hiThere();&nbsp; &nbsp; &nbsp;// <========== Direct call to instance method&nbsp; &nbsp; &nbsp; &nbsp; go(e);&nbsp; &nbsp; }&nbsp; &nbsp; private static void go(Example e) {&nbsp; &nbsp; &nbsp; &nbsp; e.hiThere();&nbsp; &nbsp; &nbsp;// <========== Direct call to instance method&nbsp; &nbsp; }&nbsp; &nbsp; private void hiThere() {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Hi there");&nbsp; &nbsp; }}“直接”到底是什么意思,为什么我不能这样做?它们可能意味着“不使用实例”。这根本不是我直接定义“直接”的方式。例如,在上面的示例中,main如果没有hiThere实例将其调用,则无法调用。但是一旦有了一个实例(在本main例中,通过创建一个实例),就可以直接对其进行调用hiThere。同样在示例中,go可以直接调用hiThere; 它接收实例作为参数。是的,我可以通过哪些间接方式来做到这一点?它们不是间接的:您需要在其上调用该方法的实例。但是,当静态方法具有实例时,调用该实例方法与其他任何方法调用一样直接。

慕勒3428872

这意味着,如果您有实例方法a,则无法从静态方法调用它,b因此void a() {&nbsp; &nbsp;// ...}static void b() {&nbsp; &nbsp; a();}无效。您不能仅仅因为静态方法未在实例内部运行而就不能做到这一点,因此它不知道在哪个实例上调用该方法。

ITMISS

“直接”在这里表示您没有在对象上调用该方法。例如,public class Foo {&nbsp; &nbsp;public static void method1() {&nbsp; &nbsp; &nbsp; &nbsp;Foo myFoo = new Foo();&nbsp; &nbsp; &nbsp; &nbsp;myFoo.method2();&nbsp; &nbsp;// This is OK - we're calling method2 on an object.&nbsp; &nbsp; &nbsp; &nbsp;method2();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// This doesn't compile - we're trying to call method2 directly.&nbsp; &nbsp;}&nbsp; &nbsp;public void method2() {&nbsp; &nbsp; &nbsp; &nbsp;System.out.println("This is method2");&nbsp; &nbsp;}}因此,当有对象被调用时,静态方法可以调用非静态方法。但是,直接调用而不引用该对象是无法完成的。当然,您可以直接从另一个调用一个静态方法。您还可以直接从另一个方法中调用一个非静态方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java