Blocuri

Blocul este o secvență de instrucțiuni cuprinsă între acolade. Forma sintactică a blocului este, deci, următoarea:
    {
        secvență_de_instrucțiuni
    }
unde secvență_de_instrucțiuniconstă dintr-un număr oarecare de instrucțiuni succesive, putând fi și vidă. Instrucțiunile din această secvență pot fi atât simple, cât și structurate, inclusiv alte blocuri.

Din punct de vedere al programării structurate, blocul este realizarea structurii de control secvențiale. Aceasta inseamnă că instrucțiunile dintr-un bloc se execută una dupa alta, în ordinea în care ele sunt scrise în program. Tocmai de aceea se și folosește termenul secvență de instrucțiuni pentru a indica ce conține blocul.
 
Exemplu
În programul de mai jos, conținut în fișierul Blocuri.java, se exemplifică folosirea unor blocuri imbricate (cuprinse unul în altul). Prin comentarii s-a semnalat începutul și sfârșitul fiecărui bloc, deși aceasta nu se face în mod curent. Remarcăm că însuși corpul metodei main (și al oricărei alte metode) este tot un bloc. Fiecare bloc conține atât declarații de variabile, cât și instrucțiuni-expresie
 
/* Exemplu de program care contine blocuri imbricate */

class Blocuri { // aici incepe corpul clasei Blocuri
  public static void main(String args[]) { // aici incepe blocul A
    int m=8, n=-3;
    double u=m*3.5+32, v=2, w;
    w=m*u+v;
    System.out.println("m="+m+" n="+n+" u="+u+" v="+v+" w="+w);
    m++;
    { // aici incepe blocul B, continut in A
      int a=5;
      double p=m*w-3.5, q;
      q=n*p-a; // s-a folosit n din blocul exterior
      { // aici incepe blocul C continut in B
        System.out.println("m="+m+" a="+a+" p="+p+" q="+q);
      } // aici se termina blocul C
    } // aici se termina blocul B
  } // aici se termina blocul A (corpul metodei main)
} // aici se incheie corpul clasei Blocuri

La executarea acestui program se afișează următoarele rezultate:
 
m=8 n=-3 u=60.0 v=2.0 w=482.0
m=9 a=5 p=4334.5 q=-13008.5
Remarcăm că:
  - în expresiile prin care se calculează valoarea inițială a variabilei u s-a luat în considerație valoarea variabilei m determinată anterior;
  - în blocul B, la calcularea valorii inițiale a variabilei p s-au folosit valorile variabilelor m si w calculate la executarea unor instrucțiuni-expresie anterioare; se confirmă astfel că inițializarea variabilelor nu se face la compilare, când aceste valori nu sunt cunoscute, ci  la executarea declarației.

Variabile locale și domenii de vizibilitate

Variabilele declarate într-un bloc sunt variabile locale ale blocului respectiv. Domeniul de vizibilitate al unei variabile locale începe în locul din program în care aceasta a fost declarată și se încheie la sfârșitul blocului care conține declarația respectivă. Variabila este deci "vizibilă" (poate fi utilizată) în propriul său bloc și în toate blocurile interioare acestuia, în domeniul de vizibilitate.

Exemplu:
În programul din fișierul Blocuri.java, dat ca exemplu mai sus, variabilele m, n, u, v și w sunt declarate în blocul A (în însuși corpul metodei main) și sunt vizibile (pot fi utilizate) atât în acest bloc, cât și în blocurile interioare B și C. În schimb variabilele a, p și q pot fi utilizate numai în blocul B, în care sunt declarate, și în blocul C situat în interiorul acestuia.
 
În memoria mașinii virtuale Java, variabilele locale sunt plasate pe stiva procesului curent. La executarea unei instrucțiuni-declarație, variabilele conținute în aceasta sunt puse pe stivă, în ordinea în care ele apar în declarația respectivă. Când se ajunge la sfârșitul blocului în care au fost declarate, variabilele sunt scoase de pe stivă. Cât timp se află pe stivă, variabilele sunt vizibile și deci pot fi utilizate.



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați