This shows you the differences between two versions of the page.
|
poo-ca-cd:laboratoare:obiecte-in-java [2025/10/15 04:24] florian_luis.micu [Referințe] |
poo-ca-cd:laboratoare:obiecte-in-java [2025/10/15 04:36] (current) florian_luis.micu [Metode statice] |
||
|---|---|---|---|
| Line 377: | Line 377: | ||
| ====Crearea obiectelor==== | ====Crearea obiectelor==== | ||
| - | ===Constructorii=== | + | ===Constructori=== |
| Un constructor este o metodă specială care: | Un constructor este o metodă specială care: | ||
| Line 560: | Line 560: | ||
| </note> | </note> | ||
| - | Metoda finalize() este apelată de Garbage Collector **înainte** ca obiectul să fie distrus, dar **nu se recomandă** folosirea ei, deoarece: | + | Metoda ''finalize()'' este apelată de Garbage Collector **înainte** ca obiectul să fie distrus, dar **nu se recomandă** folosirea ei, deoarece: |
| * momentul apelului nu este garantat; | * momentul apelului nu este garantat; | ||
| * afectează performanța; | * afectează performanța; | ||
| - | * în versiunile moderne de Java, finalize() este deprecated. | + | * în versiunile moderne de Java, ''finalize()'' este deprecated. |
| În practică, curățarea resurselor (fișiere, conexiuni etc.) se face explicit, folosind practici recomandate pe care le vom studia în laboratoarele următoare. | În practică, curățarea resurselor (fișiere, conexiuni etc.) se face explicit, folosind practici recomandate pe care le vom studia în laboratoarele următoare. | ||
| Line 749: | Line 749: | ||
| ====Proprietăți==== | ====Proprietăți==== | ||
| | | ||
| - | În secțiunile de mai sus am menționat că o clasă poate conține și **proprietăți**. O proprietate este un **câmp** (membru) căruia i se atașează **două metode** ce îi pot expune sau modifica starea. Aceste doua metode se numesc ''getter'' si ''setter''. | + | În secțiunile de mai sus am menționat că o clasă poate conține și **proprietăți**. O proprietate este un **câmp** (membru) căruia i se atașează **două metode** ce îi pot expune sau modifica starea. Aceste doua metode se numesc ''getter'' si ''setter'' și sunt în general folosite pentru a **expune** un câmp privat. |
| | | ||
| <code java> | <code java> | ||
| Line 1112: | Line 1112: | ||
| <note tip> | <note tip> | ||
| Variabilele statice **pot** fi accesate în constructori, întrucât sunt inițializate odată cu încărcarea clasei. | Variabilele statice **pot** fi accesate în constructori, întrucât sunt inițializate odată cu încărcarea clasei. | ||
| + | </note> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ====Metode statice==== | ||
| + | |||
| + | O **metodă statică** este o metodă care aparține clasei și poate fi apelată **fără a crea un obiect** al clasei, având acces doar la membri statici. | ||
| + | |||
| + | <code java> | ||
| + | class Apple { | ||
| + | public static final int SMALL = 0, MEDIUM = 1, LARGE = 2; | ||
| + | | ||
| + | public int size; | ||
| + | |||
| + | // Funcționează | ||
| + | public static String[] getAppleSizes() { | ||
| + | return new String[] { "SMALL", "MEDIUM", "LARGE" }; | ||
| + | } | ||
| + | | ||
| + | // Eroare, "size" nu este static | ||
| + | public static int getSize() { | ||
| + | return size; | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | <note important> | ||
| + | * Metodele statice pot accesa doar **variabile statice**, deoarece membrii statici sunt inițializați **înainte de crearea instanțelor**. Astfel, o variabilă care aparține instanței, cum este ''size'', nu ar fi încă inițializată în momentul în care metoda statică ''getSize()'' este apelată. | ||
| + | * În **metodele sau blocurile statice**, cuvântul cheie ''this'' nu poate fi folosit, deoarece el face referire la **instanța curentă a clasei**. În momentul în care codul static este executat, **nu există** încă niciun obiect creat, deci nu există nicio instanță la care ''this'' să se refere. | ||
| + | </note> | ||
| + | |||
| + | ===== ===== | ||
| + | |||
| + | <note tip> | ||
| + | * Folosiți ''static'' pentru **constante**, **contoare**, **configurații globale** sau **metode utilitare** (ex. ''Math.sqrt()''). Puteți găsi câteva exemple concrete în secțiunea **[Nice to know]** de mai jos. | ||
| + | * Nu folosiți foarte des ''static'', deoarece poate strica **încapsularea** ceea ce va face codul mai greu de testat. | ||
| </note> | </note> | ||
| Line 1194: | Line 1232: | ||
| </code> | </code> | ||
| </spoiler> | </spoiler> | ||
| - | |||
| - | <note tip> | ||
| - | Folosiți ''static'' pentru **constante**, **contoare**, **configurații globale** sau **metode utilitare** (ex. ''Math.sqrt()''). Nu folosiți foarte des ''static'', deoarece poate strica **încapsularea** ceea ce va face codul mai greu de testat. | ||
| - | </note> | ||
| - | |||
| - | |||
| - | |||
| - | ====Metode statice==== | ||
| - | |||
| - | O **metodă statică** este o metodă care aparține clasei și poate fi apelată **fără a crea un obiect** al clasei, având acces doar la membri statici. | ||
| - | |||
| - | <code java> | ||
| - | class Apple { | ||
| - | public static final int SMALL = 0, MEDIUM = 1, LARGE = 2; | ||
| - | | ||
| - | public int size; | ||
| - | |||
| - | // Funcționează | ||
| - | public static String[] getAppleSizes() { | ||
| - | return new String[] { "SMALL", "MEDIUM", "LARGE" }; | ||
| - | } | ||
| - | | ||
| - | // Eroare, "size" nu este static | ||
| - | public static int getSize() { | ||
| - | return size; | ||
| - | } | ||
| - | } | ||
| - | </code> | ||
| - | |||
| - | <note tip> | ||
| - | Metodele statice pot accesa doar **variabile statice**, deoarece membrii statici sunt inițializați **înainte de crearea instanțelor**. Astfel, o variabilă care aparține instanței, cum este ''size'', nu ar fi încă inițializată în momentul în care metoda statică ''getSize()'' este apelată. | ||
| - | </note> | ||
| - | |||
| - | <note important> | ||
| - | În **metodele sau blocurile statice**, cuvântul cheie ''this'' nu poate fi folosit, deoarece el face referire la **instanța curentă a clasei**. În momentul în care codul static este executat, **nu există** încă niciun obiect creat, deci nu există nicio instanță la care ''this'' să se refere. | ||
| - | </note> | ||
| <hidden> | <hidden> | ||