Sunteți pe pagina 1din 10

M. Joldo, A.

Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

Variabile i expresii 1. Variabile


Variabilele sunt locaii din memorie n care se pstreaz valori. Variabilele sunt de mai multe feluri i
fiecare limbaj de programare abordeaz diferit caracteristicile acestora. Numele variabilei. Tipul de dat specific natura informaiei pe care o variabil o poate memora. Java are dou tipuri generale de date. o 8 tipuri de baz sau primitive (byte, short, int, long, float, double, char, boolean). o Un numr nelimitat de tipuri obiect (String, Color, JButton, ...). O variabil obiect Java pstreaz o referin (pointer) ctre obiect, i nu obiectul propriu-zis, care este ntotdeauna memorat n zona heap. Domeniul unei variabile stabilete cine poate s o vad. Domeniul unei variabile este determinat n mare msur de structura programului: d.e., bloc, metod, clas, pachet, subclas. Durata de via este intervalul de timp dintre momentul crerii i respectiv al distrugerii unei variabile. Urmtoarele convenii sunt eseniale pentru nelegerea funcionrii sistemului Java. Variabilele locale i parametrii se creeaz la momentul iniierii unei metode i sunt distruse la momentul n care metoda execut return. Variabilele instan sunt create de constructorul new i sunt distruse cnd nu mai exist nici o referin ctre ele. Variabilele clas (static) sunt create la momentul ncrcrii clasei i sunt distruse la terminarea programului.. Valori iniiale. Ce valoare primete o variabil atunci cnd este creat ? Exist mai multe posibiliti. o Nici o valoare iniial. Variabilele locale Java nu au valori iniiale. Totui compilatoarele Java fac o analiz simpl a fluxului de instruciuni pentru a se asigura de faptul c fiecrei variabile locale i se va atribui o valoare nainte de a fi utilizat. Mesajele de eroare privind variabilele neiniializate sunt de obicei justificate; uneori vei fi nevoii s atribuii o valoare iniial variabilei dei tii c acest lucru nu este neaprat necesar. o O valoare iniial specificat de utilizator. Java permite atribuirea de valori iniiale n enunul de declarare a unei variabile. o Variabilele instane i statice au valori iniiale implicite: zero pentru numere, null pentru obiecte, false pentru variabile de tip boolean. Obligativitatea declaraiilor. Java, ca i alte limbaje de programare, v pretinde s declarai variabilele s informai compilatorul despre tipul variabilei etc. Declaraiile sunt importante deoarece ajut programatorul s construiasc programe fiabile i eficiente. o Declaraiile permit compilatorului s gseasc locurile n care o variabil este utilizat eronat, d.e. parametri de tip eronat. Faptul c astfel de erori sunt gsite n timpul compilrii ajut mult la reducerea timpului de testare a programelor. Anomaliile (bugs) nedepistate de compilator sunt mult mai greu de localizat i exist riscul de a nu fi gsite dect dup ce programul a fost livrat clientului. o O declaraie este de asemenea locul ideal pentru a scrie un comentariu ce descrie variabila respectiv i modul n care aceasta este utilizat. o Deoarece declaraiile furnizeaz compilatorului mai multe informaii, acesta poate genera cod mai bun.

2.1.

Variabile locale/instan/clas

Limbajul Java prevede trei categorii de variabile: Variabile locale sunt declarate n interiorul unei metode, constructor sau bloc. La momentul introducerii unei metode, o zon asociat metodei se plaseaz n stiva de apeluri. Aceast zon conine cte o nregistrare pentru fiecare variabil local i fiecare parametru. Cnd este

U.T. Cluj-Napoca

Programare Orientat Obiect

M. Joldo, A. Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

apelat metoda, fiecare nregistrare parametru este iniializat cu valorile parametrului respectiv. La momentul terminrii metodei zona este eliminat din stiv i memoria devine disponibil pentru urmtoarea metod apelat. Parametrii sunt variabile locale eseniale care sunt iniializate cu valorile parametrilor actuali. Variabilele locale nu sunt vizibile n afara metodei. Variabile instan sunt declarate ntr-o clas, dar n afara unei metode. Ele mai sunt numite i variabile membru sau variabile cmp . Cnd un obiect este alocat n zona heap, se creeaz cte o nregistrare pentru fiecare valoare a variabilelor instan. Astfel o variabil instan este creat/distrus odat cu obiectul cruia i aparine. Variabila instan este vizibil n toate metodele i n toi constructorii care aparin clasei care o definesc. n general trebuie declarat privat, dar i se poate conferi i o vizibilitate sporit. Variabile clas/statice sunt declarate preciznd cuvntul cheie static n interiorul unei clase, dar n afara unei metode. Exist o singur copie per clas, indiferent cte obiecte au fost create din ea. Ele sunt memorate n zona de memorie static. n majoritatea cazurilor, variabilele statice se introduc n declaraii final i se utilizeaz pe post de constante publice sau private. Caracteristica Variabile locale Variabile instan Variabile clas Unde se declar metod, constructor, ntr-o clas, dar n ntr-o clas, dar n sau bloc. afara unei metode. De afara unei metode. Trebuie declarate obicei private. static. De obicei au i atributul final. Utilizare Variabilele locale Variabilele instan Variabilele clas sunt pstreaz valori utilizate pstreaz valori ce utilizate n general n calcule ntr-o metod. trebuie referite n mai pentru constante, mult de o metod. (d.e. variabile care nu i componente ce modific niciodat pstreaz valori de valorile lor iniiale. genul iruri de caractere, variabile pentru realizarea desenelor, etc.), sau care sunt pri eseniale ale strii unui obiect ce trebuie s existe ntre invocarea a dou metode diferite. Durata de via Sunt create la Sunt create la momentul Sunt create la pornirea introducerea metodei crerii unei instane prin programului. sau a constructorului. Sunt distruse la new. Sunt distruse la ieire. terminarea programului. Sunt distruse cnd nu mai exist nici o referire la obiectul care le conine (ele sunt preluate de colectorul de reziduuri garbage collector ). Domeniu/Vizibilitate Variabilele locale Variabilele instan La fel ca i variabilele (inclusiv parametrii (field) sunt vizibile de instan, dar deseori formali ) sunt vizibili ctre toate metodele sunt declarate public numai n metoda, unei clase. Numrul pentru a oferi constructorul sau blocul claselor pentru care mai utilizatorilor clasei unde au fost declarate. sunt vizibile este valorile constantelor. Modificatorii de acces determinat de atributul (private, public, ...) lor de acces. Alegerea implicit n declararea nu pot fi utilizai pentru lor ar trebui sa fie variabile locale. Toate private . Nici o alt variabilele locale sunt

U.T. Cluj-Napoca

Programare Orientat Obiect

M. Joldo, A. Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

efectiv private pentru blocul n care au fost declarate. Ele nu sunt vizibile din nici o alt parte a programului, cu excepia metodei/blocului unde au fost declarate. Un caz special l constituie o variabil local declarat n partea de iniializare a unei instruciuni for ; aceasta are drept domeniu domeniul instruciunii respective.

Declarare

Valori iniiale

Declaraia trebuie plasat ntr-o metod sau bloc oriunde nainte de utilizare . Niciuna. Trebuie s i se atribuie o valoare nainte de prima utilizare.

clas nu poate vedea variabilele instan private . Aceasta ar fi cea mai bun alegere. Pentru a pstra flexibilitatea reprezentrii interne, i pentru a ntri consisten datelor se recomand a defini metode pentru citirea respectiv iniializarea variabilei dac valorile trebuie aduse din afara clasei. Implicit (convenie numit i vizibilitatea pachetului) o variabil poate fi vzut din orice clas a aceluiai pachet. Cu toate acestea private este de preferat . public. Poate fi vzut din orice clas. In general este o idee greit. protected variabilele sunt vizibile numai din orice clas de descendeni. Este o alegere ieit din comun i probabil o alegere greit. Oriunde la nivelul clas (nainte sau dup utilizare). Zero pentru numere, false pentru variabile booleene, null pentru referine la un obiect. Valorile pot fi atribuite ntr-o declaraie sau ntrun constructor. Variabilele instan trebuie declarate private pentru a asigura ascunderea informaiei, astfel ele nu mai pot fi accesate din afara clasei. Totui exist situaii mai rar ntlnite n care ele trebuie accesate din afara clasei; n aceste cazuri variabilele vor fi calificate de un obiect

Oriunde la nivelul clas mpreun cu atributul static. La fel ca i variabilele instan, dar n plus li se pot atribui valori ntr-un bloc special de iniializare static.

Acces din afar

Imposibil. Numele variabilelor locale este cunoscut numai n interiorul metodei.

Variabilele clas sunt calificate de numele clasei (d.e., Color.BLUE). Ele pot fi calificate i de ctre un obiect dar este un stil amgitor (poate crea confuzie) .

U.T. Cluj-Napoca

Programare Orientat Obiect

M. Joldo, A. Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

Sintaxa numelor

Reguli standard

(d.e. myPoint.x). Reguli standard, dar deseori sunt prefixate pentru a face vizibil diferena fa de variabilele locale, d.e. my, m, sau m_ (pentru variabile membru) myLength, sau this ca i n numele this.length.

Variabilele (constantele) static public final se scriu toate cu majuscule, altfel ele se conformeaz conveniilor obinuite de numire. Pentru nume de clase se recomand prefixul "c_" (sau ceva similar).

2. Expresii
Expresiile constituie principalul mijloc pentru a crea valori. Expresiile sunt create prin combinarea literalilor (constantelor), a variabilelor, invocrilor de metode i utiliznd operatori. Pentru a obine ordinea de evaluare corect se vor folosi paranteze. 2.3.1. Tipuri. Fiecare variabil are asociat un tip. Sunt prevzute dou categorii de tipuri: Tipuri primitive : byte, short, char, int, long, float, double, boolean. Tipuri obiect : Tipurile string i tablou sunt tipuri predefinite, dar fiecare clas care este definit creeaz un nou tip de obiect. 2.3.2. Constante literale Ofer un mod de a scrie valori aparinnd diferitelor tipuri (3, 3.0, true, 'a', "abc"). 2.3.3. Variabile Fiecare variabil trebuie declarat ca i aparinnd unui tip. Variabilele se pot ncadra n trei categorii de baz diferite: Variabile locale declarate n metode . Variabile instan (deseori numite cmpuri) declarate n obiecte. Variabile clas (static) declarate n clase.

2.2.

Operatori

Operatorii sunt utilizai pentru a exprima diferite formule elementare de calcul sau prelucrare a informaiei i sunt folosii alturi de literali, variabile, apeluri de metode i alte expresii. Operatorii se pot clasifica n urmtoarele categorii. Operatori aritmetici(+, -, *, /, %, ++, --) Operatori relaionali (<, <=, ==, >=, >, !=) Operatori booleeni (&&, ||, !, &, !, ^, |, &) Operatori la nivel de bit (&, |, ^, ~, <<, >>, >>>) Operatorul de concatenare a String-urilor (+) Operatori speciali (instanceof, ?:) Operatori de atribuire (=, +=, -=, *=, ...)

2.3.

Ordinea de evaluare

In general, ordinea de evaluare a expresiilor este de la stnga la dreapta; excepie de la aceast regul o fac operatorii de atribuire. Ordinea de evaluare poate fi schimbat utiliznd paranteze. A se vedea tabelul de preceden al operatorilor.

U.T. Cluj-Napoca

Programare Orientat Obiect

M. Joldo, A. Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

2.3.4. Operatori relaionali Toi operatorii standard funcioneaz pentru valori de tip primitiv (int, double, char, ...). Operatorii == ( test de egalitate) i != ( test de inegalitate) pot fi utilizai pentru a compara referine la un obiect. A se vedea seciunea Compararea Obiectelor pentru a nelege cum funcioneaz comparaia valorilor obiect. 2.3.5. Operatori Rezultatul oricrei comparaii este o valoare de tip boolean (true sau false). operator Semnificaie < mai mic <= mai mic sau egal == Egalitate >= mai mare sau egal > mai mare != Inegalitate (diferit de) 2.3.6. Erori comune 0 < x < 100 Operatorii de comparare nu pot exprima inegaliti duble. Dei matematic formula este corect, sintaxa Java nu permite scrierea ei. Exprimarea corect n limbajul Java este scrierea a dou comparaii: 0<x && x<100 = n loc de == Utilizarea operatorului de atribuire n loc de test de egalitate va genera o eroare de compilare uor de corectat. == pentru valori reprezentate n virgul flotant Deoarece numerele n virgul mobil nu ofer totdeauna reprezentarea exact a valorilor va trebui s utilizai >= sau <= n loc de ==. Spre exemplu, deoarece numrul zecimal 0.1 nu poate fi reprezentat exact n binar, expresia (0.1 + 0.1 + 0.1) nu va fi egal cu 0.3! Recomandri pentru programatorii C/C++ Operatorii de comparare ai limbajului Java sunt la prima vedere identici cu cei din C/C++. Diferena const n faptul c tipul rezultatului operaiei de comparare este boolean. Astfel, eroarea frecvent n limbajul C: utilizarea operatorului = n loc de == este aproape complet eliminat. Limbajul Java nu permite suprancrcarea operatorului, aspect ce poate fi ignorat de unii programatori obinuii cu filozofia C++. 2.3.7. ==, .equals(), i compareTo() Testul de egalitate : o variant Comparaie Primitive Valori a == b, a != b egale a.equals(b) Nu se aplic pentru tipuri primitive, patru variante pentru obiecte Obiecte Referin spre acelai obiect Compar valorile, dac sunt definite pentru aceast clas, dac sunt definite pentru clasele respective, se comport ca i pentru clasele predefinite Java. Dac nu este definit pentru o clas (utilizator) se comport ca i operatorul ==. Compar valori. Clasa trebuie s aib implementat interfaa Comparable<T> . Toate clasele Java avnd relaia de ordine natural au implementat aceast interfa (String, Double, BigInteger, ...) Face excepie clasa BigDecimal care poate produce rezultate imprevizibile. Obiectele Comparable pot fi utilizate de metodele Collections sort() i de structurile de date sortate implicit (d.e. TreeSet, TreeMap). Compar valori. Este disponibil numai dac este implementat interfaa Comparator<T> care nu este specific pentru clasele

a.compareTo(b)

Nu se aplic

compareTo(a, b)

Nu se aplic

U.T. Cluj-Napoca

Programare Orientat Obiect

M. Joldo, A. Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

Java. De obicei se folosete pentru a defini un obiect de comparare care va fi transmis metodelor Collections sort() sau structurilor de date ordonate. Compararea referinelor la obiecte folosind operatorii == i != Cei doi operatori de comparare pentru referine la obiecte sunt testul de egalitate (==) i testul de neegalitate (!=). Aceti operatori compar dou valori pentru a vedea dac ele refer acelai obiect. Cu toate c este o operaiune foarte rapid nu ntotdeauna produce ceea ce ateptai. De obicei vrei s aflai dac obiectele au aceeai valoare, i nu dac dou obiecte constituie o referin spre acelai obiect. Spre exemplu, if (name == "Mickey Mouse") // Aproape sigur o eroare Aici, rezultatul este adevrat(true) dac name este o referin ctre acelai obiect spre care face referin i "Mickey Mouse". In schimb, rezultatul va fi probabil false dac String-ul din variabila name a fost citit din fiierul de intrare sau calculat (prin concatenare sau extragere subir), chiar dac name are ntr-adevr exact aceleai caractere memorate n locaia asociat. Mai multe clase (d.e., String) definesc metoda equals() pentru a compara valori ale obiectelor. Compararea valorilor obiectelor utiliznd metoda equals() Se va folosi metoda equals() pentru a compara valori ale obiectelor. Metoda equals() furnizeaz o valoare de tip boolean. Exemplul de mai sus poate fi corectat scriind:
if (name.equals("Mickey Mouse")) // Compara valori, nu referine.

Alte comparaii Interfaa Comparable<T> Metoda equals precum i operatorii == i != sunt prevzui pentru testul de egalitate/inegalitate, dar nu ofer o metod de a testa valori nrudite. Unele clase (d.e. String i alte clase avnd relaia de ordine natural) au implementat interfaa Comparable<T> , care definete metoda compareTo . Va trebui s implementai Comparable<T> n clasele proprii dac avei nevoie s le utilizai n metodele Collections.sort() sau Arrays.sort(). Clasa String ofer i metode de comparaie care nu fac diferen ntre literele mari i mici. Erori frecvente n utilizarea operatorului == n loc de equals() pentru obiecte Dac dorii s comparai obiecte, trebuie s tii c operatorul == se folosete pentru a afla dac ele sunt acelai obiect, iar metoda equals() pentru a testa dac ele sunt obiecte diferite, dar au aceeai valoare. O eroare produs de aceast eventual confuzie este greu de depistat. 2.3.8. Operatori la nivel de bit Operatorii pe bii acioneaz asupra biilor valorilor ntregi (int i long). Dac un operand este mai scurt dect un ntreg, el este convertit la int nainte de a efectua operaiunea. Este necesar a ti cum se reprezint valorile ntregi n sistemul binar. Spre exemplu numrul zecimal 3 este reprezentat 11 n baza 2 iar reprezentarea binar a lui 5 este 101. Numerele ntregi negative sunt reprezentate utiliznd codul complementului fa de 2. Spre exemplu, -4 este reprezentat prin urmtoarea secven de cifre binare : 1111 1111 1111 1111 1111 1111 1111 1100. Operatorii la nivel de bit Operator a & b a | b a ^ b Nume i sau sau exclusiv Exemplu 3&5 3|5 3^5 Rezultat 1 7 6 Descriere 1 dac ambii bii au valoarea 1. 1 dac cel puin un bit are valoarea 1. 1 dac biii au valori diferite.

U.T. Cluj-Napoca

Programare Orientat Obiect

M. Joldo, A. Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

~a n << p

n >> p

complement Deplasare stnga fr semn Deplasare dreapta cu semn Deplasare dreapta fr semn

~3 3 <<2

-4 12

5 >> 2

n >>> p

-4 >>> 28

15

Inverseaz valoarea biilor. Deplaseaz biii lui n la stnga cu p poziii. Bii avnd valoarea zero sunt introdui n poziiile de rang nesemnificativ. Deplaseaz biii lui n la dreapta cu p poziii. Dac n este un numr cu semn reprezentat n forma complement fa de 2 , semnul este propagat n poziiile de rang semnificativ. Deplaseaz biii lui n la dreapta cu p poziii. Bii avnd valoarea zero se introduc n poziiile de rang semnificativ.

Utilizarea mpachetrii / despachetrii O utilizare frecvent a operatorilor la nivel de bit (deplasri combinate cu i pentru extragere de valori i deplasri combinate cu or pentru adugare valori) este aceea de a codifica mai multe valori ntr-o singur valoare de tip int. Procedeul se numete mpachetare, iar extragerea rezultatului despachetare. Cmpurile de bii ofer o alt metod de a face acelai lucru. Spre exemplu, s presupunem c avem de a face cu urmtoarele variabile ntregi : virsta (domeniu 0-127), sex (domeniu 0-1), inaltime (domeniu 0-255). Acestea pot fi mpachetate/despachetate ntr-o singur variabil short (ntreg reprezentat pe doi octei) dup cum urmeaz (sau n variante similare).
int virsta, sex, inaltime; short info_impachetata; . . . // mpachetare info_impachetata = (short)((((virsta << 1) | sex) << 7) | inaltime); . . . // despachetare inaltime = info_impachetata & 0xff; sex = (info_impachetata >>> 7) & 1; virsta = (info_impachetata >>> 8);

Utilizarea biilor fanion (flag) Anumite funcii de bibliotec interpreteaz valoarea unui ntreg ca i un ir de bii n care fiecare reprezint o valoare boolean (true/false) . Aceast presupunere are avantajul c economisete spaiu de memorare i n acelai timp poate s fie procesat rapid. Utilizarea deplasrilor: deplasarea la stnga nmulire cu 2; deplasarea la dreapta mprire cu 2 Pe unele calculatoare mai vechi operaiunile de deplasare sunt mai rapide dect nmulirile respectiv mpririle.
y = x << 3; y = (x << 2) + x; // Atribuie lui y valoarea 8*x // Atribuie lui y valoarea 5*x

Utilizarea operatorului sau-exclusiv pentru a comuta pe unu/zero Uneori se folosete operatorul sau-exclusiv pentru a comuta valorile 1 i 0.
x = x ^ 1; // sau n stil criptic x ^= 1;

Aceast instruciune plasat ntr-o bucl va schimba alternativ 0 cu 1. Utilizare ndoielnic : Schimbare de valori folosind operatorul sau-exclusiv Iat o secven de cod ciudat. Se folosete operatorul sau-exclusiv pentru a schimba ntre ele dou valori (x i y). Aceasta este traducerea n Java a unei secvene dintr-un limbaj de asamblare, unde nu se dispunea de spaiu de memorare pentru o variabil temporar. Nu se recomand s utilizai o schem de acest gen, ea trebuie privit ca i o curiozitate dintr-un muzeu al codurilor bizare.
x = x ^ y; y = x ^ y; x = x ^ y;

U.T. Cluj-Napoca

Programare Orientat Obiect

M. Joldo, A. Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

Nu confundai operatorii && i & Nu confundai operatorul &&, care produce operaia i logic, cu operatorul &, care este o transformare de bii, numit i pe bii. Acesta din urm este mai puin obinuit . Cu toate c operaia i pe bii poate fi folosit mpreun cu operanzi de tip boolean, acest lucru este extrem de rar i aproape ntotdeauna genereaz o eroare de programare.

2.4.

Rezumat pentru expresii

Parantezele () au trei utilizri: 1. Gruparea pentru a controla ordinea de evaluare sau pentru claritate. Exemplu: (a + b) * (c - d) 2. Dup o metod pentru a cuprinde parametrii. Exemplu: x = suma(a, b); 3. n jurul unui tip pentru a forma determina o conversie explicit (cast). Exemplu: i = (int)x; Ordinea de evaluare Operatorii cu precedena mai mare se aplic naintea celor cu preceden mai mic. La preceden egal, evaluarea este de la stnga la dreapta, cu excepia operatorilor unari, a atribuirii i operatorului condiional. Abrevieri folosite i, j valori ntregi (int, long, short, byte, char). m, n valori numerice (ntregi, double, sau float). b, c - boolean; x, y orice tip sau obiect. s, t - String; a - tablou; o - obiect; co - clas sau obiect Precedena Operatorilor . [] (argumente) post ++ -! ~ op.unari + - pre ++ -(tip) new * / % + << >> >>> < <= > >= instanceof == != & ^ | && || ?: = += -= etc. Operatori aritmetici

Memorai doar pentru operatorii unari, */% +-

comparaii
&& || = asignri Folosii () pentru toate celelalte

Rezultatul operaiilor aritmetice este double dac oricare dintre operanzi este double, altfel float dac oricare dintre operanzi este float, altfel long dac oricare dintre operanzi este long, altfel int. ++i Adun 1 la i nainte de a folosi valoarea n expresia curent i Ca mai sus, dar scade i++ Adun 1 la i dup ce s-a folosit valoarea n expresia curent i Ca mai sus, dar scade n+m Adunare. D.e. 7+5 este 12, 3 + 0.14 este 3.14 n-m Scdere n*m nmulire n/m mprire. D.e. 3.0 / 2 este 1.5 , 3 / 2 este 1 n%m Restul (Mod) dup mprirea lui n prin m. D.e. 7 % 3 este 1
Compararea valorilor primitive

U.T. Cluj-Napoca

Programare Orientat Obiect

M. Joldo, A. Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

Rezultatul tuturor comparaiilor este boolean (true sau false).


== != < <= > >= Operatori logici

Operanzii trebuie s fie booleeni. Rezultatul este boolean. b && c Condiionalul "i". Este true daca amndoi operanzii sunt true, altfel false. Evaluarea se face cu scurtcircuitare. D.e. (false && orice) este false. b || c Condiionalul "sau". Este true dac oricare dintre operanzi este true, altfel false. Evaluarea se face cu scurtcircuitare. D.e. (true || orice) este true. !b true dac b este false, false dac b este true. b&c "i" care evalueaz ntotdeauna ambii operanzi (nu scurtcircuit). b|c "Sau"care evalueaz ntotdeauna ambii operanzi (nu scurtcircuit). b^c "Sau-exclusiv" La fel ca b != c
Operatorul condiional b?x:y dac b este true, valoarea este x, altfel y. x i y trebuie s fie de acelai tip.

Operatori de asignare (atribuire) = Partea stng trebuie s fie o lvaloare (vezi C). += -= *= ... Toi operatorii binari, cu excepia lui && i || pot fi combinai cu o asignare.

D.e.
a += 1 este la fel ca a = a + 1 Operatori pe bii

Operatorii pe bii opereaz pe bii sau int. Rezultatul este int.


i&j i|j i^j ~i i << j i >> j i >>> j Conversii explicite Biilor li se aplic operatorul "i". 1 dac ambii bii sunt 1. 5 & 3 este 1. Biilor li se aplic "sau". 1 dac oricare dintre bii este 1. 5 | 3 este 7. Biilor li se aplic "sau-exclusiv". 1 dac biii sunt diferii. 5 ^ 3 este 6. Biii sunt complementai (0 -> 1, 1 -> 0) Biii din i sunt deplasai cu j bii spre stnga; sunt inserate zerouri prin partea dreapt. 5 << 2 este 20. Biii din i sunt deplasai cu j bii spre dreapta. Se insereaz bii ca bitul de semn prin stnga. 5 >> 2 este 1. Biii din i sunt deplasai cu j bii spre dreapta. Prin stnga se insereaz zerouri.

Folosii conversii explicite atunci cnd "ngustai gama unei valori. De la cea mai restrns la cea mai larg, ordonarea tipurilor primitive este: byte, short, char, int, long, float, double. Obiectele se pot atribui fr precizare explicit a tipului n sus pe ierarhia de motenire. Este nevoie de precizarea explicit a tipului pentru a merge n jos pe ierarhia de motenire (downcasting).
(t)x Face din x o variabil convertit la tipul t (nu modific pe x)

Operatori asupra obiectelor co.f Membru. Cmpul f sau metoda unui obiect sa a clasei co. x instanceof co true dac obiectul x este o instan a clasei co, sau o instana de clasa lui co. a[i] Acces la elementele unui tablou. s+t Concatenare de obiecte ir dac unul sau ambii operanzi sunt String. x == y True dac x i y se refer la acelai obiect, altfel fals (chiar dac valorile obiectelor sunt identice). x != y Ca mai sus pentru inegalitate. comparaii Compar valori de obiecte cu .equals() sau .compareTo() x=y Asignarea copiaz referina, nu obiectul.

U.T. Cluj-Napoca

Programare Orientat Obiect

M. Joldo, A. Ivanov

Indrumtor de lucrri de laborator

3. Variabile i expresii n Java

3. Mersul lucrrii
Scriei scurte programe n Java pentru: 3.1. 3.2. 3.3. A calcula ansele de ctig la loterie (6 din 49, 5 din 40). A simula extragerea numerelor (pentru generarea numerelor aleatoare folosii Math.random) Afiai n ordine cresctoare/descresctoare numerele extrase fr a face sortri sau a folosi tablouri. (Sugestie: folosii mpachetarea/despachetarea/extragerea de bii stocai ntr-un long) A codifica o fraz dat sub forma unui String, n care nu exist dect litere ale alfabetului Latin, spaii, virgule i puncte (sub 64 simboluri diferite) sub forma unui ntreg n precizie arbitrar. Codificarea este n ordinea codurilor Unicode (de exemplu, spaiu se codific prin 0, virgula prin 1, punctul prin 2, A mare prin 3 etc. vezi tabela din lucrarea anterioar). Afiai ntregul rezultat. Problema invers celei anterioare, folosind aceeai codificare. Orice numr natural par mai mare dect 2 se poate scrie ca sum a dou numere prime conjectura lui Goldbach. Scriei un program Java care s verifice aceast conjectura pentru numere situate ntre m i n. Parametrii vor fi argumente pentru o aplicaie de sine stttoare (argumente ale metodei main).

3.4.

3.5. 3.6.

U.T. Cluj-Napoca

Programare Orientat Obiect

10