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; 它接收实例作为参数。
是的,我可以通过哪些间接方式来做到这一点?
它们不是间接的:您需要在其上调用该方法的实例。但是,当静态方法具有实例时,调用该实例方法与其他任何方法调用一样直接。
TA贡献1848条经验 获得超6个赞
这意味着,如果您有实例方法a,则无法从静态方法调用它,b因此
void a() {
// ...
}
static void b() {
a();
}
无效。
您不能仅仅因为静态方法未在实例内部运行而就不能做到这一点,因此它不知道在哪个实例上调用该方法。
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");
}
}
因此,当有对象被调用时,静态方法可以调用非静态方法。但是,直接调用而不引用该对象是无法完成的。
当然,您可以直接从另一个调用一个静态方法。您还可以直接从另一个方法中调用一个非静态方法。
添加回答
举报