|
Un bloc de instructiuni este o secventa, eventual vida, de instructiuni si declaratii de variabile locale. Aceste instructiuni se executa in ordinea in care apar in interiorul blocului. Sintactic, blocurile de instructiuni sunt delimitate in sursa de caracterele
In limbajul Java, regula generala este aceea ca oriunde putem pune o instructiune putem pune si un bloc de instructiuni, cu cateva exceptii pe
care le vom sesiza la momentul potrivit, specificand in acest fel ca instructiunile din interiorul blocului trebuiesc privite in mod unitar si tratate ca o singura instructiune.
O declaratie de variabila locala introduce o noua variabila care poate fi folosita doar in interiorul blocului in care a fost definita. Declaratia trebuie sa contina un nume si un tip. In plus, intr-o declaratie putem specifica o valoare initiala in cazul in care valoarea implicita a tipului variabilei, definita standard de limbajul Java, nu ne satisface.
Numele variabilei este un identificator Java. Acest nume trebuie sa fie diferit de numele celorlalte variabile locale definite in blocul respectiv si de eventualii parametri ai metodei in interiorul careia este declarat blocul.
De exemplu, este o eroare de compilare sa declaram cea de-a doua variabila x in blocul:
Compilatorul va semnala faptul ca deja exista o variabila cu acest nume in interiorul metodei. Eroarea de compilare apare indiferent daca cele doua variabile sunt de acelasi tip sau nu.
Nu acelasi lucru se intampla insa daca variabilele sunt declarate in doua blocuri de instructiuni complet disjuncte, care nu se includ unul pe celalalt. De exemplu, declaratiile urmatoare sunt perfect valide:
Practic, fiecare bloc de instructiuni defineste un domeniu de existenta a variabilelor locale declarate in interior. Daca un bloc are subblocuri declarate in interiorul lui, variabilele din aceste subblocuri trebuie sa fie distincte ca nume fata de variabilele din superbloc. Aceste domenii se pot reprezenta grafic ca in figura urmatoare:
Figura reprezinta situatia din primul exemplu. Observati ca domeniul blocului interior este complet inclus in domeniul blocului exterior. Din aceasta cauza, x apare ca fiind definita de doua ori. In cel de-al doilea exemplu, reprezentarea grafica este urmatoarea:
In acest caz, domeniile in care sunt definite cele doua variabile sunt complet disjuncte si compilatorul nu va avea nici o dificultate in a identifica la fiecare referire a unei variabile cu numele x despre care variabila este vorba. Sa mai observam ca, in cel de-al doilea exemplu, referirea variabilelor x in blocul mare, in afara celor doua subblocuri este o eroare de compilare.
In cazul in care blocul mare este blocul de implementare al unei metode si metoda respectiva are parametri, acesti parametri sunt luati in considerare la fel ca niste declaratii de variabile care apar chiar la inceputul blocului. Acest lucru face ca numele parametrilor sa nu poata fi folosit in nici o declaratie de variabila locala din blocul de implementare sau subblocuri ale acestuia.
In realitate, o variabila locala poate fi referita in interiorul unui bloc abia dupa declaratia ei. Cu alte cuvinte, domeniul de existenta al unei variabile locale incepe din punctul de declaratie si continua pana la terminarea blocului.
Astfel, urmatoarea secventa de instructiuni:
va determina o eroare de compilare, cu specificatia ca variabila x nu a fost inca definita in momentul primei atribuiri.
Acest mod de lucru cu variabilele face corecta urmatoarea secventa de instructiuni:
pentru ca, in momentul declaratiei din interiorul subblocului, variabila x din exterior nu este inca definita. La iesirea din subbloc, prima declaratie isi termina domeniul, asa ca se poate defini fara probleme o noua variabila cu acelasi nume.