Se afișează postările cu eticheta static. Afișați toate postările
Se afișează postările cu eticheta static. 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.



luni, 27 ianuarie 2025

Membri de instanță și membri de clasă

În Java, o clasă poate conține variabile și metode care aparțin fie obiectelor, fie clasei în sine. Acestea se împart în două categorii importante:

Membri de instanță
  • Aparțin fiecărui obiect creat din clasă
  • Fiecare obiect are propria copie
  • Se folosesc pentru a descrie caracteristici specifice fiecărui obiect
Exemplu: culoarea unei mașini, numele unui elev

Membri statici

  • Aparțin clasei, nu obiectelor
  • Există o singură copie, comună pentru toate obiectele
  • Se folosesc pentru informații sau acțiuni generale
Exemplu: numărul total de elevi, o constantă, o metodă de calcul

De ce este important să facem diferența?

Pentru că ne ajută să folosim eficient memoria, să organizăm corect codul, să înțelegem când o informație este comună tuturor obiectelor sau specifică fiecăruia.

Membrii de instanță sunt specifici fiecărei instanțe (obiect) a unei clase, în timp ce membrii de clasă sunt partajați între toate instanțele și pot fi accesați prin intermediul numelui clasei.

Utilizarea potrivită a acestor membri depinde de scopul și necesitățile specifice ale clasei.

Un programator trebuie să cunoască aspectele legate de membrii de instanță și membrii statici ai unei clase în Java din mai multe motive:
  • Membrii de instanță permit programatorilor să definească și să gestioneze datele unui obiect individual, iar membrii statici reprezintă comportamentul comun pentru toate instanțele unei clase.
  • Înțelegerea diferențelor dintre membrii de instanță și membrii statici ajută programatorii să optimizeze utilizarea memoriei.
  • Folosirea adecvată a membrilor de instanță și membrilor statici facilitează reutilizarea codului.
  • Java este un limbaj de programare orientat pe obiect, iar înțelegerea conceptelor legate de membrii de instanță și membrii statici este esențială pentru a crea și gestiona obiecte în cadrul programelor Java.