在非静态方法内调用没有类实例的非静态方法

时间:2019-05-29 18:19:36

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

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实例就不能调用;

它如何工作?

2 个答案:

答案 0 :(得分:1)

它有一个实例,您在main中创建的实例,是您在进行g.pri()时使用的实例。在pri之类的实例方法中,被调用的实例可以作为this使用,而this.是可选的。在实例方法中,这两个语句完全是同一件事:

mod();
this.mod();

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

(关于意见,我建议您至少将其包括在字段中,因为否则,在代码x = y + 1中您不知道{{ 1}}和x是实例的方法或字段中的局部变量。)

答案 1 :(得分:0)

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()