Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-ca-cd:laboratoare:design-avansat-de-clase [2025/10/13 22:25]
florian_luis.micu [Cuvântul cheie this]
poo-ca-cd:laboratoare:design-avansat-de-clase [2025/10/13 22:40] (current)
florian_luis.micu [Laboratorul 2: Obiecte în Java]
Line 3: Line 3:
   * Autori: [[miculuis1@gmail.com | Florian-Luis Micu ]], [[sorinabuf@gmail.com | Sorina-Anamaria Buf ]], [[stefancocioran@gmail.com | Ștefan Cocioran ]]   * Autori: [[miculuis1@gmail.com | Florian-Luis Micu ]], [[sorinabuf@gmail.com | Sorina-Anamaria Buf ]], [[stefancocioran@gmail.com | Ștefan Cocioran ]]
   * Data publicării:​ 13.10.2025   * Data publicării:​ 13.10.2025
-  * Data ultimei modificări: ​13.10.2025+  * Data ultimei modificări: ​14.10.2025 
 +    * reordonarea secțiunilor,​ mutarea anumitor concepte în [Nice to know] și refrazări.  ​
  
 ===== Obiective ===== ===== Obiective =====
Line 758: Line 759:
 <code java> ​ <code java> ​
  class PropertiesExample {      ​  class PropertiesExample {      ​
-     ​String myString;+     private ​String myString;
            
-     ​String getMyString() {+     public ​String getMyString() {
          ​return myString;          ​return myString;
      }      }
            
-     void setMyString(String myString) {+     public ​void setMyString(String myString) {
          ​this.myString = myString;          ​this.myString = myString;
      }      }
Line 775: Line 776:
 PropertiesExample pe = new PropertiesExample(); ​ PropertiesExample pe = new PropertiesExample(); ​
  
-pe.setMyString("​This is my string!"​);​+pe.myString = "This is bad"; // nu funcționează pentru că este "​private"​ 
 + 
 +pe.setMyString("​This is my string!"​); ​// funcționează
  
 System.out.println(pe.getMyString()); ​ System.out.println(pe.getMyString()); ​
Line 931: Line 934:
 ==== Alocarea memoriei în Heap ==== ==== Alocarea memoriei în Heap ====
  
-Obiectele în Java sunt stocate în **heap**, o zonă de memorie dedicată alocărilor dinamice. ​  +Obiectele în Java sunt stocate în **Heap**, o zonă de memorie dedicată alocărilor dinamice. Pentru a crea un obiect, folosim operatorul ''​new''​.
-Pentru a crea un obiect, folosim operatorul ''​new''​, care: +
- +
-  * alocă spațiu în memoria heap; +
-  * apelează constructorul clasei; +
-  * returnează o **referință** către noul obiect, care este stocată pe stack.+
  
 <code java Student.java>​ <code java Student.java>​
Line 965: Line 963:
  
 În exemplul de mai sus: În exemplul de mai sus:
-  * referința ''​st''​ este pe **stack**; +  * referința ''​st''​ este pe **Stack**; 
-  * obiectul ''​Student''​ este alocat pe **heap**;+  * obiectul ''​Student''​ este alocat pe **Heap**;
   * adresa obiectului din heap este copiată în referința ''​st''​.   * adresa obiectului din heap este copiată în referința ''​st''​.
  
 {{:​poo-ca-cd:​laboratoare:​obiecte-in-java:​stack_and_heap_vars.png?​nolink&​750|}} {{:​poo-ca-cd:​laboratoare:​obiecte-in-java:​stack_and_heap_vars.png?​nolink&​750|}}
  
-Când metoda în care a fost creat obiectul se termină, referința ''​st''​ dispare, dar obiectul rămâne în heap până când **Garbage Collector-ul** decide că nu mai este utilizat+Când metoda în care a fost creat obiectul se termină, referința ''​st''​ dispare, dar obiectul rămâne în Heap până când **Garbage Collector-ul** decide că nu mai este utilizat ​(când numărul ​de referințe către acea zonă din Heap ajunge la 0).
- +
-<note tip> +
-Heap-ul este gestionat **automat** ​de JVM prin Garbage Collector, programatorul nu trebuie să elibereze manual memoria. +
-</​note>​+
  
  
Line 1044: Line 1038:
 </​spoiler>​ </​spoiler>​
  
-După cum se poate observa, ''​a1''​ și ''​a2''​ vor funcționa ca entități independente una de cealaltă, astfel că modificarea câmpului ''​mass''​ din ''​a1''​ nu va avea nici un efect implicit și automat în ''​a2''​. Există totuși situații când dorim să creăm câmpuri care să fie partajate și să nu fie memorate separat pentru fiecare instanță.+După cum se poate observa, ''​a1''​ și ''​a2''​ vor funcționa ca entități independente una de cealaltă, astfel că modificarea câmpului ''​mass''​ din ''​a1''​ nu va avea nici un efect implicit și automat în ''​a2''​. ​
  
 Membrii statici **nu aparțin unei instanțe** anume, ci **clasei** în sine. Aceștia sunt împărtășiți de-a lungul tuturor obiectelor create din acea clasă și pot să fie accesate **fără** să se creeze o instanță, având o locație specială în memorie (diferită de Heap și Stack). Membrii statici **nu aparțin unei instanțe** anume, ci **clasei** în sine. Aceștia sunt împărtășiți de-a lungul tuturor obiectelor create din acea clasă și pot să fie accesate **fără** să se creeze o instanță, având o locație specială în memorie (diferită de Heap și Stack).
Line 1052: Line 1046:
 Când declarați o variabilă sau o metodă înăuntrul unei clase: Când declarați o variabilă sau o metodă înăuntrul unei clase:
   * **Membrii instanței**:​ aparțin doar obiectului instanțiat. (ex. ''​a1.mass''​ și ''​a2.mass''​ pot avea valori diferite).   * **Membrii instanței**:​ aparțin doar obiectului instanțiat. (ex. ''​a1.mass''​ și ''​a2.mass''​ pot avea valori diferite).
-  * **Membrii statici**: aparțin clasei și sunt împărtășiți de către toate obiectele (ex. toate merele pot avea aceeași constantă gravitațională).+  * **Membrii statici**: aparțin clasei și sunt împărtășiți de către toate obiectele (ex. toate merele pot avea aceeași constantă gravitațională ​''​gravAcc''​).
  
 ^Tip^Apartenență^Accesat prin^Cum este valoarea reținută în memorie^ ^Tip^Apartenență^Accesat prin^Cum este valoarea reținută în memorie^
Line 1093: Line 1087:
 </​spoiler>​ </​spoiler>​
  
-<note tip> 
-Folosiți variabile statice pentru a avea **configurații împărtășite** sau **constante la nivel de clase**, nu pentru a stoca date per obiect. 
-</​note>​ 
  
 ====Accesarea membrilor statici==== ====Accesarea membrilor statici====
Line 1124: Line 1115:
    ​public static void main(String[] args) {    ​public static void main(String[] args) {
       float g = Apple.gravAcc;​       float g = Apple.gravAcc;​
 +      ​
 +      // Corect, dar nepreferat
 +      Apple a1 = new Apple();
 +      float g = a1.gravAcc;
    }    }
 } }
poo-ca-cd/laboratoare/design-avansat-de-clase.1760383524.txt.gz · Last modified: 2025/10/13 22:25 by florian_luis.micu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0