Зачем делать объект для класса Main, чтобы методы работали? - PullRequest
0 голосов
/ 27 августа 2018

Раньше я сталкивался с ошибкой, но когда я создал объект в этом классе и вызвал метод, он работал безупречно.Любое объяснение?Всегда ли мне нужно создавать объект для вызова методов вне основного метода (но в том же классе)?здесь:

public class A{

    public static void main(String[] args){

        A myObj= new A();
        System.out.println(myObj.lets(2));

    }

   public int lets(int x){
       return x;
   }

}

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Вам нужно понять, static.Он связывает метод или поле с самим классом (а не с конкретным экземпляром класса).Когда программа начинает выполнение, JVM не создает экземпляр A перед вызовом main (потому что main равен static и потому что нет конкретных экземпляров A для использования);это делает его глобальной и точкой входа .Чтобы вызвать lets, вам понадобится A (как вы нашли) или сделать его static (и вы также можете ограничить его видимость ) в свою очередь

private static int lets(int x) {
    return x;
}

И тогда достаточно

System.out.println(lets(2));

.Мы также можем сделать его generic как

private static <T> T lets(T x) {
    return x;
}

и затем вызвать его с любым типом (хотя тип все равно должен переопределять toString(), чтобы результат был особенно полезен при использовании с System.out.println).

0 голосов
/ 27 августа 2018

Существует понятие важности, которое следует учитывать как static concept.В вашем примере вы должны создать экземпляр вашего класса, потому что метод main является статическим и он only "работает" с другими статиками methods or variable.Помните, что когда вы создаете экземпляр класса, вы создаете копию этого класса и сохраняете эту копию в переменной экземпляра, так как копия (That was create inside of a static method in your case) также является статической, поэтому она может получить доступ к методу, который не является статичным в этом контексте.

Чтобы не создавать экземпляр и не получить доступ к вашему методу, вам необходимо сделать lets method статичным (из-за обители объяснения)

public static int lets(int x){
       return x;
}

И в вашем основном вам не нужночтобы создать экземпляр класса для доступа к этому методу.

 public static void main(String[] args){
    System.out.println(lets(2));
 }

Проверьте это руководство о статическом в Java: https://www.baeldung.com/java-static

Надеюсь, эта помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...