Se afișează postările cu eticheta bloc. Afișați toate postările
Se afișează postările cu eticheta bloc. Afișați toate postările

marți, 27 ianuarie 2026

Membri de clasă

MEMBRI DE CLASA sunt membrii declarați cu ajutorul cuvântului cheie static. Fiind aplicat la diverse elemente, le face asociate cu clasa în loc de o instanță specifică a acelei clase. Datorită acestui fapt, puteți utiliza numele clasei pentru a face referire la un câmp static (variabilă statică) sau pentru a apela o metodă statică, fără a fi necesitate de a instanția clasa în acest sens.

Iată câteva elemente care pot fi marcate ca fiind statice:

a) Variabile statice.
Sunt folosite atunci când avem nevoie ca variabilele clasei să fie partajate de toate instanţele clasei. Sunt stocate în Heap. De obicei sunt constante simbolice. Pentru aşa tip de variabile sistemul aloca o singura zonă de memorie, la care au acces toate instanţele clasei respective. Nu vom putea avea pentru fiecare instanţă a clasei valoarea ei proprie pentru o astfel de variabila. Dacă o instanţă va modifica valoarea unei variabile statice aceasta valoare se va modifica pentru toate instanţele.

b) Metode statice. 
Sunt accesate fară o instanţiere a clasei respective:

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ă:

Deoarece metodele statice nu aparțin unui obiect anumit asupra lor nu putem folosi cuvântul cheie
this:
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). 
O clasă statică internă este o clasă definită în interiorul altei clase, iar aceasta este declarată ca fiind statică. Ea nu are acces la membrii non-statice ai clasei exterioare. 

public class Exemplu {
static class ClasaStaticaIncorporata {
// Codul clasei încorporate statice
}
}

e) Variabile statice finale. 
Sunt de fapt constante. Pentru a fi accesate nu va fi necesar de instanțiat clasa.

f) Importuri statice. 
În Java, puteți importa membrii statici ai unei clase atunci când nu doriți să utilizați numele clasei în mod repetat.