Static. Существуют всегда

Static. Существуют всегда

Статические переменные и методы принадлежат классу, а не объекту. Они существуют даже если ни один объект не был создан. Доступ к ним можно получить, даже если ссылочная переменная проинициализирована как null!!!
В статических методах нельзя вызывать non-static переменные или методы, т.к. на момнет их вызова, non-static члены класса еще не существуют - они существуют только в объекте.
Но в non-static можно вызывать static методы и переменные, т.к. они существуют независимо от того, был создан объект или нет.


public class SimpleUsing {
    static int value = 20;
    int result;
    
    static int returnValue() {  // В static-методах можно использовать static-переменные
        return value;
    }
    
    int returnResult() {
        return result;
    }
    
    void useStaticVariable() {             // В non-static-методах можно 
        System.out.println(value+result); // использовать static-переменные
    }
    
    void useStaticMethod() {                // non-static-методах можно 
       System.out.println(returnValue());  // использовать static-методы
    }
    
    static void useInstanceVariable() { //Ошибка компиляции. В static-методах нельзя
        System.out.println(result);   // использовать non-static-переменные
    }
    
    static void useInstanceMethod() {        // Ошибка компиляции. В static-методах нельзя
        System.out.println(returnResult()); // использовать non-static-методы
    }


class Example {
   public static void main(String[] args) {
     SimpleUsing su = null;
     System.out.println(su.value);       // получаем доступ даже если ссылка
     System.out.println(su.returnValue()); // проинициализирована как null
        
     SimpleUsing su2 = new SimpleUsing();
     su2.useStaticVariable();
     su2.useStaticMethod();
  }
}
Основы Java