Подтвердить что ты не робот

Могут ли нестатические методы изменять статические переменные

Мне интересно, как нестатический метод может изменить статическую переменную. Я знаю, что статические методы могут получить доступ только к другим статическим методам и статическим переменным. Однако правда ли другая сторона? Могут ли нестатические методы обращаться только к нестатическим переменным? Например:

public class SampleClass {
  private static int currentCount = 0;

  public SampleClass() {
    currentCount++;
  }

  public void increaseCount() {
    currentCount++;
  }
}

Этот код компилируется, и я хотел бы знать, почему с точки зрения статических привилегий доступа.

4b9b3361

Ответ 1

Я нашел это из Учебников по Java

  • Методы экземпляров могут напрямую обращаться к переменным экземпляра и методам экземпляров.
  • Методы экземпляров могут напрямую обращаться к переменным класса и методам класса.
  • Методы класса могут напрямую обращаться к переменным класса и методам класса.
  • Методы класса не могут напрямую обращаться к переменным экземпляра или методам экземпляра - они должны использовать ссылку на объект. Кроме того, методы класса не могут использовать это ключевое слово, поскольку для этого не существует экземпляра.

Итак, ответ да, нестатические методы МОЖЕТ изменять статические переменные

Ответ 2

Нет, любой нестатический метод имеет доступ к статическим членам. Единственный способ, которым это было бы ложным, - это если нестатический контекст не имел доступа к статическому члену (например, статический член является приватным классу, а нестатический код не входит в этот класс). существуют статические переменные для предоставления бесплатной переменной/метода экземпляра, поэтому, например, если у нас есть класс Game и переменная с рекордом, рекордер будет статичным (доступным без экземпляра) и после каждой игры (экземпляр класса Game) мы можем изменить рекорды из нашего нестатического контекста, если наш счет больше, чем высокий балл.

Ответ 3

Нестационарные методы могут обращаться к статическим переменным. Статические методы могут напрямую обращаться к статическим переменным или методам без создания объекта object.ex: public static void main (String arg [])

Ответ 4

Посмотрите на это так. Статическая переменная может быть доступна во многих отношениях. Один из наиболее распространенных заключается в том, чтобы предшествовать имени var с именем класса, поскольку статические vars для каждого класса. Поскольку вы ссылаетесь на эту переменную в том же классе, вы освобождаетесь от предшествующего ей имени класса. Неважно, где вы называете статическую переменную. Также это приватная статическая переменная, недоступная любому другому классу.

Ответ 5

Статические методы не могут изменять нестатические поля, поскольку - для использования нестатического поля (вне класса) вы должны создать экземпляр объекта класса, Но для использования Static-метода вообще нет необходимости в создании экземпляра объекта. Вот почему это не разумно для нестатического метода (который не требует создания объекта) для изменения поля, которое должно быть создано.

Для этого - статические методы могут касаться только статических полей (или вызвать другие статические методы).

Но, как вы сказали, наоборот, возможно, Нестатический метод может изменять статическое поле, статичное для всех объектов его класса.

Ответ 6

Статические переменные - это переменная класса, а не экземпляр или локальная переменная. поэтому мы также можем использовать статическую переменную в нестационарном методе. и статические переменные не относятся к одному объекту. статические переменные имеют одну копию, которая будет использоваться во всей программе.

Ответ 7

Статические элементы не являются членами экземпляра, они разделяются классом, поэтому в основном любой метод экземпляра может обращаться к этим статическим членам.

Ответ 8

Нестатические методы могут обращаться к статическим переменным и статическим методам, поскольку они являются членами класса

Демо-код

public class Static_Class {
    protected static String str;
    private static int runningLoop;

    static{
        str = "Static Block";
    }

    /**
     * Non-Static Method Accessing Static Member  
     */
    public void modifyStaticMember(){
        str = "Non-Static Method";      
    }

    /**
     * Non-Static Method invoking Static Method
     */
    public void invokeStaticMethod(){
        String[] args = {};
        if(runningLoop == 0){
            runningLoop++;
            main(args); 
        }
        //Exiting as it will lead to java.lang.StackOverflowError
        System.exit(0);
    }

    public static void main(String[] args) {
        Static_Class instance = new Static_Class();
        System.out.println(str);
        instance.modifyStaticMember();

        // Changed Value persists 
        System.out.println(str);

        //Invoking Static Method
        instance.invokeStaticMethod();

    }
}

Ответ 9

Да, статический метод может получить доступ к нестатической переменной. Это делается путем создания объекта в классе и доступа к переменной через объект. В приведенном ниже примере main - это статический метод, который обращается к переменной a, которая является нестатической переменной.

демо-код:

public class Sample {

   private int a;

   void method()
   {
       System.out.println("i am a private method");
   }

   public static void main(String[] args)
   { 
       Sample sample=new Sample();
       sample.a=10;
       System.out.println(sample.a);
   }
}