User Tools

Site Tools


Problem constructing authldap
laboratoare:poo-java
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
laboratoare:poo-java [2018/08/19 15:18]
Laurentiu Stamate [Platforma Java]
laboratoare:poo-java [2018/10/01 01:14] (current)
Laurentiu Stamate [Tipuri primitive]
Line 75: Line 75:
  ​{{alte-resurse:​poo-java:​jvm.gif?​450| Flow-ul Java}} ​  ​{{alte-resurse:​poo-java:​jvm.gif?​450| Flow-ul Java}} ​
  
 +
 +==Tipuri primitive==
 +
 +Conform POO, **orice este un obiect**, însă din motive de performanță,​ Java suportă și tipurile de bază, care nu sunt clase. Aceste tipuri, numite **tipuri primitive**,​ corespund tipurilor de date cel mai des folosite și sunt prezentate mai jos, alături de spațiul ocupat și intervalul corespunzător de valori: ​
 +  ​
 +<​tabcaption | Tipuri primitive de date>
 +^  Tip primitiv ​ ^  Dimensiune ​ ^  Minim  ^  Maxim ^
 +|  ''​boolean'' ​ |  <​dimensiune variabilă> ​ |  —  |  —  |
 +|  ''​char'' ​ |  16  |  Unicode 0  |  Unicode 2<​sup>​16</​sup>​ - 1  |
 +|  ''​byte'' ​ |  8  |  -128  |  127  |
 +|  ''​short'' ​ |  16  |  -2<​sup>​15</​sup> ​ |  2<​sup>​15</​sup>​ - 1  |
 +|  ''​int'' ​ |  32  |  -2<​sup>​31</​sup> ​ |  2<​sup>​31</​sup>​ - 1  |
 +|  ''​long'' ​ |  64  |  -2<​sup>​63</​sup> ​ |  2<​sup>​63</​sup>​ - 1  |
 +|  ''​float'' ​ |  32  |  IEEE754 ​ |  IEEE754 ​ |
 +|  ''​double'' ​ |  64  |  IEEE754 ​ |  IEEE754 ​ |
 +</​tabcaption>​
 +
 +<note tip>​Tipurile de date primitive sunt asemănătoare celor din C. Variabilele (locale metodelor, a nu se confunda cu membri claselor) având tipuri primitive sunt alocate pe stivă (exact ca în C), în contrast cu instanțele claselor, care sunt alocate pe heap (remember stack vs. heap).</​note>​
 +
 +Se observă că: 
 +  * Java **nu** posedă tipuri ''​unsigned''​
 +  * tipul ''​char''​ este pe 16 biți și întrebuințează **Unicode**
 +  * tipul ''​boolean''​ nu are o dimensiune fixă
 +  * deși valorile posibile sunt doar 0 și 1, ocupând 1 bit, acestui bit i se adaugă un header dependent de mașină, după care acesta se completează cu biți până se ajunge la un număr multiplu de 8
 +  * pentru mai multe detalii: http://​docs.oracle.com/​javase/​tutorial/​java/​nutsandbolts/​datatypes.html
 +  * ''​void''​ **nu este tip in Java**, este doar un cuvânt cheie pentru cazurile în care dorim să indicăm că ceea ce se returnează este **nimic** <code java>
 +// cod C
 +int f(void) // specificăm explicit ca funcția nu are parametrii
 +void f(int) // definim o metodă care primeste un int și nu întoarce nimic
 +void *p // definim un pointer care poate conține orice tip
 +(void) p // cast către orice tip
 +
 +// cod Java
 +int f(void) // eroare de compilare, nu există parametrii de tip void
 +void f(int) // similar cu C
 +void *p // nu există conceptul de pointer in Java
 +(void) p // nu se poate face cast către void in Java
 +
 +</​code>​
 +  * din documentația 'Java Language specification 7': " Note that the Java programming language does not allow a "cast to void" - void is not a type "
 +
 +  ​
 +
 +Segmentele de memorie inițiale, precum și parametri de rulare sunt ilustrați mai jos.
 +{{ :​laboratoare:​java-basics:​jvm.jpg?​nolink |Java VM memory }}
 +
 +
 +
 +
 +Exemplu de declarație:​
 +
 +<code java>
 +int i, j;
 +boolean k;
 +</​code>​
 +  ​
 +  /* Mutat la resurse utile - in labul acesta mentionat ca exista tipul Referinta.*/​
 +  ​
 + ​Celelalte tipuri existente sunt **clase**. Instanțele claselor sunt tipuri **referință**. Acest lucru înseamnă că în spate, mașina virtuală Java lucrează cu pointeri la obiecte și noi folosim pointeri impliciți către zone de memorie alocate pentru obiectele utilizate. Acest lucru va avea consecințe mai târziu, când vom studia transferul parametrilor în Java. 
 +
 + Care este diferența dintre referințe (Java) și pointeri (C) ?
 +  * referințele pot ascunde un anumit număr de niveluri de indirectare deasupra pointerilor ​
 +  * din cauza faptului că nu putem accesa direct memoria, **nu putem face operații aritmetice cu referințele**,​ spre deosebire de pointeri
 +  * datorită libertății oferite de pointerii din C, putem face cast oricărui pointer pentru a da un alt sens zonei respective de memorie; acest lucru nu este posibil in cazul referințelor,​ se poate face cast doar la un alt tip al unui obiect care este deja încapsulat în obiectul curent (mai multe detalii când vom discuta despre moștenire)
 +  ​
 + Acum e de reținut faptul că în Java **nu** există pointeri expliciți. Această facilitate a fost considerată generatoare de erori și nu a fost implementată. Acest lucru nu limitează capacitățile platformei.  ​
 +  ​
 +  ​
 +  ​
  
 == Hello World == == Hello World ==
laboratoare/poo-java.1534681120.txt.gz · Last modified: 2018/08/19 15:18 by Laurentiu Stamate