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

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

public class SampleClass {
  private static int currentCount = 0;

  public SampleClass() {
    currentCount++;
  }

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

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

 Marco Forberg21 июн. 2013 г., 21:12
ты пробовал это?
 fge21 июн. 2013 г., 21:49
Ответ на вопрос: да, они могут; нет несделать это.
 Brian Vanover21 июн. 2013 г., 21:16
@ Марко Да, это компилируется. Просто интересно, документировали ли люди это где-нибудь и правильны ли мои рассуждения.
 Tom Hawtin - tackline21 июн. 2013 г., 21:21
Это'Неверно, что статические методы не могут изменять переменные экземпляра. Это'Просто они нене имеет никакого скрытого "этот" Рекомендации. Ты можешь написатьclass Ex { private int x; static void fn(Ex ex) { ex.x = 12; } }, Кстати, изменчивая статика - вообще плохая идея.

Ответы на вопрос(9)

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

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

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

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

 BharatProteemGogoi23 сент. 2018 г., 16:08
Что если у нас есть статический экземпляр этого класса? .... тогда мы можем использовать этот статический объект для изменения нестатических полей. Я прав в этом?
Решение Вопроса

Учебные руководства по Java

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

Так что ответ да, нестатические методы МОГУТ модифицировать статические переменные

статический метод может обращаться к нестатической переменной. Это делается путем создания объекта для класса и доступа к переменной через объект. В приведенном ниже примере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);
   }
}   

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

 A.Sanchez.SD18 февр. 2016 г., 20:39
Спасибо, мужик. Я не'не знаю о личной жизни, и у меня тут болит голова ....

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

Демонстрационный код

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

    }
}

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

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

 user20742102 февр. 2017 г., 02:16
Безс помощью объект. Это может быть предоставлено в качестве параметра.

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

Ваш ответ на вопрос