Iată câteva elemente care pot fi marcate ca fiind statice:
a) Variabile statice.
b) Metode statice.
DenumireClasa.metodaStatica(); //legal
<=>
MyClass obj = new MyClass();
obj.metodaStatica(); //legal, dar NU este recomandat
Este legal să apelați o metodă statică folosind un obiect în Java, dar este considerat o practică nepotrivită și este recomandat să evitați acest lucru. De obicei, metodele statice sunt apelate pe clasa în sine, nu pe o instanță specifică a clasei. Acest lucru se datorează faptului că metodele statice NU au acces la variabilele de instanță și nu sunt legate de o anumită instanță a clasei.
Din corpul unei metode statice nu pot fi apelați membri de instanță:
Pot utiliza variabile statice declarate în clasa respectivă:
Orice metodă statică este implicit şi finală.
c) Blocuri de inițializare statice.
Un bloc de inițializare este un bloc de cod definit între { și }, asemănător cu blocuri/corpuri de metode, principala diferență fiind, blocurile de inițializare nu au un nume. Ele sunt ca metodele, însă fără antet/header (tip returnat, nume metoda, lista de parametri). Deoarece în Java nu există cod înafara clasei, blocurile de inițializare vor fi la rândul lor definite în interiorul unei clase.
Blocurile de inițializare statice sunt blocuri de cod care sunt executate DOAR O DATA atunci când clasa este încărcată de Java Virtual Machine. Aceste tipuri de blocuri de inițializare sunt utile pentru inițializarea atributelor statice din clase sau pentru a efectua o singura data un set de prelucrări. Blocurile statice de inițializare pot accesa DOAR atributele statice ale clasei în care sunt definite. NU se pot folosi variabile de instanță în blocuri de inițializare statice. Dacă încercați să faceți acest lucru veți primi o eroare de compilare: non-static variable value cannot be referenced from a static context).
Dacă nu declarați un astfel de bloc, Java colectează toate câmpurile statice într-o singură listă și le inițializează atunci când clasa este încărcată.
Se poate defini atât de multe blocuri de inițializare (statice sau nu) de câte este nevoie, dar trebuie sa se acorde atenție ordinii lor de definire, deoarece aceasta este și ordinea lor de execuție!
d) Clase interne statice (static inner classes).
public class Exemplu {
static class ClasaStaticaIncorporata {
// Codul clasei încorporate statice
}
}
e) Variabile statice finale.
f) Importuri statice.