Почему я не могу называть объект типом String в методе static?

У меня есть маленький код, в котором я верю в объект String названный name и я даю ему стандартную настройку в строителе и называю этот же самый объект с одним System.out.println. Ошибка, которая выходит у меня,, - когда метод, где я называю объект, static и у меня выходит ошибка. Когда я это снимаю, он скроллирует меня хорошо. Почему?

Как я, не необходимо использовать объект, чтобы звонить в метод static, например метод main программ в java.

Почему назвав объект в методе static у меня ошибка выходит?

Это код:

package Methods;

/**
 *
 * @author sommer0123
 */
public class TheMethodJava {
    String  name =  new  String();

    public TheMethodJava(){
        this.name = "Gilberto Quintero Armenta";
    }

    public static void GetName(String myname){
        System.out.println(name);
    }
}
0
задан 08.01.2017, 02:00
0 ответов

Согласно спецификации Java, когда ты помечаешь метод с модификатором static ты показываешь, что этот метод будет призван, не ссылаясь ни на какой объект в особенности. Когда ты призываешь в метод, обычно ты это называешь посредством объекта в особенности, считай следующее определение класса A:

public class A {

    String nombre = "Daniel";
    int edad = 24;

    public static void saludar() {
        System.out.println("¡Hola!");
    }

    public void despedirse() {
        System.out.println("¡Adiós! " + nombre);
    }

    public boolean mayorDeEdad() {
        return edad >= 18;
    }

}

У этого класса A есть два метода: один названные saludar который, после того, как работает, он печатает на экране: "Привет!" и другой, который, будучи призван, он печатает на экране: "До свидания! Даниэль". Чтобы мочь призывать в метод despedirse ты должен создавать переменную, которая была бы инстанцией класса A, и использовать оператор точку (.), чтобы звонить в этот метод.

A a = new A();
a.despedirse();

Предыдущий код печатает на экране: "До свидания! Даниэль". Когда ты будешь верить в объект класса A этот объект, создай копию всех Ваших переменных инстанции, в этом случае, у него есть копия, свойственная переменной типа String имя, стоимость которого - "Даниэль". Когда ты звонишь в метод despedirse эта использует стоимость переменной nombre объекта, где он призывается (в этом случае, переменной a) и знай, как работать.

Сейчас, он считает метод saludar. Будучи помечен модификатором static, этот метод работает без необходимости создавать инстанцию объекта в особенности, следовательно призывается так:

A.saludar();

и он напечатает на экране: "Привет!". Другой образ мыслей в этих методах состоит в том, что 'свойство' тех же самых принадлежит им классу (в этом случае класс A) и не в инстанции класса (как переменная в, хотя он также может быть призванным, как a.saludar (), но это не обычно).

Проблема

Поскольку я упомянул раньше, у каждого объекта / ссылки класса в Java есть копия ее собственных переменных инстанции, например:

A a = new A();
A b = new A();

переменная в и b у них есть их собственные копии целой переменной edad. Следовательно, любой метод, который ты выполнишь, сделает операции на его собственных переменных. Но сейчас, если ты выполняешь статический метод static, в существо метод, который принадлежит ему классу и не переменной: какое чувство у него есть, что он согласился на переменную инстанции класса, если для того, чтобы метод работал, он не нуждается в инстанции класса?.

Это означает, что в твоем примере, статическом методе GetName твоего класса TheMethodJava смоги быть призванным так:

TheMethodJava.GetName();

но, если не существует созданный объект типа TheMethodJava на какую переменную, названную ямс он сослался бы?

В пользу этого мотива, стандарт Java упоминает о том, что произойдет ошибка компиляции, если в статическом классе (та, у которой есть по крайней мере статический метод) ты попробуешь использовать переменную класса, который не является статическим.

Решение

Возможное решение состоит в том, чтобы ты удалил модификатор static метода, или что ты добавил модификатор static в твою переменную name. Таким образом, метод сможет использовать переменную, так как ни метод ни переменная не нуждаются в ссылке, чтобы быть призванными.

3
ответ дан 03.12.2019, 17:50

Статический метод не может не соглашаться ни на какой компонент (метод или переменная) не статический, потому что не статические компоненты справляются на уровне инстанции, а именно мы нуждаемся в инстанции одной классы (Объекты) для того, чтобы эти компоненты "существовали", в то время как статические компоненты не нуждаются в инстанции, мы подумали о следующем способе: статический (static) = класс, не-статический = инстанция.

В то время как не статический метод может соглашаться на статические и не статические компоненты.

0
ответ дан 03.12.2019, 17:50