Вызов нестатического метода без экземпляра класса внутри нестатического метода - PullRequest
0 голосов
/ 29 мая 2019
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 (), он работает и выдает Output «Hi»;Согласно определению нестатический метод не может быть вызван без экземпляра класса;

Как это работает?

Ответы [ 2 ]

1 голос
/ 29 мая 2019

У него есть экземпляр, который вы создали в main, который вы использовали при выполнении g.pri().В методе экземпляра, таком как pri, экземпляр, к которому он был вызван, доступен как this, а this. является необязательным.В методе экземпляра эти два оператора делают точно одно и то же:

mod();
this.mod();

Если вы не включите this., компилятор Java добавит его для вас.

(С точки зрения мнения , я предлагаю вам включить его, по крайней мере, для полей, поскольку в противном случае в коде x = y + 1 вы не знаете, x иy являются локальными в методе или полях в экземпляре.)

0 голосов
/ 29 мая 2019
class GFG {
    public static void main (String[] args) {
        GFG g=new GFG();
        g.pri();
    }
}

Это работает, потому что вы вызываете нестатический метод pri () экземпляра GFC.

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

потерпит неудачу, потому что вы вызываете нестатический pri () из static main ()

...