Ce înseamnă static?

Când declarați o variabilă sau o metodă ca fiind statică, aceasta aparține clasei, mai degrabă decât unei instanțe specifice. Aceasta înseamnă că există o singură instanță a unui membru static, chiar dacă creați mai multe obiecte ale clasei sau dacă nu creați niciunul. Va fi împărtășit de toate obiectele.

Cuvântul cheie static poate fi utilizat cu variabile, metode, blocuri de cod și clase imbricate.

Variabile statice

Exemplu:

public class Counter {
  public static int COUNT = 0;
  Counter() {
    COUNT++;
  }
}

COUNT variabila va fi partajată de toate obiectele clasei respective. Când creăm obiecte din clasa noastră Counter în principal și accesăm variabila statică.

public class MyClass {
  public static void main(String[] args) {
    Counter c1 = new Counter();
    Counter c2 = new Counter();
    System.out.println(Counter.COUNT);
  }
}
// Outputs "2"

Outout-ul este 2, deoarece COUNT variabila este statică și se mărește cu una de fiecare dată când este creat un nou obiect al clasei Counter. De asemenea, puteți accesa variabila statică folosind orice obiect din acea clasă, cum ar fi c1.COUNT.

Metode statice

O metodă statică aparține clasei mai degrabă decât instanțelor. Astfel, poate fi apelat fără a crea instanță de clasă. Este folosit pentru modificarea conținutului static al clasei. Există câteva restricții ale metodelor statice:

  1. Metoda statică nu poate utiliza membri non-statici (variabile sau funcții) ale clasei.
  2. Metoda statică nu poate fi utilizată this sau super Cuvinte cheie.

Exemplu:

public class Counter {
  public static int COUNT = 0;
  Counter() {
    COUNT++;
  }

  public static void increment(){
    COUNT++;
  }
}

Metodele statice pot fi apelate și din instanța clasei.

public class MyClass {
  public static void main(String[] args) {
    Counter.increment();
    Counter.increment();
    System.out.println(Counter.COUNT);
  }
}
// Outputs "2"

Ieșirea este 2, deoarece este incrementată prin metoda statică increament(). Similar cu variabilele statice, metodele statice pot fi accesate folosind variabile de instanță.

Blocuri statice

Blocurile de cod static sunt utilizate pentru inițializarea variabilelor statice. Aceste blocuri sunt executate imediat după declararea variabilelor statice.

Exemplu:

public class Saturn {
  public static final int MOON_COUNT;

  static {
    MOON_COUNT = 62;
  }
}
public class Main {
  public static void main(String[] args) {
    System.out.println(Saturn.MOON_COUNT);
  }
}
// Outputs "62"

Ieșirea este 62, deoarece variabilă MOON_COUNT i se atribuie acea valoare în blocul static.

Clase cuibărite statice

O clasă poate avea o clasă statică imbricată care poate fi accesată utilizând numele clasei externe.

Exemplu:

public class Outer {

  public Outer() {
  }

  public static class Inner {
    public Inner() {
    }
  }
}

În exemplul de mai sus, clasa Inner poate fi accesat direct ca membru static al clasei Outer.

public class Main {
  public static void main(String[] args) {
    Outer.Inner inner = new Outer.Inner();
  }
}

Unul dintre cazurile de utilizare a claselor statice imbricate în Model de constructor folosit popular în java.