Sunteți pe pagina 1din 51

JAVA Curs nr.1 1. Ce este JAVA? 1.1.

Mediul de dezvoltare JAVA Java (care iniial s-a numit Oak) est e un limbaj de programare orientat obiect, dezvoltat de compania JavaSoft, care la rndul ei, aparine de concernul San MicroSystems !roiectul a "nceput "n anul #$$# sub numele %&reen' (i avea scopul de a creea obiecte casnice %inteligente' care s) comunice "ntre ele *+emplu, la ora - sun) ceasul de(tept)tor. peste un timp (programat) intr) "n funcie fierb)torul de cafea. dup) un alt timp va funciona pr)jitorul de pine, apoi cuptorul cu microunde etc (/in acest motiv primele reclame (i c)ri despre Java, aveau pe copert) nelipsita cea(c) aburind) de cafea ) 0n #$$1 a ap)rut versiunea 2eta a acestui proiect sub denumirea de Java, limbaj orientat obiect, cu toate facilit)ile limbajelor 3 (i "n special 344 5otu(i din Java lipsesc elementele %nepl)cute% precum pointerii, mo(tenirea multipl) (i supra"nc)rcarea operatorilor, f)cnd astfel limbajul mai u(or de utilizat 6tiliznd mediul de dezvoltare Java se pot crea aplicaii peternice, dac) avem "n vedere (i suportul multimedia inclus 7dev)rul este c) odat) cu dezvoltarea 8nternetului ca mediu pentru circulaia informaiilor, s-a dezvoltat (i circulaia programelor realizate pe platforme diferite (i odat) cu ele, a diver(ilor viru(i, viermi etc 7 ap)rut necesitatea creerii unei platforme comune pentru dezvoltarea aplicaiilor, care s) ruleze pe orice tip de platform) 9ard:are sau sub orice sistem de operare, mai noi Soluia de a rescrie aceste aplicaii (inclusiv bazele de date realizate dea lungul deceniilor) pentru noile platforme (i ; sau noile sisteme de operare, nu este economic) /eci s-a realizat limbajul cu cea mai important) facilitate, adic) portabilitatea, "n sensul c) o aplicaie Java poate lucra pe platforme diferite, att 9ard:are ct (i soft:are prin intermediul unei ma ini virtuale Java 3eea ce se difuzeaz) "n 8nternet este codul binar pentru ma(ina virtual) Java 5recerea pe o platform) nou) "nseamn) implementarea unui emulator pentru ma(ina virtual) 7cest emulator ine cont de particularit)ile limbajului emulat *+istena acestor platforme, integrate cu 8nternetul, duce la eficientizarea sistemelor informatice ale instituiilor (i companiilor !latforma Java are dou) componente, #) ma ina virtual! Java < JVM (Java =irtual Mac9ine) (i >) interfa"a de pro#ramare a aplica"iilor Java (Java A$%, adic) Java 7pplication !rogramming 8nterface) Java 7!8 este o colecie de componente soft:are, grupate "n biblioteci de clase (i de interfee 7ceste biblioteci sunt denumite pac9ete (packa#e)

!latforma Java izoleaz) programul de partea 9aed:are a sistemului de calcul !ac9etul de programe distribuit de compania Sun Microsystems pentru mediul de lucru Java se nume(te J&' (Java /evelopment ?it) (i conine, printre altele, - un compilator (javac). - un program care permite interpretarea programelor (java). - un program care permite vizualizarea aplicaiilor Java coninute construit) pentru vizualizare prin 8nternet (appletvie(er). un program de depanare (jdb) . un program pentru generarea fi(ierelor de tip 9 (9eader) pentru integrarea unor funcii scrise "n 3 (java)) . un program pentru generarea de documentaie (javadoc) . un desasamblor pentru fi(iere class (javap) . un convertor pentru generarea obiectelor surogat de tip stub (i sBeleton pentru implementarea CM8 (rmic). un utilitar pentru aflarea versiunii seriale (serial version) pentru clase (serialver) . un utilitar pentru generare de ar9ive de clase (i resurse (jar) . un utilitar pentru semnarea claselor(javake*) . un program care serve(te ca registru pentru obiectele aflate la distan). un convertor de fi(iere te+t nativ (fi(iere ascii) "n unicod . un utilitar pentru convertirea numelor "nvec9ite (din versiuni vec9i) . etc pentru c) nu am amintit toate componentele J/?-ului prezentat "ntr-o pagin) @5MA,

S) vedem care este rolul acestor pac9ete "n buna funcionare a J/?-ului 7stfel, Compilatorul (javac) genereaz) cod intermediar sub form) binar), acest cod reprezentnd cod obiect pentru o ma(in) virtual) orientat) stiv) +,ecu"ia programelor java se face prin interpretare cu interpretorul (java) 5e+tul programelor "n limbaj intermediar poate fi Dadus' din 8nternet, de c)tre un program de navigare "n EEE (bro:ser) Frice navigator (bro:ser) care D(tie' Java, conine un interpretor pentru ma(ina virtual) Java 0n cazul "n care este necesar) o vitez) mare de lucru, se recomand) utilizarea unui generator de cod pentru procesorul pe care se e+ecut) programele !rintre navigatoarele care (tiu s) De+ecute' (interpreteze) cod Java, putem aminti patru, mai cunoscute, Getscape, Gavigator, 8nternet *+plorer (i @otJava !rimele dou) (considerate Dclasice'), sunt interpretori pentru @5MA, care conine diferite protocoale orientate reea ca, @55!, H5!, SM5!, GG5!, &op9er, 5elnet etc sau module pentru grafic), care D(tiu' s) vizualizeze

>

imagini descrise de diferite formate ca, &8H, J!*& etc !entru fiecare protocol tratarea informaiilor se face diferit !entru programele de navigare Dclasice' orice format sau protocol nou, presupune e+tinderea navigatoarelor e+istente cu module noi @otJava este un program de navigare orientat Java *l este scris "n Java (i (tie s) e+ecute formatul ma(inii virtuale Java !entru fiecare protocol de transmitere de informaie sau format de reprezentare a imaginilor e+ist) o component) scris) "n Java 6n tip nou de protocol de transmitere de informaie sau de format de reprezentare a imaginilor, "nseamn) scrierea unei noi componente "n Java 3nd @otJava "ntlne(te un nou protocol pentru transmis informaii sau un nou format de reprezentare pentru transmis imagini pe care nu le "nelege va solicita de la server sursa pentru fi(ierul respectiv (i adresa programului Java care "nelege protocolul sau formatul respectiv 0n acest fel programarea unor noi protocoale se face "n mod dinamic, pe m)sur) ce ele sunt cerute 0n plus pac9etul J/? ofer) o serie de biblioteci (pacBages) standard, I java.lan# - colecia claselor de baz) 3onine r)d)cina I java.applet < clasele suport pentru scrierea apleturilor, I java.io - colecia de clase pentru intr)ri ; ie(iri generice (i pentru acces la fi(iere, I java.net - colecia de clase pentru acces la reea. conine support pentru diferite protocoale, socluri, 6Cl, I I I I java.util < un num)r mare de clase utilitare (structuri de date evoluate, clase pentru manipularea ar9ivelor J8! (i compresie ), java.mat) < conine funcii matematice (i dou) rutine care implementeaz) numere mari, java.te,t < colecie de clase cu suport pentru formatare in"nd cont de aspecte privind internaionalizarea, java.a(t < o bibliotec) care ofer) suport pentru grafic) (7E5 - 7bstract Eindo:ing 5oolBit) Cealizeaz) o interfa) abstract) care se implementeaz) u(or pe diferite sisteme de ferestre *ste bazat) pe evenimente (i ofer) suport pentru manipulare de culori, fonturi, controale etc I I java.rmi < o bibliotec) care ofer) suport pentru apeluri ale metodelor unor obiecte aflate la distan) (conform modelului C!3), java.securit* < o bibliotec) ce ofer) acces la mecanisme de securitate (criptare, autentificare), I java.s.l < o bibliotec) ce ofer) suport pentru acces la baze de date prin ierar9iei de clase (object), definiiile pentru toate tipurile de baz), e+cepii, fire de e+ecuie,

interog)ri SLA, I java.beans < o bibliotec) care ofer) suport pentru scrierea de componente (Jaba2eans) reutilizabile "n aplicaii 0n plus, fiecare firm) care produce astfel de pac9ete de programe, le adapteaz) (i le "nbun)t)e(te continuu "n funcie de cerinele clienilor (i nevoile pieei 0n acela( timp, fiecare versiune nou) este compatibil) cu versiunea precedent) *+ist) mai multe tipuri de %programe' care se pot scrie "n Java, aplicaii, appleturi, componente reutilizabile (beans), al c)ror comportament poate fi adaptat din e+terior (f)r) acces la cod), servlet-uri, aglets Mai pot fi menionate ca programe Java, manipulatorii (9andlers) pentru formatele de reprezentare a informaiilor (te+te, imagini, sunete) (i manipulatorii pentru protocoale de transfer al informaiilor prin reea 3eea ce deosebe(te toate aceste tipuri de %programe' este, pe lng) destinaie, punctul de intrare, respectiv cnd (i cum sunt lansate "n e+ecuie 7plicaiile Java propriu-zise, sunt programe "n sens clasic 6tilizarea acestora poate di f)cut) (i "n conte+te care nu au leg)tur) cu 8nternetul *+ecuia lor este realizat) de un program pentru interpretarea aplicaiilor, numit java 7pplet-urile sunt programe care sunt activate din paginile EEE !entru ele codul binar este adus din 8nternet, dup) care se interpreteaz) 0nainte de a se face interpretarea programului, se verific) codul binar 3omponentele reutilizabile sunt programe pe baza c)rora, "ntr-un mediu de dezvoltare adecvat, se pot construi aplicaii noi, prin simpla indicare a relaiilor "ntre componente din biblioteca de componente !entru realizarea acestui tip de aplicaii nu este necesar accesul la codul componentelor utilizate (i nici nu este neap)rat necesar) scrierea uoor noi linii de cod, eventualul cod de "nl)nuire este generat automat /. 0recerea de la C1C22 la Java /e(i Java este realizat "n special dup) 344 e+ist) totu(i diferene "ntre ele !ractic, au fost eliminate elementele care favorizeaz) apariia unor erori !rintre aceste elemente putem enumera aritmetica cu pointeri, eliberarea e+plicit) a memoriei, mo(tenirea multipl) (i altele Mai apar (i diferene rezultate din soluia de implementare, gndit) s) permit) programarea pe 8nternet H)r) a intra "n am)nunte, aceste diferene sunt, /.1 $rin compilarea pro#ramelor Java nu rezult! cod obiect

/up) compilarea unui fi(ier surs) scris "n 344 rezult) un alt fi(ier, cu e+tensia obj, "ntr-un cod numit cod obiect, care depinde de platforma pe care s-a realizat compilarea F alt) noiune este cea de cod nativ, prin care se "nelege codul rezultat dup) compilare (i linBeditare 7cest cod se e+ecut) pe o platform) 9ard:are specific) 0n cazul programelor scrise "n Java, prin compilare, va rezulta un format, numit b*tecode, care nu este nici cod obiect (i nici cod surs) 7vantajul acestui format este acela c) nu este dependent de nici o platform), deci este un cod portabil *l este e+ecutat de un interpretor care 3l transleaz! 3n cod ma in! Se observ) c) nu mai are loc linBeditarea 5ot interpretorul este cel care apeleaz! bibliotecile, la cerere /./ 4n Java nu e,ist! mo tenire multipl! 0n !FF, "n cazul unor aplicaii, este necesar ca un obiect s) mo(teneasc) caracteristici de la mai multe obiecte diferite 0n acest caz avem mo(tenire multipl) 3u ct aplicaia este mai comple+), cu att apare mai des nevoia folosirii acestui tip de mo(tenire 0n Java mo(tenirea multipl) este "nlocuit) prin utilizarea unui concept nou, numit interfa"! /.5 Java nu are probleme le#ate de spa"iile de nume 0n 344, clasele trebuie s) respecte principiul unicit)ii numelor, c9iar dac) aparin unor module separate ale proiectului /eci nici o clas) din cadrul unui proiect nu poate avea acela(i nume cu o alt) clas), c9iar dac) acea clas) aparine altui modul dar din acela(i proiect Java evit) posibilitatea de a crea o astfel de eroare prin realizarea unui spaiu de nume pe mai multe niveluri de preceden), "ncepnd cu nivelul cel mai "nalt, care corespunde spaiului de nume al pac9etului (i terminnd cu cel mai sc)zut, care este spaiul de nume al blocului local 0n acest fel, fiecare nivel, "n spaiul lui de nume, va construi un nume unic pentru fiecare obiect /.6 4n Java nu e,ist! pointeri 3u toii (tim problemele care pot ap)rea la manipularea memoriei prin intermediul pointerilor /e fapt 0n Java e+ist) pointeri, dar nu "n sensul celor din 3;344 7stfel fiecare instaniere a unui obiect este oferit) prin intermediul unui pointer, dar numai la att se reduce funcionalitatea lor

/.7 4n Java nu e,ist! fi iere )eader separate 0n 344 fi(ierele 9eader sunt foarte utile (i ca urmare foarte utilizate 0n plus, fa) de utilizarea normal), unii programatori folosesc aceste fi(iere pentru a p)stra "n ele documentaia 7stfel utilizatorul "(i poate da seama dintr-o privire cum funcioneaz) clasa respectiv) 0n Java nu e+ist) delimitare "ntre declarare (i definire, corpul funciei fiind corp component al 8declara"iei8 clasei, nemaifiind o zon) a sursei care s) asigure o % documentare implicit) % !entru a compensa aceast) deficien), Java &eveloper 'it 9J&': conine dou) instrumente pentru a u(ura munca, javap (i javadoc Javap este un dezasamblor care poate fi folosit pentru tip)rirea semn)turilor claselor Javadoc este un generator de documentaie "n format )tml, generat) de comentariile coninute "n cadrul codului surs) Java /eveloper ?it (J&') este mediul de referin) "n programarea Java J/?-ul conine o serie de biblioteci de clase Java necesare scrierii unui program, dar (i mai multe utilitare necesare compil)rii, test)rii, e+ecuiei (i document)rii unei aplicaii Java F bibliotec) de clase este cunoscut) "n Java sub denumirea de pac9et (packa#e) J/?-ul conine cteva pac9ete fundamentale care conin clase f)r) de care nu se pot realiza aplicaii Java !ac9etele incluse "n J/? formeaz) 7!8-ul necesar dezvolt)rii aplicaiilor !rincipalele unelte utilizate "n Java sunt, javac < Java ;an#ua#e Compiler 7cesta este compilatorul Aava care transform) sursele cu e+tensia .Java, scrise "n limbajul lava, "n fi(iere cu e+tensia .class, reprezentnd cod e+ecutabil pe ma(ina virtual) java - Java %nterpreter 8nterpretorul Java e+ecut) programele Java !rin lansarea "n e+ecuie a acestui utilitar se porne(te ma(ina vitrual) !rin intermediul ei, se convertesc instruciunile J=M din bycode , "n instruciuni ale ma(inii reale < javadoc < acest program genereaz) documentaia programelor Java "n format surs), avnd e+tensia java 9tml /ocumentarea se face pe baza comentariilor specifice Java le include la nivelul fi(ierelor

/.= 4n Java nu e,ist! func"ii independente

Java este "n primul rnd un limbaj de programare orientat pe obiecte (i de aceea s-a considerat necesar s) se renune la funciile %stand-alone%, adic) autonome /eci toate aplicaiile sunt obiecte (i toate clasele Java sunt derivate dintr-o clas! primar!, numit) Object. /.> ?nele pro#rame Java nu au func"ia main9: 6nele programe Java, numite applet-uri, nu au nevoie de o funcie main() Goiunea este "ntru-ctva legat) de EEE, adic) Eorld-Eide-Eeb 5otu(i, fiecare clas) Java poate avea o netod) main9: (i toate aplicaiile Java au un ec9ivalent al funciei main(), prin intermediul c)reia parametrii se transmit aplicaiei 0n 344 forma general) pentru antetul funciei main( ) este urm)toarea, int main9int ar#c, c)ar @ar#vAB, c)ar @envAB: 0n Java, metoda main() are un singur argument de tip tablou de (iruri de caractere Gu mai este necesar nici un alt parametru care s) p)streze num)rul de argumrnte, acesta fiind p)strat "n variabila len#t) asociat) tabloului 7rgumentul dependent de sistemul de operare din 344 a fost eliminat, pentru a p)stra facilitatea de multiplatform) a limbajului 7rgumentele listei de comand) se preiau ca (iruri de caractere, urmnd a fi convertite la alte tipuri, ca metode definite de limbaj Spre deosebire de 344, Java nu mai transfer) ca prim argument, numele aplicaiei /.C Java de"ine metode de tratare a e,cep"iilor 3ondiiile de eroare, a c)ror apariie este puin probabil) "n condiiile utiliz)rii normale, se numesc e,cep"ii *+emplu, "n cazul e+tragerii r)d)cinii p)trate dintr-un num)r, acesta trebuie s) fie pozitiv /ac) dintr-o eroare, funcia care calculeaz) radicalul num)rului, prime(te un argument negativ, programul poate funciona prost (i poate duce c9iar la acces "n zone de memorie protejat) urmare sistemul se bloc9eaz) sau se pot crea bre(e de securitate Majoritatea versiunilor de 344 includ mecanisme de tratare a e+cepiilor Java 3ns! obli#! folosirea mecanismelor de tratare a e+cepiilor, atunci cnd este apelat) o metod) care ar putea genera e+cepii /.D Java are un mecanism automat de 3a

Ecolectare a #unoaielorF 4n 344, pentru managementul memoriei se folosesc destructorii, dar "n condiiile de lucru "n reea ((i "n general pe mai multe platforme diferite), acest mecanism poate duce la erori Otergerea unei zone de memorie care se dore(te a fi folosit) "n continuare, poate duce la blocarea programului /e asemenea, l)sarea unor zone de memorie neutilizate, dar active, poate duce la epuizarea spaiului de memorie necesar programului !entru a evita aceste probleme, Java are un mecanism propriu de gestiune a memoriei, prin care sunt recuperate zonele de memorie care nu mai sunt folosite 7cest mecanism este numit E#arba#e collectorF, adic) colectorul de #unoaie. 3u ajutorul lui se p)streaz) evidena zonelor de memorie folosite (i a celor care nu mai sunt folosite /eci alocarea < dezalocarea memoriei se face automat "n Java

Curs / 5. $rezentarea limbajului JAVA 3a (i "n 3;344, vom "ncepe prezentarea limbajului Java cu clasicul %Salut, prieteniP' (!rogramul K #), public class Mesaj Q public static void main9Gtrin#A B ar#s: Q System out println(% Salut, prieteniP'). R R !rogramul K # 3lasa Mesaj

Aten"ieH 4n Java este obli#atoriu ca numele clasei publice 9Mesaj, 3n cazul nostru: s! coincid! cu cel al fi ierului 3n care se afl! clasa, iar e,tensia acestui fi ier s! fie .java HH Clasa public! trebuie s! con"in! obli#atoriu i metoda 9func"ia: main9 :. &eci fi ierul nostru se va numi Mesaj.java. Mmetoda main9: este, la fel ca (i "n 344, punctul de intrare "n program Gumai c) "n Java metoda main9: trebuie s) fie membrul clasei care are acela(i nume cu al fi(ierului, "n caz contrar ea nu va fi e+ecutat) Metoda main9: este prima metod) apelat) de interpretor atunci cnd se lanseaz) "n e+ecuie un program Java Fbiectul G*stem din cadrul clasei numite Mesaj ofer) sistemul "n care este e+ecutat programul, cout reprezint) ie(irea standard iar println afi(eaz) (irul dat ca parametru 0n 3 ec9ivalentul acestui apel este printf iar "n 344 este apelul cout II 4n Java, un pro#ram este o colec"ie de clase. 9 2ine "neles, c) aceast) colecie poate fi constituit) dintr-o singur) clas), ca "n e+emplul nostru ) 0n cadrul acestei clase, avem o singur) metod), care va afi(a mesajul dorit 0n e+emplul nostru, aceast) metod) se nume(te main9: Frice aplica"ie Java trebuie s) conin) "ntr-o clas) o metod! main9: cu atributele public static void (i ca argument, un verctor de elemente de tip Gtrin#, public static void main9Gtrin# ar#sA B: Q R 5.1 Aspectele clasice ale limbajului Java F caracteristic) principal) a limbajului Java este aceea c) nici un element nu depinde de implementare Se consider) c) toate aspectele limbajului sunt definite "n specificaiile acestuia /eci, respectnd specificaiile, orice implementare este portabil! (i orice program scris "n Java, poate fi e+ecutat "n orice mediu Java 5.1.1 Alfabetul Java Alfabetul Java este ?nicode, care este un super set pentru setul AGC%% i care utilizeaz)

doi octe"i pentru reprezentarea fiec)rui caracter /eci se pot reprezenta 5/.>=C de caractere, spre

deosebire de codul AGC%%, care poate codifica doar /7= caractere 0n setul de caractere 6nicod pot fi reprezentate toate literele, din toat) lumea, deci (i diacriticele romne(ti 3aracterele care nu fac parte din setul 7S388, pot fi scrise utiliznd notaia Ju,,,, unde ++++ reprezint) valoarea caracterului respectiv, scris "n baza #3um rezult) num)rul ma+im de caractere care se pot reprezenta "n Java T Simplu, a) Mai "nti "n cod AGC%, se poate reprezenta un num)r de caractere care rezult) din urm)torul calcul, 3odul 7S388 al celui mai mare num)r reprezentabil pe S bii are urm)toarea form) general), J,ff K J,11111111 deci # octet, a c)rui valoare ma+im) va fi urm)toarea, >U# 4 >U> 4 >UK 4 >UM 4 >U1 4>U- 4 >UN 4>US V codul AGC%%. b: general), Juffff K Ju1111111111111111 calculat astfel, - Fctetul # are valoarea ma+im) >1-, deci octetul > va porni de la valoarea primului octet, continund cu valorile corespunz)toare urm)torilor S bii, dar "ntre >U$ < >U#1, Fct> V >U$ -W >U#X -W >U## -W >U#> -W >U #K -W >U#M -W -W #X>M -W >XMS -W MX$- -W S#$> -W #-KSM -W 5/>=C /eci 3n ?nicod se pot reprezenta ma,im 5/>=C caractere diferite, ceea ce este mai mult dect suficient, cel puin la ora actual) !ot fi codificate toate limbile p)m"ntului (i nu numai >U#1 VW 1#> deci > octei, din care sunt utilizai pentru codificarea "n 6nicod a diverselor caractere, doar #1 bii Gum)rul ma+im de caractere ce pot fi codificate "n 6nicod, va fi Codul ?nicod al unui caracter este reprezentat pe > octei (i are urm)toarea form) > 4 M 4 S 4 #- 4 K> 4 -M 4 #>S 4 >1-

Cezult) c) se pot codifica ma,im /7= de caractere diferite dac) se utilizeaz) "n

5.1./

Cuvintele rezervate din Java

Sunt date "n tabelul K #

#X

5abelul K # abstract boolean breaB byte case catc9 c9ar class continue default do double else e+tendts final finally float for if implements import instanceof int interface long native ne: null pacBage private protected public return s9ort static super s:itc9 sync9ronized t9is t9ro: t9ro:s transient try void volatile :9ile

5.1.5 %dentificatorii %dentificatorii sunt secven"e de litere i cifre ?nicode, de lun#ime nelimitat! . !rimul caracter al unui identificator trebuie s) fie o liter) 0n Java din setul de litere fac parte (i caracterele %Y' (i %Z' /olarul este folosit mai mult pentru cod generat 5.1.6. Comentariile sunt la fel ca "n 3;344 5.1.7. Constante 0n Java e+ist) urm)toarele tipuri de constante, I constante numerice "ntregi (i constante numerice reale, I constante booleene,

##

I constante caracter (i I constante de tip (ir de caractere a: Constantele de tip 3ntre# pot fi reprezentate "n baza #X, S, sau #- Ceprezentarea unei constante "n baza #X "ncepe cu una dintre cifrele [ # < $ \, reprezentarea unei constante "n baza S "ncepe cu cifra X, iar reprezentarea unei constante "n baza #- "ncepe cu X+ F constant) de tip "ntreg este considerat) de tip int dac) nu este urmat) de ; *+emple, a: Lumere 3ntre#i reprezentate pe 6 octe"i, X X#> #> este X "n baza #X . este "n baza S iar "n baza #X reprezint) nr ( S 4>) V #X. este "n baza #X (i reprezint) nr (#X 4 >) V #>. 9e+a), pentru c) f V X+#> este "n baza #- (i reprezint) nr (#- 4 >) V #S. X+ffffffff < "n baza #- (i reprezint) nr -# (S cifre de f "n ####, deci S]M V K> bii de #. deci bitul <1. XKNNNNNNNNNN < este <1, dar "n baza S (#X cifre de N "n baza b: Acelea i numere dar reprezentate pe C octe"i vor fi XA, X#>A, #>A, X+#>A reprezint) ("n ordine) urm)toarele valori "n baza #X, X, #X, #>, #S S). pozitive, de semn este # (i deci nr este negativ (i e#al cu

c: Constantele de tip real pot fi reprezentate ca valori de tip double 9C octe"i:, dac) sunt urmate de litera d sau & sau de tip float 96 octe"i:, dac) sunt urmate de litera f sau M /ac) nu se specific) e+plicit tipul, atunci se consider) c) valoarea este de tip double !entru notarea constantelor de tip real se poate utiliza notaia cu e+ponent *+emple, # #f # # #e#>f # e-$ 0n e+emplul dat avem patru numere reale !rimul (i al treilea sunt de tip float 7l doilea (i al patrulea sunt implicit de tip double d: Constantele booleene se reprezint) cu true (i false

#>

e: Constantele caracter se reprezint) ca un caracter "ntre g9ilimele simple sau ca o notaie de tip ^_u++++` *+emple, ^a` ^_t` ^__` ^_u#Ne>`

f: Constantele ir de caractere se reprezint) ca iruri de caractere 3ntre #)ilimele dubleN % ala bala portocala % VW acest (ir se poate tip)ri %% %_' % VW este (ir vid VW pe linia urm)toare tip)re(te 5.1.=. Operatori D

Fperatorii folosii "n Java sunt practic aceia(i din 3;344, din care lipsesc operatorii de lucru cu pointerii, adic), referina dereferenierea (i sizeof 0n V VV 4 4V W bV -V ] a (nr de elemente ale unui tablou) tabelul b WV ] ]V K> sunt trecui toi operatorii recunoscui "n Java

3auza, limbajul Java nu permite folosirea direct) a pointerilor

P c PV aa ; a ;V aV 5abelul K >

, dd 44 -d U e bb dV UV eV bbV Fperatorii recunoscui "n Java

WW WWV

WWW WWWV

0n marea lor majoritate, operatorii sunt la fel ca "n 3;344, dar totu(i au fost introdu(i civa operatori noi (i anume, a: b: OOO 2 pentru concatenarea (irurilor de caractere si OOOK care "nseamn) deplasarea la dreapta f)r) (i cu

e+tensia semnului 5.1.> 0ipuri i valori 0n Java s-au combinat caracteristicile limbajelor "n care verificarea tipurilor este static) cu cele "n care verificarea tipurilor este dinamic) Java este un limbaj Estron# t*pedF, deci autonom, ceea ce "nseamn) c) 3n Java fiecare variabil! i fiecare e,presie are stabilit tipul 3n

#K

momentul compil!rii. 7vantajul esenial al acestei posibilit)i este c) se pot detecta majoritatea erorilor legate de tipuri, "nc) din momentul compil)rii Spre deosebire de 344, Java p!streaz! informa"ii despre tipuri i 3n faza de e,ecu"ie, pentru a putea implementa un polimorfism corect. 0n Java e+ist) dou) categorii de tipuri, a: primitive, care pot fi lo#ice (booleene), numerice sau tipurilor primitive, limbajul Java permite declararea unor variabile care conin valori de tipul respectiv b: cu adres! 9referin"!:, care pot fi clase, interfe"e sau vectori. 0n general tipurile cu adres) sunt tipuri pentru care se pot /etaliem "n continuare cele dou) tipuri 5.1.>.1 0ipuri primitive 0n Java tipurile primitive sunt, a: aritmetice, a1: 3ntre#iN byte (# octet), s9ort (> octei), int (M octei), long (S octei) a/: realeN float (M octei), double (S octei) b: caracter, c9ar (> octei) c: lo#ic, boolean (true, false ) 5ipurile numerice reprezint) valori cu semn Ceamintim c) pentru oricare din tipurile de date, reprezentarea r!mPne aceia i, indiferent de tipul de ma in! pe care se e,ecut! pro#ramul scris 3n Java. Aimbajul Java ofer) pentru fiecare tip elementar (i cte o clas) ale c)rei instanieri reprezint) obiecte similare valorilor tipurilor elementare 7stfel e,ist! clasele Q*te, G)ort, %nte#er, ;on#, Mloat, &ouble, C)aracter i Qoolean. Metodele definite pentru aceste clase permit, 1: obinerea valorii curente reprezentate de obiectul respectiv, convertit) la diferite tipuri *+ de metode, intValue9:, lon#Value9:, floatValue9:, doubleValue9:. creea entit)i care au o adres) (referin)) "n memorie c)tre tipul respectiv (instanieri ale acelui tip) caractere 0n cazul

#M

/: o alt) metod) permite compararea valorilor de acela i tip, +.ual9: 5: obinerea reprezent!rii sub form! de iruri de caractereN toGtrin#9:, sau invers ValueOf9Gtrin#: etc Frice valoare de tip "ntreg sau real poate fi convertit) "n orice tip aritmetic Se pot face conversii 3ntre tipurile c)ar i 3ntre#i sau c)ar i real 5ipul boolean poate fi convertit doar tot "n boolean Opera"iile aritmetice de 3mp!r"ire sau de ob"inere a restului sau efectuate asupra operanzilor de tip 3ntre#, nu dau erori de dep! ire 0n cazul 3mp!r"irii cu zero a unui 3ntre#, apare e,cep"ia de tip Arit)metic +,ception. 4n cazul 3mp!r"irii cu zero a unui nr. real, nu apare nici o e,cep"ie.

Curs 5 0n continuare prezent)m un e+emplu (!rogramul K >) de dou) cazuri de "mp)rire cu zero (X;X (i nr ;X) 0n acest e+emplu se va folosi metoda isLaL9 : a clasei Mloat pentru a verifica dac) "mp)rirea provine dintr-o imp)rire X;X Se testeaz) de asemenea "mp)rirea unui "ntreg la X

#1

public class testNaN { public static void main(String[] args) { float x = 0, y, z = 0 y = x!z System"out"print(# valoarea lui y este if(%loat"isNaN(y)) System"out"println(# pentru 0!0#) System"out"println() x = & y = x!z System"out"print(# valoarea lui y este System"out"print(# pentru &!0# ) System"out"println() ' ' !rogramul K > Cezultatul rul)rii programului K > este urm)torul, Valoarea lui * este LaL pentru R1R Valoarea lui * este infinit* pentru 11R

# $ y)

# $ y)

Cezultatul rul)rii !rogramului K > 7supra tipurilor primitive se pot realiza operaii de conversie de tip Dcastin#', atribuiri sau implicit prin apeluri de metod) Spre e+emplu, dac! se apeleaz! o metod! care are un ar#ument de tip float, utilizPnd un ar#umrnt de tip int, se va face automat conversia acelui ar#ument de la tipul int la tippul float. 3onversiile pot s) se e+ecute prin l!r#ire, f!r! pierdere de informa"ie, dect cel mult la conversia de la tipul lon# la double, cmd se poate pierde ceva din precizie (vezi tabelul K K) sau prin 3n#ustare, cnd se poate pierde (i din informaie (i din precizie (vezi tabelul K M) 5abelul K K 3onversii f!r! pierderi de informaie byte s9ort int long float double byte + + + + + s9ort + + + + c9ar + + + + int + + + long + , float + 0n tabelul K K, am scos "n eviden) prin "ngro(are, o eventual) pierdere de precizie "n cazul

#-

conversiei de la long la double prezntate tipurile de conversii cu pierdere de informaie byte byte s9ort c9ar int long float double + + + + + + + + s9ort + + + + + c9ar + + + + int long

0n tabelul K M sunt

float

double

+ + +

+ +

5abelul K M 5ipuri de date "ntre care se face conversie cu pierdere de informaie 3u toate c) la conversiile dintre tipurile primitive pot ap)rea dep)(iri, ele nu sunt semnalate prin e+cepii 5.1.>./ 0ipul referin"! 0n limbajul Java obiectele se pot accesa numai prin intermediul unor variabile de tip referin"! F astfel de variabil) poate primi o valoare care poate fi interpretat) ca fiind o referin) (un pointer) la un obiect Gin#ura opera"ie care poate fi e,ecutat! cu o astfel de variabil! este cea de atribuire, prin care se poate stabili leg)tura c)tre un obiect (i eventual (terge leg)tura cu un alt obiect, atribuit mai "nainte /e e+emplu, presupunem instruciunile, ;; 0n Java, Hloare 3rin V ne: Hloare(). Hloare 3rin7lb V 3rin. *le declar) dou) variabile de tip referin) din Java Gotaia ne: Hloare( ) "nseamn) crearea unui obiect de tip Hloare 7mbele variabile indic) spre acela(i obiect *c9ivalentul "n 344 este, ;; 0n 344, Hloare 3rin V ](ne: Hloare()). Hloare 3rin7lb V 3rin.

#N

=ariabilele declarate de tip primitiv pot s)-(i modifice valorile numai prin e+ecutarea unor operaii asupra lor !entru tipul referin), deoarece este posibil s) e+iste mai multe referine pentru acela(i obiect, s-ar putea ca prin modificarea unui obiect referit de c)tre o variabil), efectul s) fie observat (i prin intermediul altor variabile 6n astfel de caz se observ) "n e+emplul care urmeaz), ;; Ceferirea variabilelor din Java class =aloare Q c9ar c. R class 5est Q public static void main (String[\ args) Q c9ar c# V faf . c9ar c> V c#. c> V fbf. System out print(% c# V ' 4 c#). System out println(% dar c> V ' 4 c>). =aloare v# V ne: =aloare( ). v# c V fcf. =aloare v> V v#. v> c V fdf. System out print(% v# c V ' 4 c). System out println(% dar v> c V ' 4 c). R R !rogramul K K Ceferirea variabilelor din Java Cezultatul rul)rii programului K K este dat mai jos c# V a dar c> V b v# c V d dar v> c V d.

#S

Cezultatul K K al rul)rii programului K K 5.6 +,presii Sinta+a e+presiilor din Java respect) sinta+a e+presiilor din 3, cu o singur) e+cepie 7ceasta se refer) la operatorul vir#ul! care se poate utiliza numai "n seciunea de iniializare (i "n scrierea instruciunii for9:. Frice e+presie are asociat un tip, care se deter- min) "n faza de compilare 7cest tip poate fi primitiv sau referin) 3a (i "n 3;344, e+ist) (i tipul void, care arat) c) o metod) nu "ntoarce nici un rezultat 0n Java evaluarea e,presiilor se face "ntotdeauna conform asociativit!"ii operatorilor /e e+emplu, fie e+presia, * V i 4 v[i\ 4 f( ) *a se evaluiaz) astfel, - "nti se calculeaz) rez V ( i 4 v[i\ ) - apoi rezYfinal V rez 4 f( ) 0n 3, spre e+emplu, nu este fi+at) nici o restricie care prive(te ordinea de evaluare la astfel de e+presii, ceea ce ar putea conduce la erori dac) , spre e+emplu, funcia f() ar sc9imba valoarea lui i 3a urmare, compilnd cu compilatoare diferite, am putea obine rezultate diferite, dac) i se modific) pe parcurs 5.7 %nstruc"iuni 0n mare, instruciunile utilizarate "n Java sunt la fel ca cele din 3;344, dar e+ist) totu(i unele mici deosebiri, care trebuiesc cunoscute S) le lu)m pe rnd, 1: 8nstruciunile if, ()ile (i for au aceia(i sinta+) ca "n 3;344 4n Java e,presia testat! 3n aceste instruc"iuni trebuie s! fie obli#atotiu de tip boolean, adic) s) aib) una din valorile true sau false 7mintim c) "n 3, orice e+presie testat) "n if() sau :9ile(), dac) are valoare diferit) de zero este considerat) true /: !entru instruciunea for() limbajul Java permite declararea unei variabile locale care s) controleze ciclul, for( int i V X. i b #X. i44 ) Q ;; variabila local) i

#$

R K M 8nstruciunea for9 : 0n Java domeniul de valabilitate al variabilei Di' este doar corpul instruciunii for ( ) 7mintim c) "n 344, domeniul de valabilitate al variabilei fif astfel declarate, include (i toate instruciunile care urmeaz) (i care fac parte din acela(i bloc cu instruciunea for() "n cauz) 5: !entru "ntreruperea e+ecuiei unui ciclu, "n 344,se poate utiliza o instruciune continue. /ac) rezultatul testului din if() este true, se iese din bucl) 0 n Java este la fel, numai c) instruciunea continue poate realiza trimiterea la o etic9et) 0n secvena de cod din fig K 1, dac) condiia din if() este adev)rat), se revine la etic9eta Dreluare' /ac) nu, se "ntrerupe e+ecuia ultimului ciclu (i se termin) e+ecuia primului (vezi codul K 1), care poate avea ca efect reluarea programului dintr-un anumit punct

reluare, for( for( if( R R 3odul K 1 6n alt mod de utilizare a instruciunii continue "n Java 0n secvena de cod din fig K 1, dac) condiia din if() este adev)rat), se revine la etic9eta Dreluare' 6: 0n ceea ce prive(te instruciunea s(itc), "n Java s-a ad)ugat posibilitatea utiliz)rii unei etic9ete la instruciunea break /eci, dup) instruciunea break etic)etaS )Q )Q ) continue reluare.

>X

continuarea programului se face cu instruciunea care poart) acea etic9et) 7mintim c) "n cazul utiliz)rii instruciunii break f)r) etic9et), aceasta are ca efect continuarea e+ecuiei programului care urmeaz) te+tual imediat dup) s(itc).

C?TG LT.6 6. Orientarea pe Obiecte 6.1 $rezentare #eneral! ?n obiect reprezint! 3ncapsularea unor date asupra c!rora se pot e,ecuta numai anumite opera"ii, numite metode. Gtarea unui obiect nu se vede din e,terior , cu alte cuvinte, este 3ncapsulat!

>#

Modificarea acestei st!ri poate fi realizat! numai cu ajutorul metodelor. Frice metod) are asociat) o semn!tur!, care este definit) prin, U num!rul i tipul parametrilor, pe care metoda "i prime(te "n ordinea "n care apar, I tipul rezultatului 3ntors. %nterfa"a prezentat! 3n e,terior de c!tre un obiect este alc!tuit! din mul"imea semn!turilor care corespund metodelor publice ale oriectului. Orice apel de metod! care corespunde cu o semn!tur! din interfa"a obiectului, poate fi e,ecutat. Se spune c) e,ecu"ia unei metode dintr-un obiect este r!spunsul obiectului la primirea unui mesaj de la alt obiect 7cest mesaj ar reprezenta apelul unei metode din codul e+ecutat de c)tre acel alt obiect Hiecare obiect are asociat un tip, care este definit prin interfa"a sa 6n obiect este accesibil (cunoscut) prin intermediul interfeei sale Modul "n care un obiect r)spunde la mesaje (implementarea metodelor) nu este specificat "n interfa) &escrierea intern! a unui obiect "nseamn), I descrierea datelor (cmpurilor), care reprezint) coninutul acestuia, I descrierea comport!rii (dat) de metodele obiectului) 7ceast) descriere se face prin declararea unei clase /eci o clas! reprezint! implementarea unei interfe"e &ac! asocierea unui mesaj trimis unui obiect cu metoda care trateaz! acel mesaj, se face 3n faza de e,ecu"ie, avem le#are dinamic!, altfel avem le#are static!. Avantajul le#!rii dinamice este c! permite substituirea unui obiect cu alt obiect, 3n timpul e,ecu"iei pro#ramului, cu condi"ia ca cele dou! obiecte s! aib! aceia i interfa"!. 3lasele sunt elementele de baz) ale unei aplicaii Java &efinirea unei clase 3nseamn! de fapt definirea modelului unui obiect. /efinind clasa, este definit) (i interfaa /eclararea unei clase este similar) cu declararea unui nou tip de date, adic) se descrie numai cum Darat)' (i ce D(tie' s) fac) un obiect de tipul (clasa) respectiv), f)r) s) se creeze un astfel de obiect /ac) pentru o clas) e+ist) mai multe metode cu acela(i nume dar care difer) prin semn)tur), se spune c) limbajul respectiv admite supra3nc!rcarea (overloading) metodelor *+istena acestui mecanism este util) pentru a defini comport)ri diferite la primirea aceluia(i mesaj (numele metodei) "n funcie de modul (conte+tul) de apelare /ou) metode cu acela(i nume trebuie s) difere prin lista de argumente (ca num)r (i ; sau tip), dar trebuie s) aib) acela(i tip de rezultat Spre deosebire de 3;344 , metodele nu pot avea un num)r variabil de argumente (i nu e+ist) un tip implicit pentru rezultatul "ntors de metode (cum este tipul void pentru 3;344) Mai specific)m dou) noiuni diferite, cu funcii diferite, care de multe ori se confund)

>>

"ntre ele, I o func"ie este polimorfic! (sau un operator este polimorf) dac) se poate e+ecuta cu acela(i efect asupra unor valori de tipuri diferite 3el mai cunoscut este operatorul de dereferen"iere VWV mo(tenit din 3;344 care are acela(i efect (i anume de a obine adresa obiectului asupra c)ruia se e+ecut), indiferent de tipul acestuia I o func"ie este supra3nc!rcat! (sau un operator este supra"nc)rcat) dac) e+ecut) operaii diferite "n conte+te diferite, adic) asupra unor argumente de tipuri diferite *+emplul cel mai clar este cel al operatorului f4f care, folosit "ntre dou) valori numerice, face adunarea lor, dar folosit "ntre dou) (iruri de caractere, le concateneaz) 6tiliznd definiia clasei, se pot instania obiecte a c)ror comportare este definit) de clas) !ractic, clasa este un tipar dup) care se creeaz) obiecte prin instaniere Aa creare, se face alocarea memoriei pentru datele (cmpurile) din clas) (i se mai fac unele iniializ)ri (i eventuale prelucr)ri, prev)zute "n constructorii clasei 3a (i "n 344, constructorul (constructorii) poart) numele clasei, nu returneaz) nimic (i este apelat implicit la crearea obiectului 6n constructor nu poate fi apelat "n alt conte+t, dect pentru instanierea unor obiecte F clas) poate fi e,tins! prin redefinirea (i ; sau ad)ugarea unor metode sau cmpuri noi Gu pot fi "nlocuite sau sc9imbate metodele sau cmpurile declarate cu final Colul acestei declaraii este legat) de securitate, astfel programatorul protejeaz) acele date sau metode considerate de el vitale, "n buna funcionare a aplicaiei /e asemeni utilizarea atributului final permite optimizarea codului generat, pentru c) e+ist) sigurana c) nu se mai sc9imb) nimic 3lasa care a fost e+tins) se nume(te supraclas! sau clas! de baz! iar clasa obinut) prin e+tindere se nume(te subclas! sau clas! derivat! 3ea de a doua variant) 9clas! de baz! (i clas! derivat!: este mai aproape de adev)r pentru c) noiunea de clas! de baz! implic) (i ideea de #eneralitate a acesteia, fa) de clasa derivat) 5otu(i "n Java se utilizeaz) mai mult termenii de (supraclas), subclas)) poate pentru a respecta sensul clasei Fbject 0n Java este permis) doar mo tenirea simpl!, fiecare clas) are o singur) supraclas), cu e+cepia clasei Object, considerat) originea ipotetic) a oric)rei ierar9ii. ;ipsa mo(tenirii multiple este eliminat) prin utilizarea noiunii de interfa"! F subclas) mo(tene(te toate cmpurile (i toate metodele care nu au fost redefinite F metod) din subclas) care "nlocuie(te o metod) din supraclas), are acela(i nume, acela(i tip de rezultat (i aceia(i list) de parametri 0n caz contrar, va fi considerat) ca o metod) nou) !entru c) limbajul Java a fost realizat plecnd "n special de la limbajul 344, majoritatea

>K

conceptelor legate de clase (i obiecte sunt similare 7stfel reg)sim noiunile, "ncapsulare, ierar9ie, metod), mo(tenire, legare dinamic) etc 3u e+cepia variabilelor definite ca tipuri primitive, orice altceva este considerat "n Java ca fiind obiect 0n Java clasele formeaz) o ierar9ie avnd ca r!d!cin! clasa Object 3lasa Object conine mai multe metode finale, scrise 3n Java, care sunt mo(tenite de orice clas) din Java 6nele metode ale clasei Fbject nu sunt scrise "n Java pentru c) ele sunt implementate direct pe ma(ina virtual) Java (JVM) pe care se e+ecut) 0n momentul "n care este instaniat un obiect al unei clase, care are astfel de mrtode, acea clas) se "ncarc) "n ma(ina virtual) respectiv) 0nc)rcarea este realizat) de un obiect instaniat dintr-o clas) special), numit) class loader. /efiniia clasei Object se afl) "n biblioteca java.lan# (i va fi "ntotdeauna "nc)rcat) de pe ma(ina pe care se face e+ecuia programului Java /e regul), nu se aduc clase din biblioteca java.lan# din 8nternet, din dou) motive, I clasele din aceast) bibliotec) conin metode native, adic) metode scrise special (JVM). pentru ma(ina virtual) pe care se e+ecut), deci este logic s) se g)seasc) pe acea ma(in) I din motive de securitate /ar prin construirea unui "nc)rc)tor de clase nou (class loader), programatorul poate evita aceast) restricie, pentru c) problemele ridicate de securitate vor fi "n continuare evitate, c)ci ma(ina virtual) D(tie' c) "nc)rcarea claselor respective s-a f)cut din reea 0n continuare, vom prezenta principalele metode ale clasei Fbject, 1: public final class #etClass9 : X . . . . Y Cezultatul este un obiect de tipul class care poate fi utilizat pentru a afla informaii despre clasa respectiv) /: public Gtrin# toGtrin#9: X . . . .Y Metoda este folosit) pentru a asocia obiectului o reprezentare ca (ir de caractere Hiecare clas) ar trebui s) redefineasc) aceast) metod), deoarece implementarea implicit) pentru Fbject furnizeaz) numai numele clasei c)reia "i aparine obiectul, "nsoit de un num)r care identific) unic obiectul printre obiectele de acelai tip 5: public int )as)Code9 : X . . . . Y Cezultatul este un num)r unic pe care fiecare obiect "l prime(te la instaniere Hiind unic, acest cod (num)rul returnat de metod)) poate fi folosit pentru introducerea obiectului "ntr-un tabel de dispersie 6: public boolean e.uals9Object obj: X . . . . Y Cezultatul este true dac) obiectul primit ca parametru este egal cu obiectul asupra c)ruia s-a aplicat metoda *ste vorba de egalitate de obiecte (i nu de referine 7ceast) metod) trebuie redefinit) conform noiunii de egalitate aplicat) la tipul respectiv de obiecte 3onvenia implicit) este c) dou)

>M

obiecte distincte nu sunt egale 3u alte cuvinte, "n mod implicit, e.uals9 : se comport) ca fVVf (identic egal) Cedefinirea metodei e.uals9 : este de obicei "nsoit) de redefinirea metodei )as)Code9 : pentru a genera numere egale pentru obiecte egale 7: protected Object clone9t)ro(s CloneLotGupported +,ceptions: X . . . . Y Se construie(te o copie a obiectului Cezultatul metodei este o referin) la acest obiect Metoda se poate utiliza numai dac) clasa definit) implementeaz) interfaa 3loneable =: public final void notif*9 : t)ro(s %lle#alMonitorGtate+,ception X . . . . Y 7nun) un fir de e+ecuie blocat (prin e+ecuia unei metode :ait( ) c) a ap)rut o modificare) :ait( ) c) a ap)rut o >: public final void notif*All9 : t)ro(s %lle#alMonitorGtate+,ception X . . . . Y 7nun) toate firele de e+ecuie blocate (prin e+ecuia unei metodei modificare) C: protected void finalize9 : t)ro(s 0)ro(able X . . . . Y Se e+ecut) "nainte ca un obiect s) fie distrus D: public final (ait9 lon# timeout : t)ro(s X....Y !roduce blocarea firului de e+ecuie din care se e+ecut) pn) un alt fir de e+ecuie e+ecut) metoda notif*9: sau notif*All9: sau a trecut intervalul de timp fi+at 1R : X....Y !roduce blocarea firului de e+ecuie din care se e+ecut) pn) cnd un alt fir de e+ecuie e+ecut) notify() sau notify7ll() sau a trecut intervalul de timp fi+at 11: public final void (ait9 : t)ro(s %nnterrupted+,ceptions X . . . .Y !roduce blocarea firului de e+ecuie din care se e+ecut) pn) cnd un alt fir de e+ecuie e+ecut) notify() sau notify7ll() 0n e+emplul M # este prezentat un mic program care declar) un obiect Hloare prin e+tinderea e+plicit) a clasei de baz) Fbject class Mloare e,tends Object X public Gtrin# numeS public int nr$etaleS Y public final (ait9 lon# timeout, int nanos: t)ro(s%nterrupted+,ception %nterrupted+,ception

>1

!rogram M # 3lasa Hloare e+tinde clasa Fbject (Hloare este derivat) din clasa de baz) - Fbject)

C?TG 7 /eclararea unei clase se poate face (i f)r) e+tinderea e+plicit) a clasei Fbject, pentru c) "n acest caz e+tinderea clasei Fbject se face implicit (!rogram M >) class Mloare X public Gtrin# numeS public int nr$etaleS Y !ogram M > 3lasa Fbject este e+tins) implicit de clasa Hloare /eci "n absena specific)rii clasei Fbject, (mai e+act "n absena clauzei e,tends Object), clasa Fbject se e+tinde implicit 0n ambele situaii clasa Hloare devine o subclas) a clasei Fbject 0n clasa Hloare au fost declarate dou) variabile (sau atribute), nume (i nr!etale Geavnd deocamdat) nici un mod de acces la aceste variabile, ele au fost declarate publice (public) 7cest modificator de acces, care precizeaz) domeniul de valabilitate al variabilelor, arat) c) domeniul lor este public /eci ele pot fi accesate din orice metod) sau clas) 7vnd definit) clasa Hloare, putem declara acum o variabil! care poate s! con"in! o referin"! la un obiect de tip Mloare, dar f!r! a instan"ia obiectulN Mloare floareS 11 o referin)

4n urma acestei declara"ii, variabila floare este ini"ializat! cu null. /ar pentru claritatea te+tului unui program se recomand) ini"ializarea e,plicit! a variabilei, floare K ne( Mloare9 :S 6ltima instruciune creeaz) un obiect care este o instaniere a clasei Hloare Ceferina (adresa) la

>-

obiectul nou creat este memorat) "n variabila floare. 7ceast) variabil) poate fi folosit) (i pentru accesarea cmpurilor (i metodelor clasei *+emple, floare.nume (i floare.nr$etale

reprezint) cele dou) cmpuri (attribute) ale clasei Hloare 8nstanierea obiectului se poate face (i o dat) cu declararea variabilei floare, Mloare floare K ne( Mloare9:S 6./ Constructori Aa crearea obiectului floare nu au fost necesare prelucr)ri speciale 6na din aceste prelucr)ri ar putea fi iniializarea cmpurilor cu alte valori dect cele implicite 0n Java, toate variabilele care nu sunt locale metodelor sunt iniializate la creare cu o valoare conform) tipului lor , I variabilele numerice cu zero, I variabilele logice cu false, I variabilele care reprezint) referine cu null /ac) la instanierea obiectului sunt necesare (i alte prelucr)ri, trebuie definit (i un constructor ?n constructor este o metod! special! care este apelat! la crearea obiectului. Metoda are acela(i nume ca (i clasa c)reia "i aparine (i nu "ntoarce nici un rezultat 6n constructor nu poate fi apelat din alte metode, cu e+cepia altor constructori 6n constructor care nu are argumente se nume(te constructor implicit. /ac) "ntr-o clas) nu se define(te nici un constructor, sistemul furnizeaz) un constructor al c!rui corp este vid. /ac) "ntr-o clas) se define(te cel puin un constructor, dar nu (i unul f)r) parametri, construc- torul implicit nu mai este furnizat automat 3onstructorii nu pot avea urm)torii modifi- catori de acces, abstract, s*nc)ronizet, static sau final Cevenim la clasa Hloare, pe care o dot)m cu doi constructori (!rogramul M K) class Mloare X

>N

public Gtrin# numeS public int nr$etaleS public Mloare9: X nume K 8Crin8S nr$etale K >S Y public Mloare9Gtrin# nume, int nr$etale: X t)is.nume K numeS t)is.nr$etale K nr$etaleS Y Y !rogram M K 3lasa Hloare cu doi constructori 0n programul M K au fost definii doi construc- tori, care difer) "ntre ei prin lista de argumente 3el cu lista de argumente vid) este constructorul umplicit 7pelul urm)tor apeleaz) constructorul implicit deci pentru floarea D3rin' , floare K ne( Mloare9:S 6rm)torul apel, floare K ne( Mloare98;aleaF, C: apeleaz) constructorul cu argumente Gelec"ia constructorilor se face 3n faza de compilare. !entru a referi cmpurile obiectului curent se poate utiliza obiectul #eneric t)is, care desemneaz) obiectul curent 7stfel pentru a ne referi la floarea curent), s) zicem o lalea, putem scrie, t)is98;aleaF, C: 3onstructorul implicit al clasei Hloare poate fi redefinit astfel , Mloare9: X t)is98Mar#aretaF, 1/:S Y /ac) dorim s) ne referim numai la numele obiectului curent, putem scrie, t)is.nume . Gotaia t)is 11 Mloare implicit!

>S

poate fi utilizat) (i "n alte conte+te, spre e+emplu pentru transmiterea obiectului curent ca argument al unei metode, pentru un alt obiect 0ntr-un constructor se poate referi ca prim) instruciune, un constructor al clasei curente sau un constructor al clasei pe care clasa curent) o e+tinde *ste singura poziie din definiia unui constructor "n care poate s) apar) o referire la un alt constructor 6n astfel de apel poate ar)ta astfel, a: t)is9lista&eAr#umente:S ;; constructor din aceea(i clas), unde ;; lista&eAr#umente reprezint) lista valorilor constructorului invocat Cespectiv "n, b: super9lista&eAr#umente:S ;; constructor din supraclas) /ac) dorim s) ne referim la acela(i cmp din supraclas), vom scrie, super.nume !utem referi (i direct numele supraclasei, numeGupraclasa.numeCPmp /ac) prima instruciune dintr-un constructor nu este un apel e+plicit la un alt constructor, se va apela constructorul implicit al supraclasei, adic) super9 :. /ac) supraclasa nu are un astfel de constructor, se va semnala eroare de compilare /up) ce se e+ecut) constructorul supraclasei, se face iniializarea implicit) a variabilelor care se adaug) prin e+tinderea supraclasei 7bia dup) aceast) iniializare se e+ecut) codul specificat "n corpul constructorului Se observ) c) e,ecu"ia unui constructor, realizeaz! e,ecu"ia unei ierar)ii de constructori, 3ncepPnd cu constructorul clasei Object 3a efect se produce iniializarea tuturor variabilelor coninute "n obiectul respectiv /ac) pentru o clas) nu se define(te nici un constructor, se consider) c) e+ist) un constructor f)r) argumente (i care conine, conform conveniei, un apel f)r) argumente la constructorul f)r) argumente al supraclasei 7 fost posibil) definirea a doi constructori pentru clasa Mloare deoarece limbajul Java permite supra3nc!rcarea metodelor, adic) e+istena mai multor metode cu acela(i nume, dar semn)turi diferite 6.5 Modificatori de acces !entru clasa Mloare cele dou) variabile au fost declarate cu public, deci pot fi modificate e+plicit /ar acest mod de lucru nu este "n spiritul !FF 8deea este c) variabilele coninute "n obiecte s) fie ascunse, iar modificarea lor s) fie e+ecutat) e+plicit, prin metodele ;; parametrilor

>$

definite odat) cu clasa respectiv) (!rogramul M M) class Hloare Q private String nume. private int nr!etale. Hloare( ) Q Q t9is nume V nume. t9is nr!etale V nr!etale. R public void modificaGr!etale(int nr!etale) Q t9is nr!etale V nr!etale. R t9is(%3rin', N). R Hloare(String nume, int nr!etale)

public int verificaGr!etale(int nr!etale) Q R !rogramul M M 7scunderea cmpurilor clasei Hloare =ariabilele nume (i nr$etale nu mai sunt accesibile din e+terior, ci numai prin intermediul metodele de acces 7tributele public (i private determin) nivelul de acces la variabilele respective, dar nu sunt singurele niveluri posibile 0n tabelul M # sunt prezentate toate nivelurile de acces la variabile (i la metode, admise de limbajul Java public accesul este permis tuturor metodelor din orice clas) (clasa "n care se definesc trebuie s) fie (i ea public)). accesul este permis doar metodelor claselor protected din aceia(i bibliotec) cu clasa respectiv). accesul este permis doar metodelor claselor din aceia(i bibliotec) (i subclaselor clasei respective. return nr!etale. R

KX

private

accesul este permis doar metodelor din clasa "n care s-a f)cut declararea 5abel M # Giveluri de acces la variabile (i metode /ac) "ntr-o clas) se define(te cel puin un constructor (pentru a nu fi considerat unul

implicit) (i toi constructorii sunt declara(i cu atributul private, atunci nu se pot declara instanieri "n afara acelei clase F astfel de situaie poate fi util) dac) de e+emplu, o clas) este definit) pentru a crea variabile #lobale (adic) variabile cu atributul static) sau dac) sunt necesare metode statice care s) fie utilizate ca funcii scrise "n 3 *+emplul tipic este clasa G*stem, pentru care este definit un sin#ur constructor, cu atributul private 7ceast) clas) conine cPmpuri statice, precum in (i out. !rogramul M 1 arat) totu(i cum se poate ob"ine un obiect instan"iat dintr<o clas! care are un sin#ur constructor (i acela declarat private 8nstanierea se face "ntr-o metod! static!, numit) creare9 :, din clasa testR. F "ncercare de a produce direct o instaniere din clasa testX( ) duce la eroare de compilare 7pelul metodei statice creare9 : are ca rezultat o referin"! la un obiect de tip testR. class testX X static int numar V X. private testX ( ) Q void prelucrare( ) Q System out println(D !relucrare '). R static testX creare( ) Q return ne: testX ( ). R R class utilizare5estX Q public static void main(String args[ \) Q R !rogramul M 1 6tilizarea unui constructor cu atribut private testX t V testX creare(). t prelucrare(). R R ;;constructor privat

K#

0n programul M 1 constructorul implicit testX() a fost declarat cu atributul private 7ceasta "nseamn) c) eventualele variabile, instanieri ale clasei testR pot fi referite numai din metodele clasei testR 0n clasa testX a fost definit) o singur) metod) static) de creare a unei referine pe un obiect static, instaniere a clasei testX

Curs = 6.6 &istru#erea obiectelor /ac) la instanierea unor obiecte se pot face iniializ)ri, s) vedem cum se face distru#erea unor obiecte 7stfel de operaii sunt necesare pentru prelucr)ri de fi(iere sau pentru distrugerea unor cone+iuni etc Mediul Java utilizeaz) pentru acest tip de operaii un #arba#e colection, finalize9:, a c)rei structur) de principiu este dat) "n secvena de program din figura M protected void finalize9: t)ro(s 0)ro(able X Y !rogram M - Structura de principiu a metodei finalize( ) *+presia t)ro(s 0)ro(able este "n leg)tur) cu tratarea e+cepiilor 3onstrucia metodei finalize() garanteaz) c) metoda intr) "n aciune "nainte de eliberarea memoriei ocupate de obiecte, dar nu se (tie cnd sau dac), va fi apelat) la e+ecuia altor metode 0n metoda finalize9 : pot s) apar) ...... super.finalize9 :S

K>

instruciuni care s) reactiveze obiectul respectiv, adic) s)-l fac) din nou accesibil 0n acest caz memoria ocupat) de obiect nu va mai fi eliberat) 3a urmare, dac) este necesar) e+ecuia unor operaii bine definite, atunci cnd obiectul nu mai este util, trebuie s) se prevad) ca aceste operaii s) fie incluse "ntr-o metod) care va fi apelat) e+plicit, pentru c) nu e+ist) garania c) metoda finelize( ) va fi apelat) corect ;a crearea unui obiect se activeaz) o ierar)ie de constructori, "ncepnd cu constructorul clasei Object Oi la distru#erea unui obiect s-ar putea s) se activeze un lan de metode finalize9 : 7ceste apeluri trebuie s) se realizeze "n ordine invers) fa) de apelul constructorilor 7dic) metoda finalize( ) se poate "nc9eia cu un apel al metodei finalize( ) pentru supraclasa Fbject 6.7 Conversii de tip 3ontinu)m cu e+tinderea ierar9iei, pornind de la clasa Hloare, definit) puin altfel dect "n secvenele precedente (!rogramele M K (i M M), pentru a o putea apoi e+tinde "n alte flori, spre e+emplu "ntr-un 3rin public class Mloare X protected Gtrin# numeS protected int nr$etaleS . . . . . public void Afiseaza9 : X G*stem.out.println9 nume 2 8 are 8 2 nr$etale 2 8 petale 8 :S Y !rogram M N F alt) definiie pentru clasa Hloare /efinim acum o alt) clas) 3rin, care e+tinde noua clas) Hloare (!rogramul M S) care, pe lng) nume (i nr!etale, are (i miros /ar pentru a putea e+tinde clasa Hloare, este necesar ca variabilele nume (i nr$etale s) fie declarate protected (i nu private, class Crin e,tends Mloare X private boolean mirosS Y ;; > constructori

KK

1@ / constructori @1 Crin9 : X super9 ECrinF, >:S t)is.miros K trueS Y Crin9 int nr$etale, boolean miros: X super98CrinF, nr$etale:S t)is.miros K trueS Y public void afiseaza9: X G*stem.out.print9nume 2 8 are 8 2 nr$etale if9miros: G*stem.out.println98 si miroase 8:S else G*stem.out.println98si nu miroase 8:S Y Y !rogramul M S F alt) definiie pentru clasa 3rin 0ntre supraclase (i subclase se pot realiza conversii, cu ajutorul notaiilor de tip EcastF !rogramul M $ prezint) utilizarea cast "ntre obiecte de tip Hloare (i 3rin class +,empluCast X public static void main9Gtrin# ar#sAB: X Mloare f K ne( Mloare9 :S f.afiseaza9:S 11 afis. Mloarea implicita afis. Crin Crin c K ne( Crin9:S c.afiseaza9:S 11 2 8 petaleF:S

KM

f K cS c K 9Crin:fS Y Y

11 1 f <O referinta pe Crin afis. Crin afis. Crin 11 / utilizare 9Crin:f

f.afiseaza9:S 11 c.afiseaza9:S 11

Hig M $ 3onversii de tip cast "ntre obiecte de tip Hloare (i 3rin 0n programul M $ am definit dou) variabile, f (i c, iniializate ca referine la cte un obiect de tip Hloare, respectiv 3rin !rin atribuirea notat) cu (#) variabila f prime(te ca valoare o referin) la un obiect de tip 3rin, deci de tipul unei subclase Aa aceast) atribuire nu este necesar un cast, c)ci compilatorul D(tie' c) un 3rin este "n acela(i timp o Hloare (clasa 3rin este subclas) a clasei Hloare) !rin atribuirea notat) cu (>) variabila c prime(te ca valoare o referin) la o variabil) de tip 3rin, dar prin utilizarea unui cast, adic) c K 9Crin:f, care converte(te referina pe o Hloare la o referin) pe un 3rin, datorit) construciei cast, (3rin)f Fbservaie 3onversia (>) funcioneaz) corect numai dac) f, "n momentul e+ecuiei, este o referin) pe un 3rin sau pe o subclas) a clasei 3rin /ac) este o referin) pe o alt) subclas) a clasei Hloare, compilatorul semnaleaz) eroare !resupunnd c) f refer) o floare numit) Aalea cu S petale, rezultatul e+ecuiei programului M $, cu utilizare cast, este cel din fig M #X Aalea are S petale 3rin are N petale si miroase 3rin are N petale si miroase 3rin are N petale si miroase Hig M #X Cezultatul rul)rii programului M $ Cevenind la programul M $, se observ) c) dup) ce variabila f a primit ca valoare o referin) la un obiect instaniat dintr-o subclas), atunci, a: dac) e+ist) o metod) care este definit) att "n clas) ct (i "n subclas), se va e+ecuta metoda din subclas)

K1

b: dac) e+ist) o metod) definit) numai "n subclas), ea nu va putea fi accesat) printr-o referin) la clas) 7ceasta se datoreaz) faptului c) 3n Java se face le#area dinamic! a claselor. 3a urmare, 3n faza de e,ecu"ie, se p!streaz! semn!turile metodelor. /eci identificarea codului care trebuie e+ecutat pentru o metod) se face pe baza numelui metodei (i a listei sale de parametri 3a urmare, un nume definit numai "n subclas) nu poate fi Dv)zut' din supraclas) 6tilizarea mecanismului de cast se poate face numai 3ntre o supraclas! i subclasele sale (sau subclasele subclaselor sale,g) !lecnd de la ideea c) Object este r)d)cina oric)rei ierar9ii, secvena (de principiu) care urmeaz) "n fig M ## este corect) Fbject ob. 3eva c V ne: 3eva(). ob V c. c V (3eva) ob. Hig M ## F posibil) conversie cast 0n codul din fig M ## au fost declarate dou) variabile, iniializate cu dou) referine, ob (i c. =ariabila ob poate s) conin) un obiect de tip Fbject iar variabila c poate s) conin) un obiect de tip 3eva Se poate face conversia de la tipul 3eva la tipul Fbject, apoi se poate prelucra obiectul de tip Fbject, dup) care se poate face conversia invers), "napoi la tipul 3eva

Curs > 6tilizarea mecanismului de cast modific) doar felul "n care sunt tratate variabilele de tip referin) "n faza de e+ecuie, nu (i coninutul lor Se folose(te pentru limitarea accesului metodelor

K-

unui obiect, la metodele unei supraclase a acestuia /ac) obiectul referit prin cast nu apaine clasei sau subclasei acestuia apare eroare de tip ClassCast+,ception !entru a verifica corectitudinea castului se recomand) verificarea apartenenei obiectului la clasa respectiv), utiliznd operatorul instanceof, ca "n programul ce urmeaz) (fig M #>) class +,emplu%nstanceof X public static void main9Gtrin# ar#sAB: X Mloare f K ne( Mloare9:S if9 f instanceof Crin: G*stem.out.println98 &AF:S else G*stem.out.println98 L?F:S Crin c K ne( Crin9:S if9 c instanceof Mloare: G*stem.out.println98 &AF:S else G*stem.out.println98 L?F:S Y Y Hig M #> 6tilizare instanceof C)spunsul vafi, L? &A 11 f nu este o instan"a de tip Crin 11 c este o instan"! de tip CT%L care 11 este si Mloare

Hig M #K Cezultatul programului M #> 6.= Tedefinirea metodelor /ac) "ntr-o clas) se define(te o metod) care are acela(i nume (i aceia(i semn)tur) cu o metod) din supraclas), ambele metode pot fi referite dintr-o metod) din clas) !resupunem c) numele unei astfel de metode este e,emplu9 : (i nu are parametri 0n acest caz, apelul e,emplu9 : se refer) la metoda din clasa curent) iar apelul super.e,emplu9 : se refer) la metoda din supraclas) 7ici super este cuvnt rezervat /eclararea unei metode dintr-o clas) cu acela(i nume (i cu aceia(i semn)tur) cu a unei metode din supraclas), reprezint) de fapt redefinirea

KN

metodei respective (overriding) O metod! redefinit! din Java este similar! unei metode virtuale din C22N !entru un obiect se apeleaz) metoda cea mai specializat) care o redefine(te /eosebirea este urm)toarea, I "n C22 metoda trebuie declarat) cu virtual, atribut care garanteaz) legarea dinamic) a pe metodele clasei respective), deci "n faza de e+ecuie. I "n Java pentru toate metodele legarea este dinamic), deci "n faza de e+ecuie /ac) se dore(te legare static), trebuie utilizat atributul final. Metodele care au acest atribut nu mai pot fi redefinite, deci legarea lor poate fi f)cut) "n faza de compilare *ste o diferen) mare "ntre metodele supra)nc)rcate (i f)r) s) fac) legarea, care se va face la e+ecuie I cele redefinite sunt selectate dinamic, "n faza de e+ecuie 6.> Variabile i metode statice 7vnd definit) o clas), se pot instania din ea mai multe obiecte Hiecare dintre aceste obiecte conine cte un e+emplar din fiecare variabil) care a intrat "n definiia clasei 3e se va "ntmpla "n cazul variabilelor globaleT 7ceste variabile sunt comune pentru toate obiectele instaniate din clasa respectiv) (au aceia(i valoare) *le sunt declarate cu atributul static. F variabil) static) este local) pentru toate obiectele instaniate dintr-o clas) 3u alte cuvinte, ea este creat) o singur) dat), la "nc)rcarea clasei respective Oi o metod! poate fi declarat) static!. Metoda static) aparine clasei (i nu instanierilor clasei Spre e+emplu, metoda main9 :, care este declarat) ca fiind static) (i public), poate s) fie referit) f)r) instanierea unui obiect Secvena de cod din fig M #M reprezint) un e+emplu de principiu pentru variabile statice class +,emplu X static final int versiune K /S static int nrObiecteS . . . . . . Y cele redefinite, metodei, pe baza tabelului =H5 (=irtual Hunction 5able), "n care sunt reinui pointerii

I cele supra"nc)rcate sunt selectate de compilator "n faza de compilare pe baz) de semn)tur), dar

KS

Hig M #M =ariabile statice 0n clasa %*+emplu' am definit dou) variabile statice, I static final int versiune V >. Hiind o variabil) declarat) static), este accesibil) oric)rui obiect instaniat din clasa D*+emplu' /ar valoarea ei nu poate fi sc9imbat), fiind declarat) cu atributul %final' I static int nrFbiecte. Oi aceast) variabil) static) este accesibil) oric)rui obiect instaniat din clasa *+emplu Gefiind declarat) final), fiecare obiect instaniat de clas) o poate actualiza 0n figura M #1 este dat) ca e+emplu (de principiu) o secven) de cod, declarat) cu atributul static, utilizat) "n clasa G*stem, dar nu numai static X secven"a de codS Y M #1 Secven) static) 7ceast) clas) (System) are un constructor declarat cu private, deci nu poate fi instaniat) /ac) se pune problema iniializ)rii variabilelor din aceast) clas) (i avnd "n vedere c) nu le putem iniializa cu ajutorul constructorului, putem utiliza secvene de tipul celei din fig M #1, adic) o secven) static) 7stfel de secvene se pot declara numai "n afara metodelor 0n momentul "n care clasa, care conine o astfel de secven), se "ncarc) (pentru c) a fost referit)), se vor e+ecuta toate secvenele statice, de tipul celor din figura M #1, din respectiva clas) 0n fig M #- se d) un e+emplu de utilizare a unui astfel de cod class Mloare X protected Gtrin# numeS protected int nr$etaleS static X G*stem.out.println9E&escrierea floriiF:S

K$

Y 11 . . . . . Y class +,emplu X static X Mloare t K 9E0oporasF, 7:S t.afiseaza9 :S Y public static void main9Gtrin# ar#sAB: X Y Hig M #- *+emplu de utilizare a secvenelor statice Cezultatul e+ecuiei codului M #- este te+tul M #N &escrierea florii 0oporas are 7 petale M #N Cezultatul e+ecuiei codului M #Se observ) c) de(i metoda main() nu conine nici o prelucrare, s-au e+ecutat secvenele de cod prev)zute "n ambele clase =ariabilele (i metodele statice pot s) fie referite utiliznd numele clasei Se consider) c) ele sunt asociate clasei (i nu obiectelor, ca "n cazul cmpurilor (i metodelor obi(nuite Metodele cu atributul static sunt similare funciilor obi(nuite din 3 *le pot fi apelate f)r) a instania un obiect de tipul respectiv 6tilizarea lor se poate face pe baza numelui clasei (i a metodei respective !entru e+emplificare, consider)m codul din fig M #S class 0est X int ,S static int * K RS static void modificaZ9 int *: X Y

MX

for9int i K RS i I 7S i22 : * 2K iS Y void modificaZ9int *: X t)is.* K *S Y void modifica[9int ,: X t)is., K , S Y void metoda9 : X 0est t K ne( 0est9 : S 11 obiect de tip 0est 11 7 posibilitati de modificare a variabilei statice 11 9#lobale: *N * K 1S t.* K 1S 0est.* K 1S 0est.modificaZ9:S t.modificaZ9/:S , K 1S t.modifica[9/:S Y public static void main9Gtrin# ar#sAB: X Y Y 11 ptr. 0est Hig M #S *+emplu de acces la variabile 0n metoda( ) din clasa 5est, s-a instaniat un obiect al clasei 5est, notat cu t 0n cadrul aceleia(i metode au fost scrise 1 linii diferite pentru modificari ale valorii variabilei statice (globale) y !entu variabila + modific)rile au fost doar dou), , K 1S 11 se refera la variabila locala , a obiec<

M#

11 tului pentru care se e,ecuta metoda t.modifica[9/:S 11 metoda care modifica 11 variabila , din instantierea t a clasei 0est. 11 &eci cele doua variabile , sunt diferite. Hig M #$ Modific)ri aduse variabilei + 6.C Clase abstracte Aimbajul Java lucreaz) cu o ierar9ie de clase Frice clas) este o subclas) pentru o alt) clas), cu e+cepia clasei Fbject 5otu(i limbajul permite definirea unor clase abstracte. F clas) abstract) reprezint) un model de clas) pentru care se definesc o parte din metode, numele (i semn)tura lor (i se declar) utiliznd cuvntul c9eie abstract. Se poate considera c) atributele final (i abstract sunt opuse, "n sensul c) o clas) sau o metod) declarat) cu final nu mai poate fi e+tins) sau "nlocuit), "n timp ce o metod! abstract! trebuie s! fie 3nlocuit!, 3nainte de a fi utilizat!, de o metod! care nu are atributul abstract, c9iar dac) aceast) metod) nu face nimic F clas) abstract) poate fi e+tins) de o alt) clas) abstract) sau de una obi(nuit), pentru c) metodele abstracte sunt doar modele de metode, nu se pot face instanieri de obiecte pentru aceste clase *+emplul M >X, abstract class Aplicatie e,tends Mloare X abstract void prelucrare9:S Y Hig M >X *+emplu de clas) abstract) /efiniia clasei 7plicatie conine metoda prelucrare( ) pentru care s-a precizat doar modul de apel !entru e+tinderea acestei clase, se pot construi subclase, care vor mo(teni tot ce este declarat "n 7plicatie (i vor "nlocui metodele abstracte cu implement)ri concrete 3onstructorii, metodele statice, private sau cele ce "nlocuiesc o metod) a supraclasei, care nu este abstract), cu o alt) metod), nu pot fi abstracte F clas) este declarat) abstract) dac), I conine cel puin o metod) abstract), I mo(tene(te o metod) abstract) de la supraclas) (i nu o implementeaz),

M>

I reprezint) o implementare a unei interfee, pentru care e+ist) cel puin o metod) care nu este implementat) 3lasele abstracte nu pot fi instaniate 7stefel codul din fig M ># va da eroare de compilare Aplicatie a K ne( Aplicatie9:S Hig M ># 8nstaniere eronat) /ac) prin e+tinderea clasei 7plicatie se define(te o clas) care nu mai este abstract), atunci se poate face (i o instaniere, pentruc) s-a precizat o implementare pentru metoda prelucrare(), c9iar dac) metoda nu e+ecut) numic (Hig M >>) class Aplicatie%mplementata e,tends Aplicatie X void prelucrare9 : X Y Y Aplicatie a K ne( Aplicatie%mplementata9 :S Hig M >> 8mplementarea (i instanierea clasei 7plicatie 7parent, mecanismul claselor abstracte poate fi utilizat pentru a defini clase care nu pot fi instaniate Metodele statice din aceste clase pot fi referite Soluia corect) pentru aceast) problem) este declararea unei clase, care are un singur constructor f)r) argumente, declarat privat (i neapelat din interiorul clasei F astfel de clas) este utilizat) pentru a oferi metode (i variabile globale, asociate clasei 6n e+emplu "n acest sens sunt clasele System (i Mat9

6.D Metode native !entru a permite utilizarea unor metode scrise "n alte limbaje de programare (de e+emplu "n limbaj de asamblare), Java permite utilizarea atributului native pentru metode 0n acest caz, "n definirea clasei apare doar semn)tura metodei /in motive de securitate nu se accept) metode native dect pentru clase coninute "n biblioteci locale 7dic) nu se admite aducerea din reea a unor metode pentru care codul obiect pentru ma(ina virtual) nu poate fi verificat

MK

Gu se recomand) utilizarea metodelor native, c9iar dac) "mbun)t)esc calitatea programului, dar "n sc9imb scad portabilitatea 6.1R %nterfe"e Aimbajul Java implementeaz) noiunea de interfa"!. H)cnd analogia cu 344, interfaa poate fi privit) ca o clas! virtual! pur!, adic) ca o clas) format) numai din metode abstracte (i constante 3u ajutorul acestui mecanism se evit) dezavantajele mo(tenirii multiple, rezultatele fiind ec9ivalente F interfa) define(te un tip de date 8nterfeele sunt elemente de ordin "nti, adic) variabilele de tip interfa"! pot fi trimise ca ar#umente metodelor i pot fi ob"inute ca rezultate 3u ele se pot crea ierar9ii de interfee, similar ierar9iilor de clase Frice clas) care implementeaz) o interfa), trebuie s) o respecte Metodele care apar "ntr-o interfa) sunt "n mod implicit publice, pentru c) prin ele se acceseaz) din e+terior obiecte (altfel n-ar fi interfeePP) =ariabilele declarate "n interfee sunt de fapt constante, c9iar dac) nu se specific) acest lucru (compilatorul le astfel "n mod implicit ) 0n codul din fig M >K se d) un e+emplu de interfa) iar n fig M >M, o implementare a acesteia %nterface +,emplu X int versiune K 6S void prelucrare19 :S void prelucrare/9 Mloare f :S Y Hig M >K *+emplu de interfa) F clas) care implementeaz) aceast) interfa) trebuie s) specifice codul celor dou! prelucr!ri (vezi codul din fig M >M), dar poate conine (i variabile (i metode proprii class %mplementare1 implements +,emplu X 11 campurile clasei %mplementare1 public void prelucrare19 :X . . . Y public void prelucrare/ 9Mloare f: X . . . . Y void alta$relucrare9 : X . . . . Y

MM

Y class %mplementare/ implements +,emplu X 11 campurile clasei %mplementare/ public void prelucrare19 : X X. . . . Y void prelucrare&iferita9 : X . . . . Y Y Hig M >M 8mplementarea interfaei *+emplu Metodele prelucrare# (i prelucrare> au fost declarate cu atributul public pentru c) . . . Y public void prelucrare/ 9Mloare f:

implementeaz) metodele din interfa), care implicit sunt publice O variabil! poate fi declarat! de tipul unei interfe"e. =aloarea unei astfel de variabile poate s) fie orice referin) la un obiect care aparine oric)rei clase care realizeaz) implementarea interfeei respective sau care e+tinde o astfel de clas) 3odul care urmeaz) (vezi fig M >1) prezint) un e+emplu posibil de a e+ecuta o variant) sau alta de prelucr)ri ale interfeei, "n funcie de o condiie care se testeaz) +,emplu eS . . . . . %mplementare1 i1 K ne( %mplementare19 :S %mplementare/ i/ K ne( %mplementare/9 :S . . . . . if9 conditie: X e K i1S e.prelucrare19 :S Y else X e K i/S e.prelucrare/9:S Y Hig M >1 6tilizarea unei variabile referin) la o interfa) F interfa) poate s) reprezinte e+tensia altei interfee, adic) s) adauge metode noi la cele e+istente 8mplementa- rea unei interfee poate s) fie (i o clas) abstract) 0n acest caz implementarea efectiv) va fi realizat) de subclasele acesteia F clas) poate s) implementeze mai multe interfee 7dic) poate s) defineasc) modul de implementare al 11 referinta la interfata

M1

metodelor ale c)ror modele sunt coninute "n mai multe interfee /e e+emplu interfeele /ata8nput (i /ataFutput din biblioteca java io descriu metodele corespunz)toare citirii, respectiv scrierii "ntr-un format independent de main) 7ceste interfee sunt utilizate, de e+emplu (vezi codul M >-), pentru definirea clasei Candom7ccessHile, astfel, public class TandomAccessMile implements &ataOutput, &ata%nput X . . . . . Y Hig M >- *+emplu de utilizare a interfeelor 8nterfeele sunt independente de ierar9ia de clase, astfel un obiect dintr-o clas) care implementeaz) o interfa) este privit prin semn)turile metodelor sale, independent de implementarea metodelor, realizat) "n clasa din care face parte /in acest motiv se pot utiliza variabilele de tip interfa), pentru c) acestea abstractizeaz) noiunea de obiect, fiind independente de clasele care le implementeaz) sau de e+tinderile ulterioare ale acestora 6n alt e+emplu de utilizare al interfeelor este prezentat "n fig M >N (i este inspirat de modul "n care se utilizeaz) interfaa Cunnable Goi vom defini interfaa e,ecutabila, interface e,ecutabila X public void e,ecutie9 :S Y 11 %n definitia unei clase +,emplu definim 11metoda prelucrare9 :N public class +,emplu X 11 . . . . . void prelucrare9e,ecutabila e: X e.e,ecutie9 :S Y Y 11 sfarsit clasa +,emplu Hig M >N 8nterfaa e,ecutabila (i implementarea ei 3ele dou) definiii (interfa) 4 clas)) pot fi compilate (i memorate "ntr-o bibliotec) Se poate defini acum o clas) care reprezint) o implementare a interfe"ei e,ecutabila ( vezi Hig M >S )

M-

class %mplementare implements e,ecutabila X public void e,ecutie9 : X G*stem.out.println9E G<a e,ecutat metoda e,ecutie E 2 Edin implementare E:S Y Y Hig M >S 8mplementarea interfeei e+ecutabila /ac) se e+ecut) instruciunea din fig M >$ se va apela de fapt metoda %mplementare.+,ecutie9:. 7ceast) te9nic) se nume(te %call-bacB' ne( +,emplu9:.prelucrare9ne( %mplementare9::S Hig M >$ 7pel *+ecutie din 8mplementare Holosind tipul interfa) se elimin) necesitatea utiliz)rii pointerilor c)tre metode, care sunt folosii "n 344 pentru implementarea mecanismului de call-bacB 0ntr-o bibliotec), interfaa este asem)n)toare cu o clas) /ac) este declarat) cu atributul public, atunci este vizibil) "n afara bibliotecii respective 0n caz contrar, ea poate fi folosit) numai "n cadrul claselor (i interfeelor din biblioteca curent)

6.11 Vectori 0n limbajul Java, vectorii sunt obiecte *+ist) dou) tipuri de vectori, I vectori la care num)rul de elemente este fi+at la instaniere. pentru acest tip de vectori nu e+ist) un nume de clas) care se instaniaz) pentru a obine un obiect vector I vectori al c)ror num)r de elemente poate s) fie modificat prin utilizarea unor metode. acest tip de vectori se instaniaz) folosind clasa =ector 6. 11.1 Vectori cu num!r fi, de elemente

MN

MS

\ ?. $rezentarea mediului inte#rat 9%&+: folosit 3n laboratorului $OO 5.1 $rima aplica"ie Java, o aplica"ie stand<alone 0n cadrul laboratorului se va folosi mediul de dezvoltare integrat

cadrul

9autonom!: (8/*) al Hundaiei Fpen

Sourse *3A8!S*, considerat mediu de lucru autonom pentru Java (stand-alone) 3a (i "n 3;344, prima aplicaie va fi cea de afi(are la consol) a mesajului DSalut, prieteniP % Structura micului program este urm)toarea, public class Mesaj Q public static void main9Gtrin# ar#sA B: Q System out println(% Salut, prieteniP'). R R Aten"ieH 4n Java este obli#atoriu ca numele clasei publice 9Mesaj, 3n cazul nostru: s! coincid! cu cel al fi ierului 3n care se afl! aplica"ia, iar e,tensia acestui fi ier s! fie .java HH Clasa public! trebuie s! con"in! obli#atoriu i func"ia main9 :. Huncia main9: este, la fel ca (i "n 344, punctul de intrare "n program Gumai c) "n Java funcia main9: trebuie s) fie membrul clasei care are acela(i nume cu al fi(ierului, "n caz contrar ea nu va fi e+ecutat) Metoda main9: este prima metod) apelat) de interpretor atunci cnd se lanseaz) "n e+ecuie un program Java Fbiectul G*stem din cadrul clasei numite Mesaj ofer) sistemul "n care este e+ecutat programul, cout reprezint) ie(irea standard iar println afi(eaz) (irul dat ca parametru 0n 3 ec9ivalentul acestui apel este printf iar "n 344 este apelul cout II Fbservaie /ac) rul)m acest program, vom vedea c) mediul de dezvoltare "nc9ide fereastra

imediat dup) e+ecuie F soluie ar fi s) introducem o funcie care a(teapt) un caracter (ca "n 3 (i "n 344) 7ceast) funcie poate fi urm)toarea,

M$

G*stem.in.read9:S Huncia returneaz) un "ntreg, care este de fapt valoarea urm)torului octet (byte) din stream<ul de intrare /ezavantajul acestei metode const) "n faptul c) poate genera e+cepii, iar e+cepiile trebuiesc tratate O e,cep"ie este un obiect 9o clas!: 3n care sunt stocate informa"ii cu privire la ceea ce a #enerat acea e,cep"ie. Mecanismul e+cepiei este format din dou) p)ri, una care Darunc)' e+cepia (t)ro() (i alta care Dprinde' e+cepia (catc))

0n principiu, secvena (metoda) care trateaz) o e+cepie, are urm)toarea structur), metodaN X 11 opera"ii 11 . . . . if9eroare: X +,ception e K ne( +,ception98+roare. . . 8:S t)ro(9e:S Y Y 11 arunc! e,cep"ia

tr* X 11 %nstructiuni care pot #enera 11 apelarea metodeiN metoda9:S Y catc)9+,ception 0*pe1 e: X 11 zona de tratare a e,cep"iei e de tipul 1 Y catc)9+,ception 0*pe/ e: X 11 prinde e,ceptia 11 prinde e,ceptia

1X

11 zona de tratare a e,ceptiei e de tipul /e Y finall* X 11 zona de tratare a altor e,ceptii Y

0n blocul tr* se apeleaz) metoda9 : respectiv) (i se iniializeaz) mecanismul de prindere al e+cepiei /ac) "n metoda9 : apare o eroare, se Darunc)' e+cepia, urmnd ca aceasta s) fie Dprins)' de catc)-urile de la sfr(itul blocului tr*. +,ception 0*pe1 (i +,ception 0*pe/ sunt clase derivate din +,ception, restrngnd tipul de e+cepie ap)rut) (i "n consecin), tratarea ei 0n concluzie, noul program de afi(are a unui mesaj va ar)ta astfel, public class Mesaj Q public static void main(String args[\) Q System out println(DSalut, prieteniP'). try Q System in read(). R catc9(*+ception e) Q R R R Observa"ii

1#

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