User Tools

Site Tools


Problem constructing authldap
laboratoare:constructori-referinte
Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
laboratoare:constructori-referinte [2017/10/07 14:41]
Laurentiu Stamate
laboratoare:constructori-referinte [2019/01/06 17:19]
Laurentiu Stamate [Resurse]
Line 1: Line 1:
 = Constructori și referințe = = Constructori și referințe =
- 
-* Responsabil:​ Laurențiu Stamate 
-* Data publicării:​ 07.10.2017 
-* Data ultimei modificări:​ 07.10.2017 
- 
 == Obiective == == Obiective ==
  
Line 164: Line 159:
 == Referințe. Implicații în transferul de parametri == == Referințe. Implicații în transferul de parametri ==
   ​   ​
-După cum știți din [[laboratoare:​java-basics|laboratorul 1]], obictele ​se alocă pe ''​heap''​. Pentru ca un obiect să poată fi folosit, este necesară cunoașterea adresei lui. Această adresă, așa cum știm din limbajul C, se reține într-un **pointer**.+Obiectele ​se alocă pe ''​heap''​. Pentru ca un obiect să poată fi folosit, este necesară cunoașterea adresei lui. Această adresă, așa cum știm din limbajul C, se reține într-un **pointer**.
  
 Limbajul Java nu permite lucrul direct cu pointeri, deoarece s-a considerat că această facilitate introduce o complexitate prea mare, de care programatorul poate fi scutit. Totuși, în Java există noțiunea de **referinţe** care înlocuiesc pointerii, oferind un mecanism de gestiune transparent. ​ Limbajul Java nu permite lucrul direct cu pointeri, deoarece s-a considerat că această facilitate introduce o complexitate prea mare, de care programatorul poate fi scutit. Totuși, în Java există noțiunea de **referinţe** care înlocuiesc pointerii, oferind un mecanism de gestiune transparent. ​
Line 215: Line 210:
     public static void main(String[] args) {     public static void main(String[] args) {
         Student s = new Student("​Alice",​ 5);         Student s = new Student("​Alice",​ 5);
-        changeReference(s); ​                // 1 +        changeReference(s); ​                // ​apel (1) 
-        System.out.println(s.getName()); ​   // 1'+        System.out.println(s.getName()); ​   // "​Alice"​
  
-        changeObject(s); ​                   // 2 +        changeObject(s); ​                   // apel (2) 
-        System.out.println(s.averageGrade);​ // 2'+        System.out.println(s.averageGrade);​ // "​10"​
     }     }
 } }
 </​code>​ </​code>​
   ​   ​
-Astfel, apelul (1) nu are nici un efect în metoda ''​main''​ pentru că metoda ''​changeReference''​ are ca efect asignarea unei noi valori referinței ''​s'',​ copiată pe stivă. ​Linia (1'​) ​va afișa textul: ''​Alice''​.+Astfel, apelul (1) nu are nici un efect în metoda ''​main''​ pentru că metoda ''​changeReference''​ are ca efect asignarea unei noi valori referinței ''​s'',​ copiată pe stivă. ​Se va afișa textul: ''​Alice''​.
 {{ :​laboratoare:​constructori-referinte:​poza1.png?​600 |}}  {{ :​laboratoare:​constructori-referinte:​poza1.png?​600 |}} 
  
-Apelul (2) metodei ''​changeObject''​ are ca efect modificarea structurii interne a obiectului referit de ''​s''​ prin schimbarea valorii atributului ''​averageGrade''​. ​Linia (2'​) ​va afișa textul: ''​10''​.+Apelul (2) metodei ''​changeObject''​ are ca efect modificarea structurii interne a obiectului referit de ''​s''​ prin schimbarea valorii atributului ''​averageGrade''​. ​Se va afișa textul: ''​10''​.
 {{ :​laboratoare:​constructori-referinte:​poza2.png?​600 |}} {{ :​laboratoare:​constructori-referinte:​poza2.png?​600 |}}
  
Line 309: Line 304:
 String s1 = "​abc";​ String s1 = "​abc";​
  
-String s2 = s.toUpperCase(); ​    // ​does not change; the method returns a reference to a new object which can be accessed using s2 variable +String s2 = s1.toUpperCase(); ​    // ​s1 does not change; the method returns a reference to a new object which can be accessed using s2 variable 
-s.toUpperCase();​ // is now a reference to a new object+s1 s1.toUpperCase();​ // s1 is now a reference to a new object
 </​code>​ </​code>​
 <note tip> <note tip>
Line 403: Line 398:
  
 </​code> ​ </​code> ​
-  - (**1p**) Testați diferența de memorie utilizată între a folosi String literal și String obținut prin constructor. Construiți un vector de String. Umpleți acest vector în primă fază cu literal-ul ''"​abc"''​ și măsurați memoria utilizată. Apoi, umpleți vectorul cu ''​new ​Strîng("​abc"​)''​ și măsurați memoria utilizată. Măsurarea memoriei utilizate se poate face folosind următoarea metodă:+  - (**1p**) Testați diferența de memorie utilizată între a folosi String literal și String obținut prin constructor. Construiți un vector de String. Umpleți acest vector în primă fază cu literal-ul ''"​abc"''​ și măsurați memoria utilizată. Apoi, umpleți vectorul cu ''​new ​String("​abc"​)''​ și măsurați memoria utilizată. Măsurarea memoriei utilizate se poate face folosind următoarea metodă:
     * <code java> ​     * <code java> ​
 public void showUsedMemory() {  public void showUsedMemory() { 
Line 440: Line 435:
  
 == Resurse == == Resurse ==
 +
 +* {{:​laboratoare:​constructori-referinte:​lab2-sol.zip|Soluție}}
 * <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​PDF laborator</​a></​html>​ * <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​PDF laborator</​a></​html>​
-* **[[:​laboratoare:​constructori-referinte:​constructori-referinte-sol.zip | Soluție]]** 
- 
- 
- 
 == Referințe == == Referințe ==
  
laboratoare/constructori-referinte.txt · Last modified: 2020/01/14 14:00 by Adriana Draghici