Curs2_Java PDF - Note Java
Document Details
![FlashyMagic2142](https://quizgecko.com/images/avatars/avatar-4.webp)
Uploaded by FlashyMagic2142
2025
Tags
Summary
These notes provide a brief overview of fundamental Java programming concepts. It discusses various operators such as arithmetic, relational, unary, increment, decrement and shift operators, and their application in Java programming.
Full Transcript
Cuvinte importante: - expresii si operatori; prioritatea operatorilor si evaluarea expresiilor; conversii implicite si explicite; - instructiuni simple si blocuri de instructiuni; - structuri fundamentale de control: instructiunea if; instructiunea switc...
Cuvinte importante: - expresii si operatori; prioritatea operatorilor si evaluarea expresiilor; conversii implicite si explicite; - instructiuni simple si blocuri de instructiuni; - structuri fundamentale de control: instructiunea if; instructiunea switch, instructiunea while, instructiunea do-while, instructiunea for, instructiunile break si continue. 2/5/2025 1 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). 2/5/2025 2 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: 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 2/5/2025 3 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. 2/5/2025 4 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 >>) cu n pozitii. Numarul n de pozitii care se deplaseaza este specificat de cel de-al doilea operand. La deplasarea la stanga (), 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: 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 >>> 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 2/5/2025 17 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. 2/5/2025 18 De exemplu, programul urmator (operatori.java) ilustreaza cativa operatori Java inclusiv operatorul de concatenare pentru sirurile de caractere care se afiseaza la ecran. 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(); 2/5/2025 19 ++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 2/5/2025 20 Conversii Java acorda o atentie deosebita tipurilor. Fiecare expresie are un tip ce poate fi dedus din structura expresiei si din tipul operanzilor ce intra in alcatuirea sa: constante, variabile si apeluri de metode. Sunt insa permise, in anumite conditii bine precizate, conversii de la un tip la un alt tip. Conversiile pot aparea in urmatoarele situatii: - la atribuire, cand tipul unei expresii trebuie convertit la tipul variabilei ce primeste valoarea expresiei; - la apelul unei metode cand are loc transferul parametrilor actuali (reali) catre parametrii formali; - la conversii ce implica tipul String: ori ce tip poate fi convertit la tipul String; - la evaluarea unei expresii aritmetice: operanzii trebuie adusi la un tip comun, astfel incat expresia sa poata fi evaluata; - la o conversie explicita. 2/5/2025 21 Conversii implicite la evaluarea expresiilor In aceasta categorie intra conversiile efectuate automat, fara vreo precizare explicita in program. Pentru tipurile primitive de date, urmatoarele conversii sunt implicite: byte la short, int, long, float, double; short la int, long, float, double; int la long, float, double; char la int, long, float, double; long la float, double; float la double. Regula conversiilor implicite la evaluarea expresiilor este: operandul care are un domeniu de valori mai restrans este convertit la tipul operandului care are multimea valorilor mai ampla. 2/5/2025 22 Observatii: 1. Unele din aceste conversii pot conduce la o pierdere a preciziei. De exemplu, la conversia unui long intr-un float, caz in care se pierde o parte din cifrele semnificative pastrandu-se insa ordinul de marime. Precizia se pierde si in cazul conversiei long la double sau int la float pentru ca, desi dimensiunea zonei alocate pentru cele doua tipuri este aceeasi, numerele flotante au nevoie de o parte din aceasta zona pentru a reprezenta exponentul. In aceste situatii, se va produce o rotunjire a numerelor convertite. 2. Conversiile implicite legate de tipul String se aplica numai operanzilor cu tipuri primitive asupra carora se aplica operatorul de concatenare (+); in acest caz operanzii de un anumit tip diferit sunt convertiti la String. 3. Conversiile implicite la tipul referinta vor fi abordate intr-o lectie viitoare. Conversii implicite la operatia de atribuire Pentru tipurile primitive sunt admise urmatoarele conversii implicite la atribuire: - tipul char poate fi atribuit unei variabile de tip char, byte, short, int, long, float, double; - tipul byte poate fi atribuit unei variabile de tip char, byte, short, int, long, float, double; 2/5/2025 23 - tipul short poate fi atribuit unei variabile de tip char, short, int, long, float, double; - tipul int poate fi atribuit unei variabile de tip int, long, float, double; - tipul long poate fi atribuit unei variabile de tip long, float, double; - tipul float poate fi atribuit unei variabile de tip float, double; - tipul double poate fi atribuit unei variabile de tipul double. - tipul boolean nu poate fi atribuit la o variabila de alt tip. Observatii: 1. Valorile de tip primitiv nu pot fi atribuite variabilelor de referinta si, la fel, valorile de tip referinta nu pot fi memorate in variabile de tip primitiv. 2. Conversiile implicite intre tipurile referinta vor fi descrise intr-o lectie viitoare dupa prezentarea tipului referinta si a conceptului de clasa de obiecte. 2/5/2025 24 Conversii explicite Conversiile explicite sunt realizate de programator folosind operatorul de conversie explicita (sau cast-ul). Pentru tipurile primitive sunt admise, in plus fata de cele implicite, urmatoarele conversii explicite: byte la chart; char la byte, short; short la byte, char; int la byte, short, chart; long la byte, short, char, int; float la byte, short, char, int, long; double la byte, short, char, int, long, float. Conversiile explicite pot produce pierderi de precizie si, de asemenea, pot conduce la o modificare a ordinului de marime. Observatii: 1.Nu se pot face conversii explicite intre valorile de tip referinta si valorile de tip primitiv. 2. Valorile de tip boolean nu pot fi convertite la nici un alt tip. 3. Conversiile explicite intre tipurile referinta vor fi descrise intr-o lectie viitoare dupa prezentarea tipului referinta si a conceptului de clasa de obiecte. 2/5/2025 25 Instructiuni simple si blocuri de instructiuni O instructiune simpla este o singura instructiune, cum ar fi aceea prin care se atribuie o valoare unei variabile (instructiunea de atribuire) sau se apeleaza o metoda. Un bloc de instructiuni (numit si instructiune compusa) este o secventa de instructiuni simple si declaratii de variabile locale. Aceste instructiuni se executa in ordinea in care apar in interiorul blocului. Sintactic, blocurile de instructiuni sunt delimitate de acolade. Blocurile de instructiuni pot fi incluse (imbricate) in cadrul altor blocuri de instructiuni. Sintaxa unui bloc de instructiuni este: { ; ; ; … ; ; } unde: - - reprezinta instructiuni de declarare a unor variabile locale; o instructiune de declarare poate sa apara oriunde in interiorul unui bloc. 2/5/2025 26 Nota: Declaratiile de variabile locale care apar intr-un bloc sunt valabile numai in interiorul blocului, din momentul declararii lor pana la sfarsitul blocului. Instructiunea vida este o instructiune care nu executa nimic. Ea este formata numai din ; si se foloseste atunci cand este obligatoriu sa avem o instructiune, dar nu dorim sa executam nimic in acea instructiune. Structuri fundamentale de control A. Structuri alternative (de decizie) Instructiunea if Sintaxa instructiunii este: if () ; [else ]; unde: - - specifica expresia de evaluat; - , - specifica instructiunile (simple sau compuse) de executat. 2/5/2025 27 Semantica: se evalueaza si daca valoarea expresiei este true, se executa , altfel se executa. Nota: Instructiunea if poate sa faca parte dintr-o alta instructiune if sau else, adica instructiunile if pot fi incluse (imbricate) in alte instructiuni if. De exemplu, urmatorul program (denumit ArieTriunghi.java) testeaza daca trei numere pot forma laturile unui triunghi si daca da calculeaza aria triunghiului folosind formula lui Heron. import java.io.*; public class ArieTriunghi { public static void main(String[] args) throws IOException { double x, y, z, p, aria; String s; System.out.print ("Introduceti x= "); InputStreamReader isrx = new InputStreamReader(System.in); BufferedReader brx = new BufferedReader(isrx); s = brx.readLine(); x = Double.parseDouble(s); 2/5/2025 28 System.out.print ("Introduceti y= "); InputStreamReader isry = new InputStreamReader(System.in); BufferedReader bry = new BufferedReader(isry); s = bry.readLine(); y = Double.parseDouble(s); System.out.print ("Introduceti z= "); InputStreamReader isrz = new InputStreamReader(System.in); BufferedReader brz = new BufferedReader(isrz); s = brz.readLine(); z = Double.parseDouble(s); if (x