Statická proměnná je společná pro všechny instance (nebo objekty) třídy, protože se jedná o proměnnou na úrovni třídy. Jinými slovy lze říci, že je vytvořena pouze jedna kopie statické proměnné, která je společná pro všechny instance třídy. K alokaci paměti pro takové proměnné dochází pouze jednou při načtení třídy do paměti.
Stejně jako proměnné můžeme mít i statický blok, statickou metodu a statickou třídu, o kterých se dočtete na: static keyword in java.
Syntaxe statické proměnné
statické klíčové slovo, za kterým následuje datový typ a za ním název proměnné.
static data_type variable_name;
Jak jsem se zmínil výše, statické proměnné jsou sdílené mezi všemi instancemi třídy, jsou užitečné, když potřebujeme provést správu paměti. V některých případech chceme mít společnou hodnotu pro všechny instance jako globální proměnná, pak je mnohem lepší deklarovat je jako statické, protože tím můžeme ušetřit paměť (protože u statických proměnných se vytváří pouze jedna kopie).
pochopíme to na příkladu:
Příklad statické proměnné v Javě
class VariableDemo{ static int count=0; public void increment() { count++; } public static void main(String args) { VariableDemo obj1=new VariableDemo(); VariableDemo obj2=new VariableDemo(); obj1.increment(); obj2.increment(); System.out.println("Obj1: count is="+obj1.count); System.out.println("Obj2: count is="+obj2.count); }}
Výstup:
Obj1: count is=2Obj2: count is=2
Jak vidíte ve výše uvedeném příkladu, oba objekty sdílejí stejnou kopii statické proměnné, proto zobrazují stejnou hodnotu počtu.
Příklad 2: Ke statické proměnné lze přistupovat přímo ve statické metodě
class JavaExample{ static int age; static String name; //This is a Static Method static void disp(){ System.out.println("Age is: "+age); System.out.println("Name is: "+name); } // This is also a static method public static void main(String args) { age = 30; name = "Steve"; disp(); }}
Výstup:
Age is: 30Name is: Steve
Inicializace statické proměnné
- Statické proměnné se inicializují při načítání třídy.
- Statické proměnné se inicializují před vytvořením jakéhokoli objektu této třídy.
- Statické proměnné jsou inicializovány před vykonáním jakékoli statické metody třídy.
Výchozí hodnoty statických a nestatických proměnných jsou stejné.
primitivní celá čísla(long
, short
atd.): 0
primitivní plovoucí čárky(float
, double
): 0.0
boolean: false
objektové reference: null
Statické koncové proměnné
Statické koncové proměnné jsou konstanty. Podívejme se na následující kód:
public class MyClass{ public static final int MY_VAR=27;}
Poznámka: Název konstantní proměnné by měl být v Caps! mezi nimi můžete použít podtržítko(_).
1) Výše uvedený kód se provede, jakmile je načtena třída MyClass
, před voláním statické metody a dokonce před přístupem k jakékoliv statické proměnné.
2) Proměnná MY_VAR
je veřejná, což znamená, že ji může použít jakákoliv třída. Je to statická proměnná, takže k přístupu k ní nebudete potřebovat žádný objekt třídy. Je konečná, takže hodnotu této proměnné nelze nikdy změnit v aktuální ani v žádné jiné třídě.
Klíčové body:
konečná proměnná vždy vyžaduje inicializaci, pokud byste ji neinicializovali, vyhodila by chybu kompilace. podívejte se na následující příklad-
public class MyClass{ public static final int MY_VAR;}
Error: variable MY_VAR might not have been initialized
.