【问题标题】:Calling non static method without class instance inside a non static method在非静态方法中调用没有类实例的非静态方法
【发布时间】:2019-05-29 18:19:35
【问题描述】:
class GFG {
public static void main (String[] args) {
    GFG g=new GFG();
    g.pri();

}

void pri(){    
  mod();
}
void mod()
{
    System.out.println("HHI");
}

}

在下面的代码中,当我在非静态方法中调用 mod() 方法而不为 mod() 方法创建类实例时,它确实可以工作并给出输出“Hi”; 根据非静态方法的定义,没有Class实例就不能调用;

它是如何工作的?

【问题讨论】:

  • new GFG() 确实创建了一个实例。那你到底在问什么?
  • 四个字母 - this
  • 必须有一个欺骗目标。
  • 为了调用 pri(),你必须有一个实例(在你的 main 中使用“new”关键字创建)。一旦 pri() 被执行,你 就在那个实例中...并且调用 mod() 在你所在的同一个实例中运行它。因此“this”关键字,这意味着找到那个东西在当前运行的实例中。

标签: java methods static class-method non-static


【解决方案1】:

它有一个实例,即您在main 中创建的实例,您在执行g.pri() 时使用了该实例。在像pri 这样的实例方法中,调用它的实例可以作为this 使用,this. 是可选的。在实例方法中,这两个语句完全相同做同样的事情:

mod();
this.mod();

如果您不包含 this.,Java 编译器会为您添加它。

(作为意见的问题,我建议您至少在字段中包含它,因为否则在代码x = y + 1 中您不知道xy 是实例上的方法或字段中的局部变量。)

【讨论】:

    【解决方案2】:
    class GFG {
        public static void main (String[] args) {
            GFG g=new GFG();
            g.pri();
        }
    }
    

    它有效,因为您调用了 GFC 实例的非静态 pri() 方法。

    class GFG {
        public static void main (String[] args) {
            pri();
        }
    }
    

    将失败,因为您从静态 main() 调用非静态 pri()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多