【问题标题】:Calling non-static methods in java [duplicate]在java中调用非静态方法[重复]
【发布时间】:2013-02-24 08:12:07
【问题描述】:

我对 Java 中的静态方法有疑问。为什么我可以在不指定类的实例的情况下在另一个非静态方法中调用非静态方法。例如,如果我有两个非静态方法 foo1() 和 foo2(),我可以说 foo2(){ foo() }。我不能在静态方法中做到这一点。例如 static void foo3(){ foo() },这不会编译。这是。在非静态方法中调用其他方法时隐式?

谢谢。

【问题讨论】:

  • @BrianRoach 不是。
  • @assylias 是的,真的。如果 OP 正在考虑一个静态方法调用同一个类中的另一个静态方法......我们就不会进行这种对话,因为它也可以正常工作。

标签: java methods static


【解决方案1】:

为什么我可以在另一个非静态方法中调用一个非静态方法而无需指定类的实例。

因为它在this 上隐式调用它:

public void foo1() {
    foo2();
}

相当于:

public void foo1() {
    this.foo2();
}

在静态方法中,没有this 可以隐式用作调用的目标。

【讨论】:

  • 感谢您的解释。
【解决方案2】:

在非静态上下文中,您处于类的实例中。您可以在该类上调用其他非静态方法,因为您在 this 上调用该方法。在静态上下文中,您没有this,因此您无法在没有特定实例的情况下调用方法。

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多