Zmienne lokalne — są zadeklarowane i istnieją tylko w ciele metody lub bloku, nie są automatycznie inicjowane. Użycie nieinicjowanej zmiennej lokalnej prowadzi do błędu kompilacji.
Zmienne instancji (pola, nie static) — należą do każdego obiektu osobno, są inicjowane w momencie tworzenia instancji obiektu.
Zmienne statyczne (static fields) — są wspólne dla wszystkich instancji klasy, istnieją w jednym egzemplarzu dla całej klasy. Ich zmiana w jednym obiekcie jest widoczna we wszystkich innych obiektach tej klasy.
public class Example { private int instanceVar; // zmienna instancji private static int staticVar; // zmienna statyczna public void foo() { int localVar = 0; // zmienna lokalna } }
Czy zmienne statyczne mogą być prywatne i jak są widoczne między różnymi instancjami klasy?
Odpowiedź: Tak, zmienne statyczne mogą być prywatne. Ich zmiana jest odzwierciedlana dla wszystkich instancji klasy, ponieważ należą do klasy, a nie do obiektu.
public class MyClass { private static int counter = 0; public MyClass() { counter++; } public static int getCounter() { return counter; } }
Utworzenie kilku instancji MyClass zwiększy ten sam licznik.
Historia
W aplikacji enterprise programista błędnie umieścił stan użytkownika w polu statycznym. Spowodowało to, że użytkownicy "widzieli" dane innych użytkowników w środowisku wieloosobowym.
Historia
Podczas pisania aplikacji wielowątkowej zmienna instancji była używana wewnątrz statycznej metody bez odpowiedniej synchronizacji. To spowodowało wyścigi danych i nieoczekiwane wyniki.
Historia
Programista postanowił użyć zmiennej lokalnej zamiast pola klasy do przechowywania wyniku pośredniego. Zmienna była niszczona po wyjściu z metody, a program zawsze zwracał null, co nie zostało wykryte od razu w testach.