În Java o variabilă poate fi inițializată prin următoarele modalități:
1) La declarare
2) Cu ajutorul unei metode ( fie constructor fie nu)
3) Cu ajutorul blocurilor de inițializare
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 sunt de 2 tipuri:
Nestatice - blocuri de cod care sunt executate de fiecare dată când o instanță a clasei este creată, adică în cazul în care constructorul este apelat. Aceste blocuri de inițializare urmăresc inițializări de atribute statice ce trebuie executate de fiecare dată când se construiește un obiect indiferent de constructorul apelat. Blocurile instanță (nestatice) de inițializare pot accesa atribute statice și variabile de instanță.
Exemplul_1:
public class Exemplu_1
{ // Bloc de initializare nestatic (instanta)
{
System.out.println("Bloc
initializare nestatic invocat !!");
}
public Exemplu_1(){
System.out.println("Constructor
default!!!");
}
public Exemplu_1(int
x){
System.out.println("Constructor
parametrizat!!!");
}
public static void
main(String [] args){
Exemplu_1 ob1, ob2;
ob1 = new Exemplu_1();
ob2 = new Exemplu_1(0);
}
}
Statice - 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).
Exemplul_2:
public class Exemplu_2
{ // Bloc de initializare static
static {
System.out.println("Bloc
initializare static invocat !!");
}
public Exemplu_2(){
System.out.println("Constructor
default!!!");
}
public Exemplu_2(int
x){
System.out.println("Constructor
parametrizat!!!");
}
public static void main(String [] args){
Exemplu_2 ob1, ob2;
ob1 = new Exemplu_2();
ob2 = new Exemplu_2(0);
}
}