0% au considerat acest document util (0 voturi)
15 vizualizări

Curs02 Java

Documentul prezintă elementele de bază ale limbajului de programare Java, inclusiv codificarea entităților, identificatorii, separatorii, comentariile, structurile sintactice precum variabilele și tipurile de date, precum și constantele.

Încărcat de

Adrian Dabu
Drepturi de autor
© © All Rights Reserved
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
15 vizualizări

Curs02 Java

Documentul prezintă elementele de bază ale limbajului de programare Java, inclusiv codificarea entităților, identificatorii, separatorii, comentariile, structurile sintactice precum variabilele și tipurile de date, precum și constantele.

Încărcat de

Adrian Dabu
Drepturi de autor
© © All Rights Reserved
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 47

Programare Java

Curs 2

1 3/10/2014
Remmember
 Ce este Java?
 Care sunt tipurile de programe ce se ruleaza prin Java?
 De ce este un mediu de programare neutru?
 Ce este o clasa?
 Ce este o metoda?
 Ce este o biblioteca?
 Ce este un pachet?
 Cum NuFacemNimic.java?
Evolutia concursului – v2:
 Distribuirea softului/sitelui pentru antrenament – 10.03.2014:
 Lego Digital Designer 4.3
 BlockCard
 LDraw, LeoCAD, MLCad
Cuvinte importante:
- elemente de baza ale limbajului Java
- expresii si operatori
- prioritatea operatorilor si evaluarea expresiilor;

3 3/10/2014
Elemente de baza ale alfabetului
Java
 Codificarea entitatilor Java
 Identificatori
 Separatori
 Comentarii
Elemente de baza ale limbajului Java
Setul de caractere folosit de limbajul Java
Limbajul Java lucreaza in mod nativ folosind setul de caractere Unicode. Acesta este
un standard international care inlocuieste vechiul set de caractere ASCII -
http://unicode.coeurlumiere.com/ . Vechiul standard ASCII este insa un subset al
setului Unicode, ceea ce inseamna ca vom regasi caracterele ASCII cu exact aceleasi
coduri ca si mai inainte. Java foloseste setul Unicode in timpul executiei aplicatiilor
dar si in timpul compilarii acestora.
La citirea fisierului sursa, compilatorul Java foloseste secventele escape Unicode.
Secventele escape sunt secvente de caractere ASCII care incep cu caracterul
backslash (\). Pentru secventele escape Unicode, al doilea caracter din secventa
trebuie sa fie caracterul u sau U. Dupa caracterul u sau U urmeaza o combinatie de
patru cifre hexazecimale care formeaza impreuna doi octeti de memorie reprezentand
un caracter Unicode.
De exemplu, cifrele de la 0 la 9 sunt reprezentate prin secvente escape Unicode de la
\u0030 la \u0039 si sunt interpretate ca cifre ISO-LATIN-1.
Spatiile albe folosite in programele Java sunt: caracterele blanc (spatiu), tab, return
(retur de linie), line-feed (linie noua) si return + line-feed.

5 3/10/2014
Anumite caractere sunt reprezentate prin secvente escape speciale:
\n = \u000a - linie noua; \b = \u0008 - backspace;
\t = \u0009 - tab; \r = \u000d - return;
\\ = \u005c - backslash; \” = \u0022 - ghilimele.
\’ = \u0027 - apostrof.
Identificatori
Identificatorii, intalniti si sub denumirea de nume simbolice, au rolul de a denumi
elemente ale programului Java: constante, variabile, clase metode etc.
Din punct de vedere sintactic, un identificator este constituit dintr-o succesiune
nelimitata de litere si cifre Unicode, primul caracter fiind obligatoriu o litera
(inclusiv ‘_’).
Limbajul Java este “case-sensitive”, adica face diferenta intre literele mici si literele
mari. De aceea, identificatorii sunt diferiti in functie daca sunt scrisi cu litere mici si
mari.

6 3/10/2014
Cuvintele-cheie (keywords) sunt identificatori speciali, cu inteles predefinit, care pot
fi utilizati numai in constructii sintactice in care sunt specificati. De exemplu: if,
while etc. Toate cuvintele-cheie se scriu numai cu litere mici.
Separatori
Separatorii au rolul de a separa unitatile sintactice:
- Ca separatori “generali” se utilizeaza caracterele albe: spatiu (‘ ‘), TAB
(‘\t’), sfarsit de linie (‘\n’) si comentariile.
- Separatorii specifici sun folositi, de exemplu, pentru a separa unele
constructii sintactice: variabilele sunt separate prin caracterul virgula (‘,’). Alti
separatori specifici sunt ( ) { } [ ] .
- Delimitatorii sunt folositi, de exemplu, pentru:
- a delimita sfarsitul unei instructiuni sau al unei declaratii -
caracterul punct si virgula (‘;’);
- a delimita o constanta de tip caracter - caracterul apostrof (‘);
- a delimita constantele sir de caractere(ghilimelele).

7 3/10/2014
Comentarii
Comentariile sunt texte care vor fi ignorate de compilator, dar au rolul de a explicita
si de a face mai lizibil pentru programator anumite secvente de program.
In Java exista trei tipuri de comentarii:
- o succesiune de caractere incadrata intre /* si */ ; aceste comentarii pot fi
formate din mai multe linii;
- o succesiune de caractere pe mai multe linii care tin de documentatie,
incadrate intre /** si */; textul dintre cele doua secvente este automat mutat in
documentatia aplicatiei de catre generatorul automat de documentatie (javadoc);
- o succesiune de caractere care incepe cu // si se termina la sfarsitul unei
singure linii.

8 3/10/2014
Structuri sintactice Java
 Variabile
 Tipuri de date
 Constante
Variabile
Variabila este o zona temporara de stocare, rezidenta in memoria RAM, care are un
nume simbolic (identificator) si stocheaza un anumit tip de date. Ea poate fi
modificata pe parcursul executiei programului.
In ciuda denumirii, in Java exista variabile care isi pot modifica valoarea si variabile
care nu si-o pot modifica, numite variabile finale.
Pentru utilizarea unei variabile intr-un program Java trebuie ca aceasta sa fie
declarata. La declararea variabilei trebuie specificat numele simbolic al variabilei,
tipul acesteia si, eventual, o valoare initiala care se atribuie variabilei.

10 3/10/2014
Tipurile primitive de date definite in Java
Un tip de date defineste multimea de valori pe care variabila poate sa le stocheze,
modul de reprezentare a acestora in memorie, ca si setul de operatii pe care
programul poate sa le realizeze cu aceste date.
In limbajul Java a fost exact definita modalitatea de reprezentare a tipurilor
primitive de date in memorie. In acest fel, variabilele Java devin independente de
platforma hardware si software pe care lucreaza.
De asemenea, Java defineste o valoare implicita pentru fiecare tip de date, in cazul
in care variabila de un anumit tip nu a primit nici o valoare de la utilizator. Este o
practica buna insa aceea ca programele sa nu depinda niciodata de aceste initializari
implicite. Regula ar fi deci urmatoarea: nici o declaratie fara initializare.
Limbajul Java accepta urmatoarele tipuri de baza: byte, short, int, long, float,
double, char, boolean, void.

11 3/10/2014
Tabelul de mai jos prezinta o descrie generala a tipurilor primitive de date utilizate
de Java.

Tip Valori Reprezentare in memorie

byte [-128, 127] Intreg pe 1 byte

short [-32768, 32767] Intreg pe 2 bytes

int [2.147.483.648, 2.147.483.648] Intreg pe 4 bytes

long [-263, 263 -1] Intreg pe 8 bytes

float 6 cifre semnificative [10-46, 1038] Virgula mobila pe 4 bytes

double 15 cifre semnificative [10-324, 10308] Virgula mobila pe 8 bytes

char coduri Unicod Pe 2 byte

boolean false sau true Pe un bit

12 3/10/2014
Tipul boolean este folosit pentru memorarea unei valori de adevar sau fals. In Java
aceste doua valori le vom nota prin constantele (literali) true si respectiv false.
Orice variabila booleana nou creata primeste automat valoarea implicita false.
Tipul char este folosit pentru a reprezenta caractere de tip Unicode.
Orice variabila de tip caracter nou creata primeste automat ca valoare implicita
caracterul null al codului Unicode, “\u0000’.
Tipurile de date intregi sunt folosite pentru memorarea unor valori intregi cu
semn. Conventia folosita de Java pentru valorile intregi cu semn este reprezentarea
in complement fata de doi. Tipurile de date intregi sunt: byte, short, int, long.
Orice variabila de tip intreg (byte, short, int si long) nou creata primeste automat
valoarea implicita 0.
Tipurile de date reale sunt folosite pentru memorarea unor valori reale sub forma
de mantisa si caracteristica. Tipurile de date reale sunt: float si double.
Valoarea implicita pentru variabilele de tip float este 0.0f, iar pentru variabilele de
tip double este 0.0d.

13 3/10/2014
In Java sunt definite cateva valori reale speciale:
1. Valoarea NaN (Not a Number) se obtine atunci cand se efectueaza o operatie a
carei rezultat nu este definit, de exemplu 0.0 / 0.0.
2. Valori folosite pe post de infinit pozitiv si negativ. Aceste valori pot rezulta in
urma unor calcule.
Valorile descrise la pct. 1 si 2 sunt definite sub forma de constante si in ierarhia de
clase predefinite Java, si anume in clasa java.lang.Float si respectiv in clasa
java.lang.Double. Numele constantelor este: NaN, POSITIVE_INFINITY,
NEGATIVE_INFINITY.
Pentru tipurile intregi si intregi lungi, precum si pentru tipurile flotante exista
definite clase in ierarhia de clase predefinite Java si anume:
- java.lang.Integer - pentru tipul int;
- java.lang.Long - pentru tipul long;
- java.lang.Float - pentru tipul float;
- java.lang.Double - pentru tipul double.

14 3/10/2014
In fiecare dintre clase numerice prezentate sunt definite doua constante care
reprezinta valorile minime si maxime pentru tipurile respective. Aceste doua
constante se numesc in mod uniform MIN_VALUE si MAX_VALUE.
Tipul void
Tipul void este un tip special, pentru care multimea valorilor este vida. Acest tip se
utilizeaza cand este necesar sa se specifice absenta oricarei valori. De exemplu:
pentru tipul de data a metodelor care nu intorc nici un rezultat, cum a fost cazul
metodei main ().
Constante
O constanata este folosita pentru a exprima in program o valoare pe care o poate lua
tipurile primitive de date si tipul sir de caractere.
Constantele intregi pot fi reprezentate in baza 10, 16 sau 8. Constantele intregi pot
fi intregi normale sau lungi. Constantele lungi se recunosc prin faptul ca se termina
cu sufixul l sau L.
Pentru a reprezenta o constanta intreaga in baza 16 trebuie sa se adauge prefixul 0x
sau 0X in fata numarului.
Pentru a reprezenta o constanta intreaga in baza 8 trebuie sa se adauge prefixul 0
(cifra zero) in fata numarului.
15 3/10/2014
Constantele reale care se pot reprezenta in memoria calculatorului sunt numere
rationale din intervalele specificate la tipurile float si double. Constantele reale pot
fi specificate in notatia obisnuita sau in format stiintific.
Sufixul care indica tipul float poate fi f sau F iar sufixul care indica tipul double
poate fi d sau D. Daca nu este specificat nici un sufix, valoarea implicita este de tip
double.
Constantele de tip caracter sunt utilizate pentru a reprezenta caracterele Unicode.
Reprezentarea se face fie folosind o litera sau o cifra, fie o secventa escape.
Caracterele care au reprezentare grafica pot fi scrise intre apostroafe. Pentru cele
care nu au reprezentare grafica, se folosesc secventele escape sau secventele
escape predefinite prezentate deja. Intern, Java interpreteaza constantele de tip
caracter ca pe un numar (codul Unicode al caracterului respectiv). Ulterior,
functiile de scriere vor transforma acest numar in caracterul corespunzator.

16 3/10/2014
Constantele de tip sir de caractere sunt cuprinse intre ghilimele. Caracterele care
formeaza sirul de caractere pot fi caractere grafice sau secvente escape ca cele
prezentate la constantele de tip caracter. Daca se doreste introducerea de caractere
terminatoare de linie intr-un sir de caractere, atunci se foloseste secventa escape \n in
sirul de caractere respectiv.
Observatie: Un sir de caractere este, de fapt, o instanta a clasei de obiecte String
declarata standard in pachetul java.lang. Vom reveni asupra sirurilor de caractere
intr-o lectie separata.

17 3/10/2014
Sintaxa folosita pentru declararea de variabile este:
<tip> <nume_v1> [= <expresie>] [, <nume_v2> [= <expresie2>] … ];
unde:
- <tip> - specifica tipul de data al variabilelor;
- <nume_v1>, <nume_v2>, … - specifica numele simbolic al variabilelor care se
declara (adica, identificatorii);
- <expresie1>, <expresie2>, … - specifica o expresie de initializare; expresia trebuie
sa fie evaluabila in momentul declararii; sunt optionale si sunt folosite pentru a
atribui unor variabile anumite valori initiale.
Nota: Se pot declara simultan mai multe variabile de acelasi tip, separand numele
lor prin virgula.
O variabila trebuie sa fie declarata imediat inainte de a fi folosita. Locul unde este
declarata o variabila determina domeniul de vizibilitate si semnificatia ei.
Limbjul Java permite si definirea de constante. Modul cum se face definirea
constantelor va fi prezentata intr-o lectie separata destinata descrieri atributelor
statice.

18 3/10/2014
Operatii primitive IO java
 Afisare
 Citire
Exemple de declaratii de variabile ce pot fi folosite intr-un program:
int a, b=7, c=8;
char g;
float x=b*5.6, y;
Citirea datelor de la tastatura si afisarea datelor pe ecran
In limbajul Java nu exista instructiuni specializate pentru citirea/scrierea datelor.
Aceste operatii se realizeaza prin intermediul unor metode existente in pachetele
API ale limbajului. Intrarea si iesirea in Java se realizeaza cu ajutorul claselor de
obiecte din pachetul predefinit java.io. Orice program care foloseste rutinele de
intrare/iesire trebuie sa cuprinda instructiunea:
import java.io.*
Conceptul fundamental in operatiile de intrare/iesire in limbajul Java este fluxul de
intrare/iesire (stream).
Daca stream-ul este de intrare, succesiunea de biti “curge” dinspre exterior (in acest
caz, de la tastatura) catre memoria calculatorului.
Daca stream-ul este de iesire, secventa de biti “curge” dinspre memoria
calculatorului catre exterior (in acest caz, catre ecran).
20 3/10/2014
Java ofera trei fluxuri predefinite pentru operatii I/O standard:
- System.in pentru intrarea standard de la tastatura;
- System.out pentru iesirea standard la ecranul calculatorului;
- System.err pentru fluxul de erori.
Pentru afisarea datelor la ecranul calculatorului se folosesc metodele print si
println. Spre deosebire de C/C++ care dispun de un numar foarte mare de optiuni
de formatare, afisarea in Java se face exclusiv prin concatenare de String-uri fara
nici o optiune de formatare.
Observatie: String-urile sunt obiecte Java care descriu sirurile de caractere si le vom
studia separat intr-o lectie viitoare. Sa retinem ca prin concatenarea a doua siruri se
obtine un nou sir de caractere care uneste cele doua siruri initiale. Operatorul de
concatenare a doua siruri de caractere folosit de Java este semnul + (plus).
Sintaxa folosita la apelul metodei print este:
System.out.print (<expresie>); unde:
- <expresie> - este numele unei variabile de un tip de data sau este o expresie care
foloseste operatorul de concatenare pentru siruri de caractere; daca nu toti operanzii
din expresie sunt siruri de caractere, ci alte tipuri primitive de date atunci Java face
o conversie temporara la tipul String.
21 3/10/2014
Efectul apelului metodei print este acela ca se realizeaza afisarea la ecran a
variabilei data ca parametru si nu se face salt la o linie noua.
Sintaxa folosita la apelul metodei println este:
System.out.println (<expresie>); unde:
- <expresie> - este numele unei variabile de un tip de data sau este o expresie care
foloseste operatorul de concatenare pentru siruri de caractere.
Efectul apelului metodei println este acela ca se realizeaza afisarea la ecran a
variabilei data ca parametru si se face salt la o linie noua.
Metoda println se poate apela si fara parametrii, adica in forma:
System.out.println( );
caz in care se face numai un salt la o linie noua fara sa se afiseze nimic.
Se poate folosi urmatoarea combinatie de apeluri care este echivalenta cu println( ):
System.out.print(<expresie>);
System.out.println();

22 3/10/2014
Pentru citirea datelor de la tastatura procedura este mai anevoioasa. Acest lucru se
datoreaza in primul rand faptului ca programele java nu sunt concepute pentru a citi
de la tastatura. In majoritatea cazurilor, programele Java isi preiau datele dintr-o
interfata grafica, din forme HTML sau din fisiere.
Citirea datelor de la tastatura se realizeaza cu metoda readLine. Insa pentru citire
trebuie sa construim un obiect BufferedReader dintr-un obiect InputStreamReader
care la randul sau este construit din System.in. Descrierea detaliata a acestor obiecte
o vom face intr-o lectie viitoare dupa intelegerea conceptelor de clase si obiecte.
Sintaxa folosita la apelul metodei readLine este:
<nume_obiect>.readLine(); unde:
- <nume_obiect> - reprezinta o variabila de tipul obiectului BufferedReader.
Efectul apelului metodei readLine este urmatorul: preia caracterele de la intrare
pana cand intalneste un terminator de linie sau sfarsit de fisier. Metoda returneaza
caracterele citite (din care extrage terminatorul de linie ) ca sir de caractere de tip
String. Daca primul caracter citit este terminatorul de linie, atunci metoda readLine
returneaza valoarea null.

23 3/10/2014
Urmatorul program (Afiseaza.java) ilustreaza modul de folosire al metodelor println
si readLine pentru afisarea si respectiv citirea unor siruri de caractere:

/**
* Afiseaza.java
*/
package afiseaza;
import java.io.*;
public class Afiseaza
{
public static void main(String[] args) throws IOException
{
System.out.println("Bun venit in universul Java");
System.out.print ("Introduceti un numar ");
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
int a = Integer.parseInt(s);
System.out.println(s);
}
}
24 3/10/2014
Nota: Metoda Integer.parseInt(s) aplicata sirului de caractere de la intrare realizeaza
conversia sirului de caractere s intr-un numar intreg de tip int. Pentru a converti un
sir de caractere la un numar de tip double se poate folosi metoda
Double.parseDouble(), iar pentru a converti un sir de caractere la un numar de tip
float se poate folosi metoda Float.parseFloat(). Asupra acestor metode vom reveni
in lectia despre siruri de caractere.
Observatie: Clauza throws utilizata in antetul metodei main este folosita pentru a
specifica toate exceptiile (erorile) de I/O care nu sunt tratate in cadrul metodei main
ci de catre alte metode din clasele java.io.*. Modurile de tratare a exceptiilor
(erorilor) vor fi descrise intr-o lectie viitoare.

25 3/10/2014
Nota:
1. Operatorul ‘%’ nu poate fi aplicat decat operanzilor intregi.
2. Operatorul ‘/’ poate fi aplicat atat operanzilor intregi, cat si operanzilor reali, dar
functioneaza diferit pentru operanzii intregi, fata de operanzii reali. Daca cei doi
operanzi sunt numere intregi, operandul ‘/’ are ca rezultat catul impartirii intregi
(fara parte fractionara). Daca cel putin unul dintre cei doi operanzi este un numar
real, operandul ‘/’ furnizeaza rezultatul impartirii reale (cu parte fractionara).
De exemplu:
1. Fie declaratiile de variabile:
int a=5, b=7
float x=3.5

Expresie Rezultat
b%2 1
a/2 2
x/2 1.75

26 3/10/2014
Metoda System.in.read() citeste urmatorul caracter din fluxul de intrare (care poate
contine mai multe caractere citite de la tastatura) si returneaza caracterul citit ca un
intreg (cuprins intre 0 si 65535) sau -1 daca s-a intalnit terminatorul de linie
(caracterul ‘\r’- carriage return).
Programul urmator (Afiseaza1.java) ilustreaza modul de folosire a acestei metode:
import java.io.*;
public class Afiseaza1
{
public static void main(String[] args) throws IOException
{ char b;
System.out.println("Bun venit in universul Java");
b = (char) System.in.read();
System.out.println(b);
}
}

27 3/10/2014
Operatii si operatori Java
Expresii si operatori
O expresie este compusa dintr-o succesiune de operanzi, legati prin operatori.
Un operand poate fi o constanta, o variabila, un apel de metoda, o expresie incadrata
intre paranteze rotunde.
Operatorii desemneaza operatiile care se executa asupra operanzilor si pot fi grupati
pe categorii, in functie de tipul operatiilor realizate.
Operatorii limbajului Java sunt unari (se aplica unui singur operand) sau sunt binari
(se aplica asupra a doi operanzi).
A. Operatorii aritmetici
Operatorii aritmetici sunt: ‘*’ - inmultirea; ‘/’ - impartirea; ‘%’ - restul impartirii
intregi; ‘+’ - adunarea; ‘-’ - scaderea.
De asemenea este folosit operatorul unar ‘-’ (minus) pentru schimbarea semnului,
precum si operatorul unar ‘+’ (plus) (introdus pentru simetrie).

29 3/10/2014
B. Operatorii de incrementare/decrementare
Operatorul de incrementare este ‘++’. Operatorul de decrementare este ‘--’. Acesti
operatori sunt unari si au ca efect marirea (respectiv micsorarea) valorii operandului
cu 1.
Limbajul Java permite doua forme pentru operatorii de incrementare / decrementare:
forma prefixata (inaintea operandului) si forma postfixata (dupa operand).
Instructiunile care urmeaza incrementeaza variabila total cu 1:
total++;
++total;
Instructiunile care urmeaza decrementeaza variabila total cu 1:
total--;
--total;
In cazul cand se foloseste operatorul de incrementare / decrementare in forma
prefixata (inaintea operandului), limbajul Java va incrementa / decrementa mai intai
valoarea variabilei si apoi va utiliza variabila intr-o alta expresie.
In cazul cand se foloseste operatorul de incrementare / decrementare in forma
postfixata (dupa operand), limbajul Java va utiliza mai intai valoarea variabilei intr-o
alta expresie si apoi va efectua operatia de incrementare / decrementare.
30 3/10/2014
De exemplu, daca valoarea curenta a lui x este 5, atunci:
- evaluarea expresiei 3 * ++x conduce la rezultatul 18;
- evaluarea expresiei 3 * x++ conduce la rezultatul 15,
dupa care valoarea lui x va fi in ambele cazuri 6.
Operatorii de incrementare / decrementare pot fi aplicati operanzilor intregi,
operanzilor in virgula mobila si operanzilor de tipul char.
C. Operatori relationali
Operatorii relationali sunt operatori binari si desemneaza relatia de ordine in care
se gasesc cei doi operanzi: <, >, <=, >=.
Rezultatul aplicarii unui operator relational este true daca cei doi operanzi sunt in
relatia indicata de operator, si false, altfel.
De exemplu, expresiile logice:
4 > 6 are ca rezultat valoarea false,
8 <= 3+13 are ca rezultat valoarea true.
Un alt operator relational este instanceof care testeaza daca un anumit obiect este
sau nu instanta a unei anumite clase de obiecte (adica, apartine unei clase de
31
obiecte). 3/10/2014
De exemplu:
Object o = new Object( );
String s = new String( );
o instanceof Object - are ca rezultat valoarea true,
s instanceof String - are ca rezultat valoarea true
o instanceof String - are ca rezultat valoarea false.
D. Operatori de egalitate
Operatorii de egalitate sunt folositi pentru testarea unei egalitati sau inegalitati intre
doua valori. Sunt operatori binari si arata relatia de egalitate (==) sau inegalitate
(!=).
Rezultatul aplicarii unui operator de egalitate este true, daca cei doi operanzi sunt in
relatia indicata de operator si false altfel.
De exemplu, expresiile logice:
5 == 2+3 are ca rezultat valoarea true,
5 != 2+3 are ca rezultat valoarea false.
32 3/10/2014
E. Operatori logici se aplica asupra unor operanzi de tip boolean.
Exista trei operatori logici globali:
- negatia logica (not) reprezentata cu !;
- conjunctie logica (si) reprezentata cu &&;
- disjunctie logica (sau) reprezentata cu | | .
Rezultatul aplicarii operatorilor logici este tot boolean. Iata toate posibilitatile de
combinare:
true && true == true ! true == false
true && false == false ! false = true
false && true == false
false && false == false
true | | true == true
true | | false == true
false | | true == true
false | | false == true
33 3/10/2014
Nota: O regula importanta este ca operatorii logici && si | | folosesc evaluarea
booleana partiala (scurcircuitata). Aceasta inseamna ca daca rezultatul poate fi
determinat evaluand prima expresie, a doua expresie nu mai este evaluata.
De exemplu, in expresia:
x != 0 && 1/x != 5
Daca x este 0, atunci prima jumatate are valoarea false. Aceasta inseamna ca
rezultatul conjunctiei va fi fals, deci a doua expresie nu mai este evaluata.
F. Operatori la nivel de biti
Operatorii logici pe biti se aplica numai operanzilor intregi (de tipul byte, short, int
si long) si au acelasi rezultat ca si operatiile logice studiate (negatie, conjunctie,
disjunctie si disjunctie exclusiva) dar bit cu bit. De fapt, operatorii se aplica
reprezentarii binare a numerelor implicate

34 3/10/2014
Operatorii logici pe biti sunt:

Operator Denumire Tip


~ Complementare (negatie) pe biti unar
& Conjunctia logica (si) pe biti binar
^ Disjunctie exclusiva (sau exclusiv) pe biti binar
| Disjunctie logica (sau) pe biti binar

Rezultatul aplicarii operatorilor de complementare pe biti, de disjunctie logica pe


biti si de conjunctie logica pe biti este acelasi cu cel prezentat la operatorii logici
globali, daca consideram ca 1 ar reprezenta adevarul si 0 falsul. Rezultatul
aplicarii operatorului de disjunctie exclusiva pe biti este:

^ 0 1
0 0 1
1 1 0

35 3/10/2014
Operatiile logice la nivel de biti constau in aplicarea operatiei respective perechilor
de biti de pe pozitii egale in cele doua numere (cu exceptia operatiei de negare care
este unara). In situatia in care numerele nu au reprezentare binara de aceeasi
lungime, reprezentarea mai scurta este completata cu zerouri nesemnificative
(inserate in fata reprezentarii) pana se obtin dimensiuni egale.
Iata cateva exemple de folosire:
3 | 4 == 7 5 ^ 7 == 2
3 0…011 5 0…101
4 0…100 7 0…111
--------- ---------
7 0…111 2 0…010

5 & 7 == 5 ~5 == -6
5 0…101 5 0…0101
7 0…111 ----------
--------- -6 1…1010
5 0…101

36 3/10/2014
Operatorii de deplasare pe biti au ca efect deplasarea reprezentarii interne binare a
primului operand cu semn spre stanga (<<) cu n pozitii, spre dreapta (>>) cu n pozitii
sau deplasarea primului operand fara semn spre dreapta (>>>) cu n pozitii. Numarul n
de pozitii care se deplaseaza este specificat de cel de-al doilea operand.
La deplasarea la stanga (<<), pozitiile ramase libere in dreapta se completeaza cu 0.
La deplasarea la dreapta (>>), in pozitiile ramase libere in stanga se copiaza in mod
repetat bitul de semn.
La deplasarea la dreapta fara semn (>>>), pozitiile ramase libere in stanga se
completeaza cu 0.
Observatie:
1. Expresia x << n are ca efect inmultirea operandului x cu 2n. Expresia x >> n are ca
efect impartirea intreaga a operandului x cu 2n. Aceasta afirmatie este valabila pentru
numere intregi pozitive.
De exemplu:
5 >> 1 = 2 adica reprezentarea binara 101 devine dupa deplasarea cu un bit la dreapta
010.
5 << 1 = 10 adica reprezentarea binara 101 devine dupa deplasarea cu un bit la stanga
1010.
37 3/10/2014
H. Operatori de atribuire
Operatorii de atribuire sunt operatori binari care permit modificarea valorii unei
variabile.
Exista un operator de atribuire simplu (=) si 10 operatori de atribuire compusi cu
ajutorul operatorului ‘=‘ si al unui alt operator binar (aritmetic sau logic pe biti).
O varianta de sintaxa folosita este:
<nume_variabila> = <expresie>
Efectul aplicarii operatorului este: Se evalueaza <expresie>, apoi se atribuie
variabilei <nume_variabila> valoarea expresiei.
Nota: <expresie> poate fi la randul ei o expresie de atribuire, caz in care se
realizeaza o atribuire multipla. Atunci cand compilatorul intalneste o operatie de
atribuire multipla, el atribuie valorile de la dreapta la stanga.
<nume_variabila1> = <nume_variabila2> = … = <nume_variabilan> = <expresie>;
Se foloseste atunci cand se doreste sa se atribuie aceeasi valoare mai multor
variabile.

38 3/10/2014
De exemplu:
total = 0;
suma = 0;
a = 0;
folosind atribuirea multipla rezulta:
total = suma = a = 0
A doua varianta de sintaxa folosita este:
<nume_variabila> <operator_binar> = <expresie>;
unde:
- <operator_binar> - este din multimea {*, /, %, +, -, <<, >>, &, |, ^}.
Efectul aplicarii operatorilor de atribuire compusi este echivalent cu instructiunea:
<nume_variabila> = <nume_variabila> <operator_binar> <expresie>;

39 3/10/2014
De exemplu instructiunile:
total = total + 100;
jumatate = jumatate/2;
b = a = a*2;
sunt echivalente cu:
total+ =100;
jumatate/ =2;
b = a* = 2;
I. Operatorul de concatenare ( + ) de siruri de caractere este un operator binar folosit
pentru lipirea mai multor siruri de caractere
La concatenarea sirurilor de caractere, lungimea sirului rezultat este suma lungimii
sirurilor care intra in operatie. Carcterele din sirul rezultat sunt caracterele din
primul sir, urmate de cele dintr-al doilea sir in ordine. Daca cel de-al doilea operand
este un tip primitiv de data, acesta este convertit la un sir de caractere care sa
reprezinte valoarea operandului.
De exemplu:
“Acesta este” + “un sir” este echivalent cu “Acesta este un sir”
“Variabila a are valoarea ” + 3 este echivalent cu “Variabila are valoarea 3”
40 3/10/2014
J. Operatorul conversie de tip (sau conversie explicita de tip sau cast) este un
operator unar utilizat pentru a genera o variabila temporara de un nou tip.
Rezultatul unui cast este valoarea operandului convertita la noul tip de data
exprimat de cast.
O conversie explicita de tip (un cast) este de forma:
(<tip_nou>) <expresie>
unde:
- <tip_nou> - este noul tip de data al expresiei <expresie> altul decat cel declarat
initial sau implicit;
- <expresie> - este o variabila sau o expresie care se doreste a fi convertita la tipul
nou.
De exemplu, in secventa de instructiuni:
double f = 7.8;
int i = (int)f;
valoarea variabilei f este convertita la o valoare intreaga si anume 7, si noua valoare
este atribuita variabilei i.
41 3/10/2014
Observatie: Nu toate cast-urile sunt valide in Java. Vom reveni la descrirea
conversiilor explicite intr-un paragraf separat a acestei lectii.
K. Operatorul conditional ?:
Operatorul conditional examineaza o conditie si returneaza o valoare daca conditia
este adevarata si alta daca conditia este falsa.
Sintaxa operatorului conditional este:
(<conditie>) ? <rezultat_adevar> : <rezultat_fals>
unde:
- <conditie> - o expresie de evaluat ;
- <rezultat_adevar> -rezultatul returnat daca conditia are valoarea true;
- <rezultat_fals> - rezultatul returnat daca conditia are valoarea false.
De exemplu:
int i = 5;
int j = 4;
double f = (i < j) ? 100.5 : 100.4;
Instructiunea este similara unei instructiuni if-else.
42 3/10/2014
Prioritatea operatorilor si evaluarea expresiilor
Ordinea in care are loc efectuarea prelucrarilor determinate de operatori este data in
urmatorul tabel de prioritati (de la prioritate maxima la prioritate minima):

Categorie operator Exemple de operatori din Regula de


categorie asociativitate la
prioritate egala
Operatori de referinta . [] Stanga la dreapta
Unari ++ -- ! operatorii + si - unari Dreapta la stanga
cast-ul
Multiplicativi * / % Stanga la dreapta
Aditivi + - Stanga la dreapta
Deplasare pe biti << >> >>> Stanga la dreapta
Relationali < <= > >= instanceof Stanga la dreapta
Egalitate == != Stanga la dreapta
AND pe biti & Stanga la dreapta
XOR pe biti ^ Stanga la dreapta
OR pe biti | Stanga la dreapta

43 3/10/2014
Prioritati ale operatorilor - continuare
Categorie operator Exemple de operatori Regula de asociativitate la
prioritate egala
AND logic && Stanga la dreapta
OR logic || Stanga la dreapta
Conditional ?: Dreapta la stanga
Atribuire = si cei 10 operatori de Dreapta la stanga
atribuire compusi

Evaluarea expresiilor
Evaluarea unei expresii presupune calculul valorii expresiei, prin inlocuirea in
expresie a fiecarei variabile cu valoarea ei si a fiecarei functii cu valoarea returnata
de functia respectiva si efectuarea operatiilor specificate de operatori. In timpul
evaluarii expresiei se tine cont de existenta parantezelor, de asociativitate si de
prioritatea operatorilor:
1. In cadrul unei expresii fara paranteze, se efectueaza operatiile in ordinea
prioritatii operatorilor;
2. La prioritate egala, operatorii “vecini” actioneaza conform regulilor de
asociativitate prezentate in tabelul de mai sus.
3. Utilizarea parantezelor rotunde este mai puternica decat prioritatea operatorilor.
44 3/10/2014
De exemplu, programul urmator (operatori.java) ilustreaza cativa operatori Java
inclusiv operatorul de concatenare pentru sirurile de caractere care se afiseaza la
ecran.
/** Utilizarea operatorilor. */
public class operatori
{
public static void main(String[] args)
{
int a = 6, b = 7, c = 3;
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
System.out.println();
b += c;
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
System.out.println();
c++;
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
System.out.println();
45 3/10/2014
++a;
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
System.out.println();
b = ++a - c++;
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
System.out.println();
}
}
In urma executiei programului “operatori.class” pe ecran sunt afisate valorile:
a=6 a=7
b=7 b=10
c=3 c=4

a=6 a=8
b=10 b=4
c=3 c=5

a=6
b=10
c=4
46 3/10/2014
Tema nr. 2
1. Care este deosebirea dintre un applet Java şi o aplicaţie
Java?
2. Care este structura minimală a unei aplicaţii Java?
Comentaţi-o!
3. Care sunt principalele aplicaţii din cadrul mediului Java?
Descrieţi efectul fiecărei aplicaţii(javac,...).
4. Care sunt caracteristicile limbajului Java?
5. Ce este un protocol?
6. Descrieţi modul în care se obţine o aplicaţie Java.
7. Descrieţi modul prin care se obţine un applet Java.
8. Rulaţi şi verificaţi toate aplicatiile din cadrul acestui curs,
iar pentru data viitoare trimiteti prin e-mail fisierele class
obtinute si rulate cu succes. Absenţa fisierului şi a acestei
activitaţi de rulare duce la anularea îndeplinirii temei.
47 3/10/2014

S-ar putea să vă placă și