Documente Academic
Documente Profesional
Documente Cultură
PCLP2 - Indrumar de Laborator PDF
PCLP2 - Indrumar de Laborator PDF
LIMBAJULDEPROGRAMAREJAVA
ndrumardelaborator |Braov,2009
LimbajuldeprogramareJava
Cuprins
1.CreareairulareaprogramelorJavadinliniedecomand........................................................1
1.1.Creareacoduluisurs...........................................................................................................1
1.2.Compilareaprogramului......................................................................................................2
1.3.Lansareanexecuieaprogramului.....................................................................................4
2.CreareairulareaprogramelorJavacuajutorulplatformeiEclipse...........................................5
2.1.InterfaadelucruaplatformeiEclipse.................................................................................6
2.2.CreareaunuiproiectJava.....................................................................................................7
2.3.Creareapachetelor...............................................................................................................9
2.4.Creareaclaselor....................................................................................................................9
2.5.AplicaiaHelloWorld..........................................................................................................11
3.StructuraunuiprogramJava.....................................................................................................13
3.1.Definiiaclasei....................................................................................................................13
3.2.Definiiametodelor............................................................................................................13
3.3.Instruciuni.........................................................................................................................13
4.Tipuridedateprimitive.............................................................................................................15
4.1.Tipurintregi.......................................................................................................................15
4.2.Tipurireale.........................................................................................................................16
4.3.Tipulcaracter......................................................................................................................16
4.4.Tipullogic...........................................................................................................................17
4.5.Conversiintretipurilededateprimitive...........................................................................18
4.6.Variabile..............................................................................................................................18
4.7.Constante...........................................................................................................................19
4.8.Operatori............................................................................................................................19
4.9.Aplicaiecuvariabileioperatori......................................................................................20
5.CitireadelatastaturclasaScanner..................................................................................21
5.1.Introducereadatelordelatastaturiafiarealor...........................................................22
i
ndrumardelaborator
6.Structuridecontrol...................................................................................................................23
6.1.Instruciunidedecizie/selecie........................................................................................23
6.1.1.Instruciuneaif.........................................................................................................23
6.1.1.1.Clauzaelse......................................................................................................................24
6.1.1.2.Clauzaelse if...............................................................................................................24
6.1.1.3.Instruciuniifimbricate...................................................................................................25
6.1.1.4.Utilizareainstruciuniiif..................................................................................................26
6.1.2.Instruciuneaswitch................................................................................................27
6.1.2.1.Instruciuniswitchimbricate.........................................................................................28
6.2.Instruciuniiterative...........................................................................................................29
6.2.1.Instruciuneafor.......................................................................................................29
6.2.1.1.Cicluriforimbricate.........................................................................................................30
6.2.1.2.Utilizareainstruciuniifor...............................................................................................31
6.2.2.Instruciuneawhile..................................................................................................35
6.2.2.1.Utilizareainstruciuniiwhile...........................................................................................36
6.2.3.Instruciuneado..while.........................................................................................37
6.3.Instruciunidesalt.............................................................................................................38
6.3.1.Instruciuneabreak..................................................................................................38
6.3.2.Instruciuneacontinue...........................................................................................39
6.3.3.Instruciuneareturn................................................................................................39
6.4.Utilizareainstruciunilordo..while,switch,breakicontinue........................40
7.Tablouri.....................................................................................................................................43
7.1.TablouriunidimensionaleVectori...................................................................................43
7.1.1.Declarareavariabileitablou........................................................................................43
7.1.2.Instanierea.................................................................................................................43
7.1.3.Iniializarea..................................................................................................................44
7.2.TablourimultidimensionaleMatrice...............................................................................45
7.2.1.Creareaunuitabloumultidimensional.......................................................................45
7.2.2.Atribuireavalorilorctreelementelematricei...........................................................45
7.2.3.Proprietilength....................................................................................................46
ii
LimbajuldeprogramareJava
7.3.ClasaArrays....................................................................................................................46
7.3.1.Metodaequals()....................................................................................................46
7.3.2.Metodafill().........................................................................................................47
7.3.3.Metodasort().........................................................................................................48
7.3.4.MetodabinarySearch().....................................................................................48
7.3.5.Metodaarraycopy().............................................................................................49
7.4.Aplicaiecuvectori.............................................................................................................50
7.5.Aplicaiecuvectori:Loteria................................................................................................52
7.6.Aplicaiecuomatricebidimensional...............................................................................53
8.iruridecaractere.....................................................................................................................55
8.1.ClasaString....................................................................................................................55
8.2.ClasaStringBuffer......................................................................................................60
9.Claseiprogramareorientatobiect........................................................................................63
9.1.Termeniutilizainprogramareaorientatobiect............................................................63
9.2.Definiiauneiclase.............................................................................................................63
9.2.1.Modificatorideacces..................................................................................................64
9.2.2.Alimodificatori...........................................................................................................64
9.2.2.1.Modificatorulfinal........................................................................................................64
9.2.2.2.Modificatorulstatic......................................................................................................65
9.2.2.3.Modificatorulsynchronized.......................................................................................65
9.2.3.Proprieti...................................................................................................................65
9.2.4.Metode........................................................................................................................65
9.2.5.Constructori..................................................................................................................67
9.2.6.Declarareauneiinstaneauneiclase.........................................................................68
9.2.7.Accesullamembriiuneiclase.....................................................................................68
9.2.8.Suprancrcareametodelor.........................................................................................69
9.2.9.Cuvntulcheiethis..................................................................................................70
9.3.Creareaiutilizareclaselor(1)...........................................................................................72
9.4.Creareaiutilizareaclaselor(2).........................................................................................74
9.5.Claseinterne.......................................................................................................................75
iii
ndrumardelaborator
10.Motenirea..............................................................................................................................81
10.1.Accesullamembriiuneiclasemotenite.........................................................................82
10.2.Apelareaconstructorilor..................................................................................................83
10.2.1.Folosireacuvntuluicheiesuper...........................................................................84
10.2.1.1.Folosireacuvntuluicheiesuper.....................................................................................84
10.2.2.Motenireapemaimulteniveluri............................................................................85
10.2.2.1.Motenireapemaimulteniveluri...................................................................................85
10.2.3.Supradefinireametodelorfolosindmotenirea.......................................................87
10.2.3.1.Supradefinireametodelorfolosindmotenirea..............................................................88
10.2.4.Cuvntulcheiefinalimotenirea.......................................................................90
11.Tratareaexcepiilor.................................................................................................................91
11.1.Proceduridetratareaexcepiilor....................................................................................91
11.1.1.Blocuritryimbricate...............................................................................................97
11.2.Lucrulcuexcepiineinterceptate....................................................................................98
11.3.Metodecarenutrateazexcepiile.................................................................................99
11.4.Excepiiverificateineverificate...................................................................................100
11.5.TratareaexceptiilrfolosindsuperclasaException..................................................101
11.6.Exemple..........................................................................................................................102
11.6.1.ExcepiideI/O.........................................................................................................102
11.6.2.Excepii:Depireaindexuluiunuivector...............................................................103
11.6.3.Excepii:Vectorcudimensiunenegativ................................................................104
11.6.4.Excepii:NullPointerException..................................................................105
11.6.5.Excepii:ArrayIndexOutOfBoundsException..........................................106
12.Interfee................................................................................................................................107
13.Fluxurideintrare/ieiere(fiiere).......................................................................................112
13.1.Fiiereisistemedefiiere............................................................................................112
13.2.ClasaFILE.....................................................................................................................112
13.2.1.Afiarealisteidefiieredintrundirector...............................................................115
iv
LimbajuldeprogramareJava
13.3.Fluxuri.............................................................................................................................116
13.3.1.Scriereantrunfiier...............................................................................................117
13.3.2.Citireadintrunfiier.............................................................................................118
13.3.3.Adugareadatelorntrunfiier...........................................................................119
13.3.4.Citireaiscriereunuiobiectntrunfiier..........................................................120
14.Interfeegrafice....................................................................................................................124
14.1.Pachetuljavax.swing..............................................................................................125
14.2.Oaplicaiecuinterfagraficsimpl............................................................................125
14.3.Creareauneicasetededialog........................................................................................127
14.4.Concatenareaadouiruridecaractere.......................................................................128
ndrumardelaborator
vi
LimbajuldeprogramareJava
LABORATORUL1
1.CreareairulareaprogramelorJavadinliniedecomand
PaiicetrebuieurmaipentrucreareaunuiprogramJavasuntprezentaischematicnfigurade
maijos:
Fig.1.EtapelenecesarecreriiunuiprogramJava
1.1.Creareacoduluisurs
Codul surs este scris n limbajul Java i rezid ntrunul sau mai multe fiiere text avnd
extensia .java. Pentru scrierea programului se poate utiliza orice editor de texte. Dac se
lucreaz sub sistemul de operare Microsoft Windows, se poate utiliza, de exemplu, aplicaia
Notepad.DacselucreazsubUnix/Linuxprogramulvipoatefifolositpentruscriereacodului
surs.
Figura2prezintcodulsursalunuiprogramJavacareafieazpeecrantextulHelloWorld
dinJava!,aacumaratelnaplicaiaNotepad.
Fig.2.EditareaprogramelorJavacuajutorulaplicaieiNotepaddinWindows
Numele fiierului care conine codul surs al programului trebuie s aib numele
identiccunumeleclaseiceconinemetodamain().
ndrumardelaborator
1.2.Compilareaprogramului
Transformarea codului surs n codul de octei (byte code) neles de JVM (Java Virtual
Machine) se realizeaz prin compilarea programului. Pe sistemele Windows acest lucru este
realizatdeexecutabiluljavac.exe,cepoatefiapelatdintrofereastrsistem.
CompilatorulJavafacepartedinpachetulJDK(JavaDevelopmentKit)caretrebuiesfieinstalat
pecalculatorulpecaresedezvoltprogrameJava.Acestpachetpoatefidescrcat,gratuit,de
pe siteul companiei Sun microsystems. Programele prezentate n continuare au fost scrise i
testatefolosinduseversiunea6apachetuluiJDK.Acestpachetpoatefidescrcatdelaadresa:
http://java.sun.com/javase/downloads/index.jsp.
PentruacompilaprogramulHelloWorld,prezentatnfigura2,sedeschideofereastrsistem
(CommandPrompt),ncaresescrieurmtoareacomand,urmatdetastaCR(Enter):
javac HelloWorld.java
Dacprogramulafostcompilatcusucces,peecranaparedinnoucommandpromptul:
ndirectoruldelucruapareunnoufiier,numitHelloWorld.class,ceconinecoduldeoctei
alprogramului(aacumaratfigura3).
Fig.3.Codulsursifiierulobinutnurmacompilrii
LimbajuldeprogramareJava
Dacprogramulnuafostcompilatcusucces,nfereastrasistempotaparediferitemesajede
eroare,precum:
Fig.4.IncludereadirectoruluibinalpachetuluiJDKnvariabiladesistemPATH
ndrumardelaborator
2. ...shouldbedeclaredinafilenamed....
Cauzeposibile:
1. numelefiieruluinuestesalvatcuacelainumecucelalclaseiconinute.
o Soluie:redenumireafiieruluisauaclasei,astfelnctceledounumes
coincid.
javac:invalidflag:dacapareacestmesaj,urmatdeolistlungdecuvintecarencep
cu-cauzeleposibilesunt:
1. compilatorulnupoategsifiierulsursJava.Sevaafiadirectorulcurent.
2. scriereagreitanumeluifiieruluilacompilare.
3. omitereaextensieifiierului(.java).
Hellojava:6:;expected
Cndoeroareconinecuvntulexpectedurmatdeunfragmentdeprogramnseamn
cfragmentulrespectivconineoeroaredesintax.nacestexemplu,linia6estecea
careagenerateroarea.
1.3.Lansareanexecuieaprogramului
PentruaputealansanexecuieunprogramJava,calculatorulgazdtrebuiesaibinstalat
maina virtual Java (JVM). Aceasta este reprezentat de pachetul JRE (Java Runtime
Environment),careesteinclusinpachetulJDK.
LansareanexecuieaprogramuluiHelloWorldserealizeazprincomanda:
java HelloWorld
nfereastraCommandPromptaparemesajulHelloWorlddinJava!:
LimbajuldeprogramareJava
LalansareanexecuieaunuiprogramJavadinliniedecomandesteutilizatfiierulcu
extensia.class,daraceastextensienusemenioneaz,cinumainumelefiierului
(caretrebuiescoincidexactcunumeleclaseiceconinemetodamain()).
2.CreareairulareaprogramelorJavacuajutorulplatformeiEclipse
Eclipse este o platform multiscop pentru dezvoltarea de software, scris, n mare parte, n
limbajulJava,astfelputndrulapeoricesistemdeoperareactual.Oferunmediuintegratde
dezvoltare(IDEIntegratedDevelopmentEnvironment)pentrudiverselimbajedeprogramare
(Java, C/C++, PHP, Python, Perl, Cobol). Baza codului surs provine din platforma VisualAge
dezvoltatdeIBM,astfelseexplicsuportulprimitdinparteaacesteicompanii.
Platforma Eclipse se ncadreaz n categoria programelor gratuite i open source. Cea mai
recentversiune,EclipseGanymede,poatefidescrcatdepesiteuloficialwww.eclipse.org,
delaadresa:http://www.eclipse.org/downloads/,linkulEclipseIDEforJavaDevelopers.
PrintrefacilitileplatformeiEclipsemeritafimenionate:
creareaigestiuneadeproiecte;
debuging;
completareaautomatacodului(codecompletion);
automatizri pentru operaii des utilizate (redenumire, creare de setere i getere,
completareaautomataseciuniideimport).
Toate programele Java prezentate n continuare sunt dezvoltate folosind platforma Eclipse
GanymedeiJDK6iruleazpeJRE6.
VersiunileplatformeiEclipse,ncepndcuversiunea3.2,suntdenumitedupsateliiinaturalii
artificialiaiplaneteiJupiter(Callisto,Europa,Ganymede).Urmtoareaversiune,programatafi
lansatoficialn26iunie2009,sevanumiEclipseGalileo.
ndrumardelaborator
2.1.InterfaadelucruaplatformeiEclipse
La pornirea mediului Eclipse este cerut calea unui director care va fi spaiul de lucru al
platformei. Aici se vor salva proiectele i vor fi stocate datele necesare rulrii proiectelor n
lucru.
Fig.5.Seleciaspaiuluidelucru
Dac se utilizeaz acelai spaiu de lucru pentru toate proiectele, se poate bifa csua de
validare Use this as the default and do not ask again, pentru a elimina aceast ntrebare la
fiecarepornireaplatformei.
FerestrelevizibiledininterfaaEclipsesuntgrupatelogicnperspective.
O perspectiv indic numrul de ferestre vizibile, poziia lor i opiunile vizibile n aceste
ferestre,nfunciedelimbajulutilizatnproiectuldeschis.ncapturiledeecranprezentaten
acest ndrumar se va folosi perspectiva Java. Perspectiva curent se poate schimba de la
butoanelededicatesituatenparteadreaptsusaworkbenchuluiEclipse.
Figura6prezintferestrelevizibiledinperspectivaJavaisemnificaialor.
Fig.6.ComponenaperspectiveiJava
LimbajuldeprogramareJava
2.2.CreareaunuiproiectJava
DinmeniulFileNewsealegeopiuneaJavaProject.
Fig.7.a.CreareaunuiproiectJavanEclipse
nfereastracaresedeschidetrebuiespecificatnumeleproiectului.Esteindicatsfieselectat
opiuneaCreateseparatefoldersforsourcesandclassfilesdinseciuneaProjectlayout,pentru
a nu amesteca fiierele ce conin codul surs cu cele ce conin codul de octei, executabil.
PentruunproiectcompletnouestebinessealeagopiuneaCreatenewprojectinworkspace
a seciunii Contents. Apsarea butonului Next va determina accederea la mai multe opiuni,
cum ar fi importul unor librrii suplimentare, modificarea directoarelor unde vor fi salvate
surseleicoduldeocteialproiectului,etc.
ndrumardelaborator
Fig.7.b.CreareaunuiproiectJavanEclipse
Fig.8.ProiectnoudeschisnworkbenchulplatformeiEclipse
LimbajuldeprogramareJava
2.3.Creareapachetelor
Clasele unui proiect Java sunt grupate, de regul, n pachete. Criteriile de grupare in de
funciilepecarelendeplinescaceleclasenproiect(lucrulcufiiere,accesullabazededate,
comunicaia prin reea, etc.). De asemenea, pachetele asigur i controlul numelor i al
vizibilitii.Fizic,unpachetesteundirectoralproiectului.
Accesul la clasele dintrun pachet se face prin utilizarea instruciunii import la nceputul
codului surs. Instruciunea import trebuie s conin numele pachetelor i ale claselor care
vorfifolositencodulsurs.
Crearea unui pachet n Eclipse se realizeaz prin clic dreapta pe numele proiectului, iar din
meniul care apare se alege NewPackage. n fereastra ce se deschide se specific numele
nouluipachetului,dupcareseapasbutonulFinish.
Fig.9.Crearepachetuluiprogramprincipal
Un pachet poate conine alte pachete, care, la rndul lor, pot conine alte pachete. n cazul
acestaseefectueazclicpenumelepachetuluincaresefaceadugarea,dupcareseparcurge
aceleaietapeprezentatemaisus.
2.4.Creareaclaselor
Clasele aparin pachetelor, prin urmare adugarea se va face prin clic dreapta pe numele
pachetului; se selecteaz NewClass. n fereastra care se deschide se completeaz numele
claseiiseselecteazopiunilepentruaceasta.
ndrumardelaborator
Fig.10.Creareauneiclase
Dac se dorete ca clasa creat sconin metoda main(), atunci se bifeaz opiunea public
staticvoidmain(String[]args)dinseciuneaWhichmethodstubswouldyouliketocreate?.Se
recomandcamodificatoruldeaccesalclaselorsfiecelpublic(seciuneaModifiers).
DupapsareabutonuluiFinish,estedeschisautomatfiierulceconinedeclaraianoiiclase,
aacumsevedenfigura11.
10
LimbajuldeprogramareJava
Fig.11.ClasageneratautomatdeEclipse
2.5.AplicaiaHelloWorld
PentruafiareamesajuluiHelloWorlddinJava!sefoloseteinstruciunea:
Aceast instruciune trebuie plasat n interiorul metodei main() (care este echivalentul
programuluiprincipal:execuiaprogramuluincepecuaceastmetod).
Fig.12.AplicaiaHelloWorld
11
ndrumardelaborator
Lansarea n execuie a programului se poate face din meniul RunRun, prin combinaia de
tasteCTRL+F11sauprinapsareabutonului dinbaradeinstrumente.
nainte de lansarea n execuie a unui program este recomandabil s salvai fiierele pe care
leaimodificat.Oricum,mediulEclipsevvacerepermisiuneadeasalvaacestefiierenainte
delansareanexecuie.
Rezultatul rulrii programului este afiat n fereastra Console, aflat n parte de jos a
workbenchului.
Fig.13.RezultatelerulriisuntafiatenfereastraConsole
12
LimbajuldeprogramareJava
3.StructuraunuiprogramJava
3.1.Definiiaclasei
3.2.Definiiametodelor
3.3.Instruciuni
13
ndrumardelaborator
14
LimbajuldeprogramareJava
LABORATORUL2
4.Tipuridedateprimitive
nlimbajulJavaexistdoucategoriidetipuridedate:
tipuriprimitive:tipurilenumerice,tipulcaracteritipullogic;
tipulreferin:reineoreferin(adres)ctreoinstanauneiclase(obiect).
LimbajulJavadefineteopttipuridedateprimitive.Acesteasepotclasifican:
tipurintregi: byte,short,intilong;
tipurireale:floatidouble;
tipulcaracter:char;
tipullogic:boolean.
4.1.Tipurintregi
Acestetipurisuntreprezentatenmemoriecanumerecusemn(reprezentarencomplement
fade2).LimbajulJavanuofertipurintregifrsemn.
Tipul byte este folosit, de obicei, pentru efectuarea unor operaii la nivel de bit sau la
prelucrarealanivelsczut(lowlevel)afluxurilor(streamfiiere,socketuri,etc.).
Tipulshortestedeseorifolositnlocultipuluiint,maialesdinmotivedeoptimizareautilizrii
memoriei.
Tipul int este cel mai des folosit, avnd avantajul c are o acoperire suficient de mare, iar
numrul de octei folosii pentru memorare este de dou ori mai mic dect tipul urmtor
(long).
Tipul long este mai rar folosit, nlocuind tipul int doar n cazul depirii acoperirii. Literalii
ntregidetiplongvoraveasufixulL;deexemplu:long l = 23568912457801112L.
n mod implicit, literalii ntregi sunt de tip int. Java suport utilizarea literalilor ntregi
reprezentaiinbazeledenumeraiehexazecimalioctal.
15
ndrumardelaborator
Utilizarealiteralilornbazeledenumeraiehexazecimalioctal
4.2.Tipurireale
Exist dou tipuri de numere reale reprezentate n virgul mobil: float (simpl precizie) i
double(dublprecizie).Numereleiraionale(cumarfisau2)sunttrunchiate,putnduse
lucradoarcuoaproximarealor.
Esterecomandatfolosireatipului floatnumaicndvitezalacaretrebuiesrulezeaplicaia
trebuiesfiefoartemare(saumemoriafolositdeaceastatrebuiesfiefoartemic).
// declarare de float
float example_float = 5.505F;
Caracteristicilecelordoutipuriesteprezentatntabelulurmtor:
4.3.Tipulcaracter
UtilizareacaracterelornJavasefacecuajutorultipuluichar.
TipulcaracterutilizeazpentrustocaredoiocteicereincodulUnicodealcaracterului.
16
LimbajuldeprogramareJava
Avantajul folosirii standardului Unicode este acela c acoperirea este de 65535 de caractere
(valorilelimitfiind \u0000i \uFFFF),fadecodulASCII(AmericanStandardCodesfor
InformationInterchange)carearedoar128decaracteresaudeASCIIextinscu256decaractere.
Dei se poate utiliza orice caracter, afiarea acestuia depinde de sistemul de operare
(caractereleUnicodenecunoscutesistemuluideoperarenuvorputeafiafiate).
Literaliidetipcaractersuntscriintreapostrofuriipotconinesecveneescape(secvenede
caracterecarencepcu\).
Declarareauneivariabiledetipcaractercuiniializare:
char ch = '\u1111';
Urmtorultabelprezintcelemaifolositesecveneescape:
4.4.Tipullogic
Tipullogicpermitememorareadoaradouvalori:adevrat(true)ifals(false).
Desemnareaacestuitip,nlimbajulJava,sefacecuajutorulcuvntuluicheieboolean.
Tipul boolean este folosit, n prinicpal, pentru evaluarea condiiilor logice. Introducerea sa a
eliminatneclaritiledinlimabjeleCiC++,undeevaluareacondiiilorsefceafolosindntregi.
Nusepoatefaceconversientretipurilebooleanicelentregi.
17
ndrumardelaborator
4.5.Conversiintretipurilededateprimitive
Tabelulurmtorsintetizeazconversiilepermisentretipurilededateprimitive:
4.6.Variabile
Canoricelimbajdeprogramare,tipurilededatesuntutilizate,nprincipal,pentrudescrierea
variabileloristabilescfeluldatelorpecarelepotmemora,cantitateadememorienecesari
valorilecelepotfiasociate.
Maiconcret,ovariabilesteunspaiudememoriedestinatstocriiuneivalorintrunformat
corespunztortipuluideclaraticreiaiseataeazoetichetnumelevariabilei.Variabilele
ipotschimbavaloareaoricndpeparcursulprogramului.
Pentrudeclarareavariabilelor,limbajulJavautilizeazsintaxa:
Deexemplu,sepoatescrie:
int variabla;
boolean bool;
Semaipotfaceideclarrideforma:
daraceastmodalitatenuesteindicat.
Deseoriesterecomandatcavariabiladeclaratsconiniovaloareiniial:
int v1 = 10;
18
LimbajuldeprogramareJava
Astfel,sepoatespune,pescurt,cdefinireauneivariabilereprezintdeclarareaei,lacarese
adaugoperaiadeiniializare.
Deasemenea,numeleuneivariabilenupoatencepecuocifr;elepotncepecuoriceliter
saucaracterulunderscore(_).
4.7.Constante
Definirea constantelor n Java se face prefixnd definirea unei variabile cu final. Folosirea
constantelor este indicat cnd programatorul vrea ca valoarea unei variabile s nu poat fi
schimbat sau cnd se dorete stabilirea unor aliasuri. Imaginaiv c ntrun program este
necesar folosirea de mai multe ori a constantei matematice . Acest lucru se poate face
elegant fcnd o declarare de forma (exemplul este pur didactic; n practic, clasa
java.lang.Mathpoateoferivaloareaacesteiconstante):
4.8.Operatori
ntabelulurmtorsuntprezentaitoioperatorii,nordineaprecedeneilor.
Operatorul Tipuldeasociativitate
[] . () (apel de metod) delastngaladreapta
! ~ ++ -- +(unar) (unar) () (cast) new deladreaptalastnga
* / % delastngaladreapta
+ - delastngaladreapta
<< >> >>> delastngaladreapta
< <= > >= instanceof delastngaladreapta
== != delastngaladreapta
& delastngaladreapta
^ delastngaladreapta
| delastngaladreapta
&& delastngaladreapta
19
ndrumardelaborator
Operatorul Tipuldeasociativitate
|| delastngaladreapta
?: delastngaladreapta
= += -= *= /= %= &= |= ^= <<= >>= >>>= deladreaptalastnga
4.9.Aplicaiecuvariabileioperatori
VariabileOperatori.java
// operatori aritmetici
int c = a + b;
System.out.println("a+b=" + c);
c = a - b;
System.out.println("b-a=" + c);
System.out.println("b%a=" + b % a);
// incrementare decrementare
b = a++;/*
* i se transmite valoarea variabilei a(3) variabilei b(b=3)
* si apoi variabila a este incrementata(a=4)
*/
System.out.println("a=" + a + "\tb=" + b);
b = ++a;/*
* se incrementeza valoarea variabilei a(++a=5)si apoi i se
* transmite noua valoare variabilei b(b=5)
*/
System.out.println("a=" + a + "\tb=" + b);
b = a--;
System.out.println("a=" + a + "\tb=" + b);
b = --a;
System.out.println("a=" + a + "\tb=" + b);
// operatori relationali
if (a > b)
System.out.println("a este mai mare de decat b");
else
if (a < b)
System.out.println("a este mai mic decat b");
else
System.out.println("a si b sunt egale");
20
LimbajuldeprogramareJava
// operatorul ternar
double x = 1;
double y = 4;
char d = x < y ? 'x' : 'y';
System.out.println("dintre x si y mai mic este: " + d);
// Math
double z = Math.sqrt(y);
System.out.println("radical din x este:" + z);
double u = Math.pow(y, y);
System.out.println("x la puterea x este" + u);
// casts
double t = 9.9999;
int tt = (int) t;
System.out.println("t=" + t + "\ttt=" + tt);
double r = Math.round(t);
System.out.println("t rotunjit este " + r);
}
}
5.CitireadelatastaturclasaScanner
Permiteformatareaunordateprimitepeunfluxdeintrare.
Pentru a avea acces la clasa Scanner, aceasta trebuie importat n proiect folosind
instruciuneaimport:
import java.util.Scanner;
PentruacitidatedelatastaturtrebuieconstruitunobiectdetipScannercearecaargument
alconstructoruluifluxulSystem.in:
ncontinuaresepotutilizametodeledefinitenclasa Scannerpentrupreluareadatelordela
tastatur.Deexemplu:
datecevorfimemoratentrovariabilString
datecevorfimemoratentrovariabildetipntreg
int ani = tastatura.nextInt();
Maimultedetalii:http://java.sun.com/javase/6/docs/api/java/util/Scanner.html.
21
ndrumardelaborator
5.1.Introducereadatelordelatastaturiafiarealor
IntrariIesiri.java
import java.util.Scanner;
tastatura.nextLine();
System.out.print("str=");
String str = tastatura.nextLine();
}
}
22
LimbajuldeprogramareJava
LABORATORUL3
6.Structuridecontrol
6.1.Instruciunidedecizie/selecie
6.1.1.Instruciuneaif
Instruciunea if cere mainii virtuale Java s evalueze o expresie (condiie) la o valoare de
adevr. Dac expresia este adevrat, atunci sunt executate una sau mai multe instruciuni
aflatenbloculif.Dacexpresianuesteadevrat,instruciunilerespectivesuntomise.
Expresiaevaluatdintroinstruciuneifsenumeteexpresiecondiional.
Formatgeneral:
if (<conditie>)
[<instructiune_adevarat>];
Schemlogic:
Exemplu:
int m=3;
int n=4;
if(m>n)
System.out.println("m");
if(n>=m)
System.out.println("n");
23
ndrumardelaborator
6.1.1.1.Clauzaelse
Aceast clauz aparine instruciunii if i conine una sau mai multe instruciuni care sunt
executateatuncicndexpresiacondiionaldininstruciuneaifestefals.
Formatgeneral:
if (<conditie>)
[<instructiune_adevarat>];
[else
[<instructiune_fals>];]
Schemlogic:
Exemplu:
int m=3;
int n=4;
if(m>n)
System.out.println("m");
else
System.out.println("n");
6.1.1.2.Clauzaelse if
Formatgeneral:
if (<conditie_1>)
<instructiune_adevarat_1>;
else if (<conditie_2>)
<instructiune_adevarat_2>;
else
<instructiune_fals>;
24
LimbajuldeprogramareJava
Exemplu:
int m=3;
int n=4;
if(m>n)
System.out.println("m");
else if(m==n)
System.out.println("m=n");
else
System.out.println("n");
6.1.1.3.Instruciuniifimbricate
Existsituaiicndtrebuieluatonoudeciziedacprimacondiieesteadevrat.
Formatgeneral:
if (<conditie>)
if (<conditie_i>)
<instructiune_adevarat_i>;
else
<instructiune_fals_i>;
else
<instructiune_fals>;
Exemplu:
int m=3;
int n=4;
if(m>0 && n>0)
if(m==n)
System.out.println("m=n");
else
System.out.println("m!=n");
else
System.out.println("m si n sunt negative");
1.dupcondiienusepune;
2.dacblocurileifsauelseconinmaimultdeoinstruciune,atunciestenecesarca
instruciunile s fie ncadrate de acolade. Se recomand utilizarea acoladelor
ntotdeauna,indiferentdenumruldeinstruciunidinblocurileifielse.
25
ndrumardelaborator
6.1.1.4.Utilizareainstruciuniiif
EcuatiaDeGradulDoi.java
import java.util.*;
System.out.print("termenul liber:");
// memorarea termenului liber in variabila c
double c = valoare.nextDouble();
if (a == 0 && b == 0 && c == 0)
{
System.out.println("Ecuatie nedeterminata !");
}
else
{
if (a == 0 && b == 0)
{
System.out.println("Ecuatie imposibila !");
}
else
{
if (a == 0)
{
System.out.println("Ecuatie de grad I");
System.out.println("Solutia este:" + -c / b);
}
else
{
double delta = b * b - 4 * a * c;
if (delta < 0)
{
System.out.println("Radacini complexe");
26
LimbajuldeprogramareJava
6.1.2.Instruciuneaswitch
Osoluiealternativlafolosireauneilungiseriideclauzeif...elseoreprezintfolosireaunei
instruciunidecontrolswitch,cunoscutisubnumeledeinstruciuneaswitch...case.
Instruciunea switch cere mainii Java s compare o expresie cu mai multe valori date,
coninute ntro etichet case. Dac valorile se potrivesc, se execut instruciunile din blocul
case.
27
ndrumardelaborator
Formatgeneral:
switch(<expresie>)
{
case(<valoare_1>): <instructiuni_1>;
[break;]
case(<valoare_2>): <instructiuni_2>;
[break;]
:
:
case(<valoare_n>): <instructiuni_n>;
[break;]
default: <instructiuni>;
[break;]
}
Exemplu:
int optiune=10;
switch (optiune)
{
case5: System.out.println("5");
break;
case10: System.out.println("10");
break;
default: System.out.println("Nici o potrivire");
}
6.1.2.1.Instruciuniswitchimbricate
O instruciune switch imbricat este o instruciune switch inserat ntro clauz case sau
defaultauneialteinstruciuniswitch.
28
LimbajuldeprogramareJava
6.2.Instruciuniiterative
AcesttipdeinstruciunicermainiivirtualeJavasexecuteunasaumaimulteinstruciuni,n
modrepetat,atttimpctestendeplinitocondiie.
nJavaexist3tipurideinstruciuniiterative:
for:instruciuneiterativcutestiniial,cunumrcunoscutdepai;
while:instruciuneiterativcutestiniial,cunumrnecunoscutdepai;
dowhile:instruciuneiterativcutestfinal,cunumrnecunoscutdepai.
6.2.1.Instruciuneafor
Instruciunea forseutilizeazatuncicndsecunoatesausepoateantecalculanumrulde
repetriainstruciunii/bloculuideinstruciuniicorpulinstruciuniifor.
Formatgeneral:
for ([<initializare>];[<conditie_continuare>];[<modificare_stare>])
[<instructiune>];
Schemlogic:
Exemplu:
29
ndrumardelaborator
Moduldelucru:
Ciclu Instruciune/operaie
i=0
1 test0<=2(A)
afiarei=0
i=1
2 test1<=2(A)
afiarei=1
i=2
3 test2<=2(A)
afiarei=2
i=3
4 test3<=2(F)setermininstruciuneafor
Expresiideiniializarealternative:
int i;
for(i=0;i<=2;i++)
{
System.out.println("i="+i);
}
int i=0;
for(;i<=2;i++)
{
System.out.println("i="+i);
}
1. Instruciunea forare,nparanteze,treiexpresiiseparateprincaracterul;
toate expresiile sunt opionale, dar caracterele punct i virgul i parantezele
suntobligatorii.
2. Dup parantezele instruciunii for nu se pune ;. Caracterul ; n aceast
poziie are semnificaia instruciunii vide, adic instruciunea care nu face
nimic.Practicaceastinstruciunevidsevaexecutanciclu.
6.2.1.1.Cicluriforimbricate
Se poate de vorbi despre cicluri for imbricate atunci cnd se plaseaz unul sau mai multe
cicluriforninteriorulaltuiciclufor.
Ciclulforimbricatestenumitcicluinterniesteplasatninteriorulunuicicluextern.
Defiecaredatcndseparcurgeciclulforextern,seexecut,complet,iciclulforintern.
30
LimbajuldeprogramareJava
Exemplu:
for(int i=0;i<3;i++)
{
System.out.print("\ni="+i);
for(int j=0;j<=2;j++)
{
System.out.print("\tj="+j);
}
}
Rezultatulexecuiei:
6.2.1.2.Utilizareainstruciuniifor
ExempluFor.java
{
int suma = 0;
for (x = 1; x <= a; x++)
suma += x; // acelasi lucru cu: suma=suma+x;
System.out.println("Suma celor " + a + " numere este " + suma);
}
{
int suma = 0;
for (x = 1; x <= a; x += 2)
suma += x;
31
ndrumardelaborator
{
int suma = 0;
for (x = 0; x <= a; x += 2)
suma += x;
System.out.println("Suma numerelor pare pana la " + a +
" este " + suma);
}
/*
* realizarea unui ciclu for imbricat pentru a verifica
* daca este indeplinita conditia ca numarul prim
* sa fie divizibil doar cu 1 si cu el insusi
*/
LimbajuldeprogramareJava
// varianta 3
{
System.out.print("\nNumerele prime de la 1 la " + a +
" (v3)sunt:");
if (numarPrim)
{
System.out.print("\t" + i);
}
}
}
{
System.out.print("\nNumerele de la 1 la " + a +
" divizibile cu " + b + " sunt: ");
for (int i = 1; i <= a; i++)
{
if (i % b == 0)
System.out.print("\t" + i);
}
}
}
}
33
ndrumardelaborator
34
LimbajuldeprogramareJava
LABORATORUL4
6.2.2.Instruciuneawhile
Ciclul while cere mainii virtuale Java s execute una sau mai multe instruciuni, din corpul
ciclului,atttimpctoexpresiecondiionalesteadevrat.
Formatgeneral:
while (<conditie_continuare>)
[<instructiune>];
Schemlogic:
Exemplu:
int i=0;
while (i<=2)
{
System.out.println("i="+i);
i++;
}
Atuncicndntlneteunciclu whilenprogram,Javaevalueazexpresiacondiional.Dac
aceast condiie este evaluat ca fals, Java sare peste corpul instruciunii while i continu
execuiacuprimainstruciunecareaparenprogram,dupcorpulinstruciuniiwhile.
Dac una din instruciunile aflate n corpul instruciunii while este break, Java ntrerupe
execuiainstruciuniiwhileicontinucuprimainstruciunededupwhile.
35
ndrumardelaborator
6.2.2.1.Utilizareainstruciuniiwhile
ExempluWhile.java
import java.util.Scanner;
/*
* declararea unei variabile(returnat)pentru memorarea valorii
* returnate in fiecare an
*/
double returnat = 0;
/*
* declararea unei variabile(luni)pentru memorarea timpului scurs
* de la acordarea creditului pana la lichidarea creditului
*/
double luni = 0;
while (returnat < retragere)
{
/*
* declararea unei variabile pentru memorarea valorii dobanzii,
* valoare ce este calculata in fiecare an in functie de
* suma ramasa de rambursat
*/
double dobandaP = ((retragere - returnat) * dobanda) / 100;
36
LimbajuldeprogramareJava
6.2.3.Instruciuneado..while
Ciclul do..while cere mainii virtuale Java s execute una sau mai multe instruciuni, din
corpulciclului,atttimpctoexpresiecondiionalesteadevrat.
Formatgeneral:
do {
[<secventa_de_instructiuni>;]
} while (<conditie_de_continuare>);
Schemlogic:
Ciclul do..while este format din ase componente: cuvntul cheie do, corpul ciclului
do..while, definit deacolade dedeschiderei nchidere, una sau mai multe instruciuni din
37
ndrumardelaborator
Exemplu:
int i=0;
do {
System.out.println("i="+i);
i++;
} while(i<=2);
Instruciuniledintrunciclu do..while(aceastafiindoinstruciunedeciclarecutest
final)suntexecutatecelpuinodat,chiardacexpresiacondiionalestefals.
6.3.Instruciunidesalt
Acesteinstruciunitransfercontrolulexecuieintroaltparteaprogramului.
6.3.1.Instruciuneabreak
AceastinstruciuneceremainiivirtualeJavasiasdintrunblocdecoddefinitdeacoladede
deschidereinchidere.
Exemplu:
for(int i=2;i<=5;i++)
{
if(i==4)
break;
System.out.println("i="+i);
}
Rezultatulrulrii:
i=2
i=3
n momentul n care condiia din if este ndeplinit (i=4), se execut instruciunea break i
chiardaccondiiadinfor(i<=5)esteadevratciclulsencheie.
38
LimbajuldeprogramareJava
6.3.2.Instruciuneacontinue
Instruciunea continue este folosit n corpul unui ciclu pentru a cere mainii virtuale Java s
renunelaexecuiaiteraieicurenteistreaclaurmtoarea.
Exemplu:
for(int i=2;i<=5;i++)
{
System.out.println("Inainte de continue i="+i);
if(i==4)
continue;
Rezultatulrulrii:
6.3.3.Instruciuneareturn
Instruciunea return este folosit n metode pentru a transfera napoi controlul execuiei la
instruciuneacareaapelatmetoda.Instruciuneapoatereturnaovaloare,daracestlucrunu
esteobligatoriu.
39
ndrumardelaborator
6.4.Utilizareainstruciunilordo..while,switch,breakicontinue
ExDoWhileSwitch.java
import java.util.Scanner;
int a, b, c;
do {
System.out.print("Introdu un numar natural: ");
a = n.nextInt();
System.out.print("Introdu un divizor: ");
b = n.nextInt();
} while (a <= 0 && b <= 0);
do {
// afisarea meniului
System.out.println("\nMENIU:");
System.out.println("1.Afisarea sumei primelor " + a
+ "numere naturale");
System.out.println("2.Afisarea sumei numerelor impare de la 1 la"
+ a);
System.out.println("3.Afisarea sumei numerelor pare de la 1 la"
+ a);
System.out.println("4.Afisarea primelor numere prime de la 1 la"
+ a);
System.out.println("5.Afisarea numerelor de la 1 la " + a
+ "divizibile cu" + b);
System.out.println("6.IESIRE DIN PROGRAM");
switch (c)
{
case 1:
int suma = 0;
for (int x = 1; x <= a; x++)
suma += x;
System.out.println("Suma primelor " + a +
" numere naturale este: " + suma);
break;
case 2:
40
LimbajuldeprogramareJava
int sumaimp = 0;
for (int x = 1; x <= a; x += 2)
sumaimp += x;
System.out.println("Suma numerelor impare de la 1 la " + a +
" este: " + sumaimp);
break;
case 3:
int sumap = 0;
for (int x = 0; x <= a; x += 2)
sumap += x;
System.out.println("Suma numerelor pare de la 1 la " + a +
" este: " + sumap);
break;
case 4:
System.out.print("Numerele prime de la 1 la " + a + " sunt: ");
for (int i = 1; i <= a; i++)
{
boolean numarPrim = true;
for (int j = 2; j < i/2; j++)
{
if (i % j == 0)
{
numarPrim = false;
break;
}
}
if (numarPrim)
{
System.out.print("\t" + i);
}
}
break;
case 5:
System.out.print("Numerele de la 1 la " + a +
" divizibile cu " + b + " sunt:\n");
for (int i = 1; i <= a; i++)
if (i % b == 0)
{
System.out.print("\t");
System.out.print(i);
}
break;
case 6:
System.out.println("Sfarsit de program");
break;
default:
41
ndrumardelaborator
} while (c != 6);
}
}
42
LimbajuldeprogramareJava
LABORATORUL5
7.Tablouri
Rezervareamemorieipentrustocareauneidateesteooperaiefoartesimpl:sefoloseteun
tipdedateiunnumepentruadeclaraovariabil.
Spresupunemctrebuierezervatmemoriepentruastoca100deelementedeunanumittip.
Laprimavederenuparecomplicat:trebuiedeclarate100devariabile.Acestlucrupresupune
gsirea a 100 de nume sugestive i unice, o sarcin nu tocmai uoar, iar managementul
variabilelor ar fi un comar. Acest lucru poate fi simplificat prin declararea unui tablou. Un
tablouarenevoiedeunsingurnumeunicisugestiv,carepoatefiapoifolositpentrureferirea
tuturorcelor100deelementededatesauorictesuntnecesarenprogram.
Un tablou este o colecie de variabile de acelai tip de date, creia i este asociat un nume.
Fiecare variabil din colecie este numit element al tabloului. Un element al tabloului este
identificatprintrocombinaientrenumeletablouluiiunindexunic.
Unindexesteunntregcuprinsntrezeroinumrulmaximdeelementealetabloului,minus
unu.Indexulestespecificatntreparantezedrepte,ndreaptanumeluivariabileitablou.
7.1.TablouriunidimensionaleVectori
7.1.1.Declarareavariabileitablou
Declarareauneivariabiledetiptablouunidimensionalsefaceutilizndsintaxa:
sau
<tip_elemente>[] <identificator_tablou>;
unde:
<tip_elemente>reprezinttipuldedatealelementelorvectorului
<identificator_tablou>estenumelevectorului,caretrebuiesfieunicisugestiv
[] specificfaptulcestedeclaratunvector,inuosimplvariabil
7.1.2.Instanierea
Instanierea definete procesul de creare a unui obiect, respectiv alocarea memoriei pentru
acestaiefectuareatuturoriniializrilornecesare.
43
ndrumardelaborator
Tipul tablou este un tip de date referin, prin urmare trebuie utilizat instanierea
pentrucreareaunuiobiectdetiptablou.
Memoriaestealocatdinamic,printrunprocesntreietape:
1. Declarareauneivariabilereferin;
2. Alocareamemoriei;
3. Asocierealocaieidememorierezervatcuvariabilareferin.
Declarareaiinstaniereaunuivectorpotfifcutesimultan:
Operatorul newceremainiivirtualeJavasrezervememoriepentrustocareaa6valorintregi
prinnew int[6].
Operatorul new returneaz adresa primului element. Celelalte elemente sunt dispuse, n
memorie,unalngcealalt,secvenial,dupprimulelement.
Adresareturnatestememoratnvariabilareferin.
1.Cndsedeclaruntablousespecificntotdeaunanumruldeelemente.
2.Primulindexaltablouluieste0,inu1,iarultimulelementaltablouluiareindexul
numruldeelemente1,inunumruldeelemente.
7.1.3.Iniializarea
Reprezintprocesulprincareuneivariabileisedovaloare.
Lainiializareaunuivectorvalorileiniialetrebuieinclusentreacoladeiseparateprinvirgule.
int note[]={10,9,10,8,9};
Nu este nevoie s se specifice explicit dimensiunea tabloului. Numrul de valori iniiale este
folositpentruastabilidimensiuneaacestuia.
44
LimbajuldeprogramareJava
7.2.TablourimultidimensionaleMatrice
Tablourilepotaveamaimultedimensiuni.Acesteasuntnumitetablourimultidimensionalesau
matrice.
7.2.1.Creareaunuitabloumultidimensional
Declarareauneimatricesepoatefacefolosindoperatorul new,ntrunmodasemntorcucel
folositpentrutablouriunidimensionale.Exempluurmtorilustreazaceasttehnic.
Fiecareperechedeparantezedreptedindeclarareauneimatricereprezintodimensiune.
Indexul din stnga
Fig.14.Elementeletablourilormultidimensionale
7.2.2.Atribuireavalorilorctreelementelematricei
Unelementalunuitablouestefolositntroexpresielafelcaiovariabil.Singuradiferen
dintreovariabiliunelementalunuitablouestefaptulcpentruelementultablouluitrebuie
specificatattnumeletablouluictiindexulelementului.
Sepoateatribuiovaloareunuielementaltablouluifolosindoperatoruldeatribuire.
note[0]=9;
Valoarea atribuit unui element al unui tablou poate fi folosit ntro expresie la fel ca i
valoareauneivariabile.
note[1]=note[0];
Acelaiformatestefolositipentrutablourilecefolosescdousaumaimultedimensiuni:
note[1][1]=note[0][1];
45
ndrumardelaborator
7.2.3.Proprietilength
Tipul tablou, fiind un tip referin, are proprieti ce pot fi utilizate de programator. Cea mai
utilesteproprietatealength,carereturneaznumruldeelementealtabloului.
Exemplu:
int note[]={10,9,10,8,9};
System.out.print("Notele sunt:");
for(int i=0;i<note.length;i++)
{
System.out.print(" " + note[i]);
}
7.3.ClasaArrays
Clasa Arrays definete un numr mare de metode utile n lucrul cu tablouri. Cele mai des
utilizate sunt: equals(), fill(), sort(), binarySearch(). Toate aceste metode sunt
statice,decinudepinddeinstane,putndusefolosiprinintermediulnumeluiclasei(Arrays).
Clasa Arrays se afl n pachetul java.util, deci pentru a o putea folosi trebuie importat
acestpachet.
7.3.1.Metodaequals()
Aceastmetodestefolositpentruacomparaelementeleunuitablou.
Doutablourisunttransmisecaparametriimetodei equals(),carestabiletedactablourile
suntidentice(elementeleconinutesuntegale).ncazafirmativ,metodaequals()returneaz
valoareabooleanatrue,altfelreturneazvaloareabooleanafalse.
ExempluEquals.java
import java.util.*;
46
LimbajuldeprogramareJava
if (Arrays.equals(note1, note2))
System.out.println("Notele sunt egale!");
else
System.out.println("Notele nu sunt egale!");
}
}
Metodaequals()esteapelatprinreferireaclaseiArrays.Numeleclaseitrebuiesprecead
numele metodei folosit n program, iar numele clasei i numele metodei trebuie s fie
separateprinoperatorulpunct.
7.3.2.Metodafill()
Sefolosetecndtrebuieatribuitevaloriiniialeelementelorunuitablou.
nexemplulurmtorsuntprezentatedouversiunialemetodei:
Primaversiunearenevoiededouargumente:numeletablouluii valoareacarevafi
atribuit elementelor matricei. Este important ca tipul de date al acestei valori s fie
compatibilcucelalelementelortabloului.
A doua versiune are nevoie de patru argumente: numele tabloului, indexul primului
elementacruivaloarevafischimbat,indexulultimuluielementalcruivaloarevafi
schimbativaloareacevafiatribuitelementelornintervalulspecificat.
ExempluFill.java
import java.util.*;
Arrays.fill(note, 0);
ndrumardelaborator
7.3.3.Metodasort()
Sorteaz cresctor elementele unui tablou folosind algoritmul QuickSort. Dac elementele
tablouluisunttipurireferin(clase),acesteatrebuiesimplementezeinterfaaComparable.
Metodaprimeteunsingurargumentvariabilatablou.
ExempluSort.java
import java.util.*;
Arrays.sort(note);
7.3.4.MetodabinarySearch()
Aceastmetodcautunanumitelementntruntablou.
Pentruafolosiaceastmetodtabloultrebuiesfiesortatnaintedeasefacecutarea.
Metodareturneazovaloarentreag.Acestapoatefiunnumrpozitivsauunnumrnegativ.
Un numr pozitiv reprezint indexul elementului care conine valoarea cutat. Un numr
negativnseamncvaloareacutatnuafostgsitntablou.
48
LimbajuldeprogramareJava
ExempluBinarySearch.java
import java.util.*;
Arrays.sort(note);
Rezultatulrulrii:
2
-10
7.3.5.Metodaarraycopy()
Metoda arraycopy() se utilizeaz pentru a copia elementele unui tablou n alt tablou sau
pentruacopiaopartedinelementeleuneitablounalttablou.
AceastmetodstaticfacepartedinclasaSystemiare5argumente:numeletablouluisurs,
indexul elementului din tabloul surs de unde ncepe copierea, numele tabloului destinaie,
indexulelementuluidintablouldestinaiedeundencepecopiereainumruldeelementece
vorficopiate.
ExempluArrayCopy.java
import java.util.*;
Arrays.fill(note2, 0);
49
ndrumardelaborator
Rezultatulrulrii:
::0::1::7::3::5::0::0::0::0
7.4.Aplicaiecuvectori
Vectori.java
import java.util.*;
System.out.println("Ordonare notelor");
// copierea vectorilor
int notaCopie1[] = nota;
50
LimbajuldeprogramareJava
int[] mat1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] mat2 = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
/*
* se copieaza mat1 incepand cu indexul 1(2 elemente) in mat2
* la pozitia index5 a tabloului
* ( arraycopy(from,formindex,to,to index,count) )
*/
System.arraycopy(mat1, 1, mat2, 5, 2);
System.out.println("Noile elementele ale matricii mat2 sunt:");
afisare(mat2);
}
51
ndrumardelaborator
7.5.Aplicaiecuvectori:Loteria
Loteria.java
import java.util.*;
// sau
// for(int r=0;r<extras.length;r++)
// System.out.println(extras[r]);
}
}
52
LimbajuldeprogramareJava
7.6.Aplicaiecuomatricebidimensional
MatriceBi.java
53
ndrumardelaborator
54
LimbajuldeprogramareJava
LABORATORUL6
8.iruridecaractere
iruriledecaracterepotfireprezentatedetipurileStringiStringBuffer.
8.1.ClasaString
ListatuturorproprietilorimetodeloraleclaseiStringsegsetelaadresa:
http://java.sun.com/javase/6/docs/api/java/lang/String.html.
ExemplededeclarareiinstaniereaobiectelordetipString
System.out.println(sir1);
System.out.println(sir2);
System.out.println(sir3);
ExempluString.java
55
ndrumardelaborator
// afisarea sirurilor s1 si s2
System.out.println(s1);
System.out.println(s2);
// compararea sirurilor
int comparare = s1.compareTo(s2);
if (comparare < 0)
{
System.out.println("Sirul \"" + s1 + "\" este mai mic decat sirul"
+ " \"" + s2 + "\"");
}
else
{
if (comparare > 0)
{
System.out.println("Sirul \"" + s2 + "\" este mai mare decat"
+ " sirul \"" + s2 + "\"");
}
else
{
System.out.println("Sirul \"" + s1 + "\" este egal cu sirul \""
+ s2 + "\"");
}
}
if (s1 == s2)
System.out.println("Sirurile sunt egale!");
else
System.out.println("Sirurile sunt diferite!");
System.out.println(s1 == s2);
if (ss1.equals(ss2))
{
System.out.println("Sirul \"" + ss1 + "\" este egal cu sirul \""
+ ss2 + "\"");
}
else
{
System.out.println("Sirul \"" + ss1 + "\" nu este egal cu sirul"
+ " \"" + ss2 + "\"");
}
// concatenarea sirurilor
// sirul s1 este format din concatenarea valorii sale initiale cu
// cele ale sirului s2
s1 += s2;
System.out.println(s1);
56
LimbajuldeprogramareJava
String s4 = "unsprazece";
ndrumardelaborator
char[] textchar = {'A', 'c', 'e', 's', 't', 'a', ' ', 'e', 's', 't',
'e', ' ', 'u', 'n', ' ', 's', 'i', 'r', '.' };
58
LimbajuldeprogramareJava
int siCount = 0;
int deCount = 0;
int index;
System.out.println("String-ul este:");
System.out.println(propozitie);
59
ndrumardelaborator
8.2.ClasaStringBuffer
ListatuturorproprietilorimetodeloraleclaseiStringBuffersegsetelaadresa:
http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html.
ExempluStringBuffer.java
System.out.println(sb1);
System.out.println(sb2);
System.out.println(sb3);
LimbajuldeprogramareJava
// afisarea lui
System.out.println("Sirul este: " + sir);
61
ndrumardelaborator
62
LimbajuldeprogramareJava
LABORATORUL7
9.Claseiprogramareorientatobiect
Utilizareaclaselornscriereadeprogramesencadreaznparadigmadeprogramareorientat
obiect(POOOOPObjectOrientedProgramming),carepresupunecreareunortipuridedate
complexecareseaseamn,nmulteaspecte,cuobiectereale.Astfel,acestetipuriconinatt
dateleutile,ctimetodeledeoperareasupraacestora.
Oclasvaconineproprieti(atribute)imetode(comportamente),ivadescrie,ntrunmod
abstract,naturaobiectuluicesedoreteafitranspusnprogram.
9.1.Termeniutilizainprogramareaorientatobiect
O clas este un tip de date ce ncapsuleaz att datele utile ct i modul de operare asupra
acestora.
Instaniereaesteprocesulprincareseobineunobiectcarearepropriasalocaiedememorie
ipropriulcodexecutabil.Unobiectesteoinstanauneiclase,adicesteconstruitpebaza
declaraiilordinclas.Utilizndoanalogie,oclasesteunplanaluneicase(practicundesen),
iarobiectul,sauinstana,estecasaconstruit.
Motenirea este mecanismul prin care se pot obine noi clase din clase deja existente. Noile
clasevormotenicaracteristici(proprietiimetode)aleclaseidebaz(superclasei).
Operaiaprincareseobineoclasnoudinunaexistentpoartdenumireadederivare.
Polimorfismulreprezintmecanismulcarepermiteaccesareaproprietilorimetodelorunui
obiectdeunanumittipprinintermediulunortipuridedatedincareacestaafostobinutprin
derivare.
9.2.Definiiauneiclase
Ceamaisimpldefiniieauneiclase,nJava,esteformatdintreicomponente:
Fig.15.Componenteleesenialealeuneiclase
63
ndrumardelaborator
1.Princonvenie,numeleclaselorJavatrebuiesnceapculitermare.Dacnumele
coninemaimuliatomilexicali,fiecaredintreeitrebuiesnceapculitermare.De
exemplu:
class ClasaAceastaRespectaConventiaDeNotare
{
2.Estefoarteindicatcafiecareclassfiescrisnpropriulfiier.Numelefiierului,n
modobligatoriu,trebuiesaibexactacelainumecucelalclaseiconinute.
Corpulclaseiconinedeclaraiiledeproprietiimetode.
9.2.1.Modificatorideacces
Programareaorientatobiectimpuneexistenaunuimecanismdecontrolasupraaccesuluila
clase i proprietile i metodele unui obiect. n Java, acest mecanism este implementat prin
modificatorideacces.
Tabelulurmtorprezintsemnificaiamodificatorilordeaccesdinpunctdevedereavizibilitii
proprietilorimetodelor.
Modificatoriiprivateiprotectednupotfiaplicaiclaselor.
9.2.2.Alimodificatori
9.2.2.1.Modificatorulfinal
Pentru declaraiile de proprieti are semnificaia faptului c acea proprietate este constant
(nupoatefimodificat).
64
LimbajuldeprogramareJava
Metodelepurtndacestmodificatornumaipotfisupradefinitensubclase.
ncazulclaselor,finalprecizeazcaceaclasnumaipoatefiderivat(nuaremotenitori).
9.2.2.2.Modificatorulstatic
Acestmodificatorpoatefiutilizatnumaipentruproprietiimetode.
9.2.2.3.Modificatorulsynchronized
Acestmodificatoresteutilizatnaplicaiicareruleazmaimultefiredeexecuienparalel.
Modificatorulasigurexclusivitateaccesuluilaexecuie,astfelnctsnuaparerorideviolare
aaccesului.
9.2.3.Proprieti
Oproprietateesteunelementdedateasociatclasei.
Definirea/declarareproprietilorsefacelafelcancazulvariabilelor.Proprietilesedeclar
ninteriorulclasei,darnafaraoricreimetode.Declaraiilepotfiprecedatedemodificatoriide
accesprivate,protectedsaupublicipotfiiniializatenmomentuldeclarrii.
Proprietilepotfideinstan,prinurmarepotfiaccesatedoarprinnumelevariabileicareface
referirelaobiect,ideclas,caresuntcomunepentrutoateinstaneleipotfiaccesatedirect
prinnumeleclasei.
Modificrile fcute asupra unei proprieti de instan a unui obiect nu are efect
asupraproprietilordeinstanaunuialtobiect.
9.2.4.Metode
Ometodesteoparteaunuiprogramcareconinelogicapentruexecutareauneisarcini.De
fiecaredatcndtrebuieexecutatsarcinarespectivtrebuieapelatmetoda.
nmodobligatoriumetodeletrebuiedeclarateninteriorulclaselor.
65
ndrumardelaborator
Declarareametodelor:
Formatgeneral:
Tipulreturnatpoatefiuntipdedateprimitivsauoreferinctreunobiect.Dacmetodanu
returneazdateseutilizeazcuvntulcheievoidpentrutipulreturnat.
Numelemetodeiestedatedeprogramator.Numeletrebuiesfiesugestivpentruceeaceface
metodaisrespecteconveniadedenumireJava.
Lista de parametri este format din datele de care metoda are nevoie pentru ai duce la
ndeplinire sarcina. Lista este format prin specificarea tipului de date i a numelui pentru
fiecareelementdedatetransmismetodei.Tipuldedatealparametruluiesteacelaicutipulde
date al unei variabile. Acesta spune mainii virtuale Java ct memorie s rezerve pentru
parametru i ce fel de date vor fi stocate. Numele parametrului este similar cu numele unei
variabile; este o etichet pentru o adres de memorie care conine datele transmise de
instruciuneacareapeleazmetoda.ncadruluneimetode,numeleparametruluisefolosete
lafelcaovariabil.
Numele unui parametru trebuie s reflecte natura datelor stocate de acesta. i acest nume
trebuiesrespecteconveniadedenumireJava.
Lista de parametri poate conine orici parametri, separai prin virgule, iar numele lor s fie
unice.
Lista de parametri este opional. Numai o metod care are nevoie de date transmise de
instruciunea care o apeleaz trebuie s aib o list de parametri. Totui, definiia metodei
trebuiesincludparantezele,chiardacnuexistolistdeparametri.
TransferulparametrilorsefacenJavaprinvaloare.
66
LimbajuldeprogramareJava
Modificatoriipotfi:
unspecificatordeacces:
o public
o private
o protected
unuldincuvintelerezervate:
o static(metodaestedeclas,nudeinstan)
o abstract (metod abstract ce trebuie s fac parte dintro clas abstract;
aceastmetodnuareimplementare)
o final(metodanupoatefisupradefinit)
o native
o synchronized
Numelemetodei,mpreuncutipulparametrilorpecareaceastaiareformeazsemnturasa.
Semnturatrebuiesfieunicncadrulaceleiaiclase.Potfidefinitemetodecuacelainume,
daravndsemnturidiferite,mecanismulfolositnumindusesuprancrcare(overloading).
9.2.5.Constructori
Un constructor este o metod special care este apelat automat la crearea unei instane a
uneiclase.
Dinpunctdevederetehnic,constructorulesteapelatnaintecaoperatorul newsitermine
execuia. Constructorul se folosete att pentru iniializarea proprietilor de instan ct i
pentruexecutareaunoroperaiilacreareaunuiobiect.
Unconstructorestedefinitcaoricemetodns:
numeleconstructoruluitrebuiesfieacelaicunumeleclasei;
constructorulnutrebuiesconininstruciuneareturn;
Se pot defini mai muli constructori pentru o clas, fiecare avnd semnturi diferite
(suprancrcareaconstructorului).
Dac programatorul nu scrie nici un constructor, Java utilizeaz un constructor implicit (creat
automat de Java). Constructorul implicit nu are list de parametri. Un constructor se
suprancarc prin definirea unuiconstructor care are o list de parametri. Acestase numete
constructorparametrizat(cuparametri).
67
ndrumardelaborator
Constructoruluneiclasepoateaveamodificatordeacces.
Dac modificatorul de acces este public, atunci se poate crea o instan a clasei
respective n orice alt clas.
Dac modificatorul de acces este protected, se pot crea instane ale clasei respective
doar n clasele care motenesc clasa respectiv.
Dac modificatorul de acces este private, nu se pot crea instane ale clasei n alte clase.
Dac modificatorul de acces este implicit, atunci nu se pot crea instane ale clasei dect n
clasele din acelai pachet n care este clasa pentru care se creeaz instana.
9.2.6.Declarareauneiinstaneauneiclase
La crearea unui obiect (instane) Java aloc memorie pentru toate proprietile de instan,
apoiapeleazconstructorul.
Instruciuneademaisusimplictreioperaii:
Operatorul newceremainiiJavasrezerveunblocdememoriepentruinstan.Acest
bloc de memorie este suficient de mare pentru stocarea proprietilor de instan.
Operatorulnewreturneazadresabloculuidememorierezervat.
EstedeclaratovariabilreferinauneiinstaneaclaseimyClass,numitx.Referina
estedeclaratfolosindnumeleclasei.
A treia operaie const n a atribui referinei prima adres din blocul de memorie al
instanei. Referina (x) este folosit apoi n program ori de cte ori se face referire la
instanacreat.
n exemplul anterior sa declarat o referin i o instan a clasei ntro singur instruciune.
Celedoudeclaraiipotfiseparatendouinstruciuni:
myClass x;
x=new myClass();
Referinelordeclaratefinalenulepotfiatribuitealtevalori.
9.2.7.Accesullamembriiuneiclase
Dupceestedeclaratoinstanauneiclase,accesullamembriiclaseisefaceprinintermediul
uneireferineaclasei(variabila).
Pentruaobineaccesullaunmembrualuneiclase,sefolosetenumelereferinei,urmatde
operatorulpunctidenumelemembrului.
Exemplul urmtor definete clasa myClass, care are 3 membri. Acetia sunt o variabil de
instan numit student, un constructor i o metod numit print(). Variabila de instan
esteiniializatcunumruldeidentificarealunuistudent,dectreconstructor,ladeclararea
instanei.Instanaesteapoifolositpentruaapelametoda print(),careafieaznumelede
identificarealstudentului.
68
LimbajuldeprogramareJava
MyClass.java
class MyClass
{
int student;
MyClass()
{
student = 1234;
}
Demonstratie.java
class Demonstratie
{
public static void main(String args[])
{
//declararea unei instante a clasei MyClass
MyClass x = new MyClass();
9.2.8.Suprancrcareametodelor
Ometodseidentificdupsemnturasa,carereprezintcombinaiantrenumelemetodeii
lista tipurilor parametrilor. Acesta nseamn c dou metode pot avea acelai nume, dar
parametridiferii.
Oclaspoateaveamaimultemetodecuacelainume,darsemnturafiecreimetodesfie
unicndefiniiaclasei.
Atunci cnd ntro clas exist dou metode cu acelai nume se spune c a doua metod
suprancarcprimametod.
1.Doumetodealeuneiclasenupotaveaaceeaisemntur.
2.Metodeadouclasediferitepotaveaaceeaisemntur.
69
ndrumardelaborator
Aceastideeesteilustratnurmtorulexemplu,ncareexistdoumetodenumite print().
Primaversiunenuareolistdeargumenteiafieazunmesajdentmpinareprestabilitde
fiecaredatcndesteapelat.Adouaversiuneconineuntextcarevafincorporatnmesajul
afiat. Astfel se poate opta ntre afiarea unui mesaj de ntmpinare generic sau un mesaj
personalizat.
MyClass.java
class MyClass
{
//functia print() fara parametrii
public void print()
{
System.out.println("Neata!");
}
Demonstratie.java
class Demonstratie
{
public static void main(String args[])
{
//declararea unei instante a clasei MyClass
MyClass x = new myClass();
9.2.9.Cuvntulcheiethis
Ometodareacces,nmodimplicit,lavariabileledeinstanilacelelaltemetodealeclasein
careestedefinit.
70
LimbajuldeprogramareJava
Exist situaii n care se declar ntro metod o variabil care are acelai nume ca i o
proprietate de instan. O variabil declarat n interiorul unei metode se numete variabil
local.Dacoinstruciunedintrometodreferunnumedevariabil,Javafolosetevariabila
localnloculvariabileideinstancuacelainume.
SepoateceremainiivirtualeJavasfoloseascovariabildeinstannloculvariabileilocale
cu acelai nume, folosind cuvntul cheie this. Cuvntul cheie this permite referirea la
obiectulcurentalclasei.
MyClass.java
class MyClass
{
//functia print() fara parametrii
public void print()
{
System.out.println("Neata!");
}
Demonstratie.java
class Demonstratie
{
public static void main(String args[])
{
MyClass x = new myClass();
x.print();
}
}
Urmtorulexempluprezintmodulcumsepoateutilizacuvntulcheiethispentruapelulunui
constructordininteriorulaltuiconstructor.
71
ndrumardelaborator
Dacsedoreteapelareaunuiconstructornmodexplicit,aceastinstruciunetrebuie
sfieprimanconstructor.
MyClass.java
class MyClass
{
int studentID;
String studentNume;
double media;
MyClass(int x, String y)
{
// Apelam constructorul cu 3 argumente
this(x, y, 0);
}
MyClass()
{
// Apelam constructorul cu 2 argumente
this(0,"");
}
}
9.3.Creareaiutilizareclaselor(1)
Student.java
public Student()
{
// initializarea variabilei de instanta prin constructor
student = 1234;
}
72
LimbajuldeprogramareJava
Clase.java
y = new Student();
/*
* apelarea metodei print() (metoda a clasei Student) folosind
* instanta clasei Student
*/
temp.print();
73
ndrumardelaborator
9.4.Creareaiutilizareaclaselor(2)
Angajat.java
class Angajat
{
/*
* definirea celor 3 variabile de tip private adica sunt accesibile
* doar membrilor clasei in care sunt declarate.
*/
/*
* definirea constructorului clasei (parametrii sunt cei definiti la
* initializarea obiectelor)
*/
public Angajat(String n, double s, int an, int luna, int zi)
{
Nume = n;
salariu = s;
/*
* crearea unui obiect de tip GregorianCalendar pentru afisarea
* timpului(datei)
*/
GregorianCalendar calendar = new GregorianCalendar(an, luna-1, zi);
// GregorianCalendar utilizeaza 0 pentru Ianuarie
aniversare = calendar.getTime();
}
74
LimbajuldeprogramareJava
Clase.java
/*
* initializarea celor trei obiecte a clasei Angajat (initializarea
* tine cont de constructorul clasei Angajat)
*/
obiect[0] = new Angajat("Popescu Aurel", 750, 1987, 12, 15);
obiect[1] = new Angajat("Pintilie Mihai", 1000, 1989, 10, 1);
obiect[2] = new Angajat("Anghel Laurentiu", 1200, 1990, 3, 15);
9.5.Claseinterne
Definiiauneiclasepoateconinedefiniiauneialteclase.Acesteasenumescclaseimbricate.
Existdoutipurideclaseimbricate:staticeinestatice.
O clas imbricat static este definit cu modificator de acces static i nu are acces direct la
membrii clasei n cadrul creia este definit. Trebuie ca, mai nti, s se declare o instan a
claseiexterneiapoissefoloseascinstanacreatpentruaccesullamembriiclaseiexterne.
Oclasaimbricatnestaticestedenumitclasintern.Eaestedefinitninterioruluneialte
clasedenumitclasextern.Clasainternareaccesdirectlamembriiclaseiexternefrsse
declareoinstanaclaseiexterne.
75
ndrumardelaborator
Clasa intern poate conine proprieti de instan i metode membre. Totui, numai clasa
internareaccesdirectlaacetimembri.Clasaexternpoateaveaacceslamembriiuneiclase
interne declarnd o instan a clasei interne i folosind aceast instan pentru accesul la
membrii clasei interne. De asemenea, clasa intern nu este accesibil din exteriorul clasei
externe.
Oinstanauneiclaseinternepoatefideclaratnumaininteriorulclaseiexterne.
Figura.java
import java.util.Scanner;
class Figura
{
// definirea unei metode membre a clasei
void metoda()
{
int alegere;
if (alegere == 1)
{
// definirea unui obiect calcul de tip Cub
Cub calcul = new Cub();
// apelarea metodei membre a clasei Cub
calcul.calculare();
}
if (alegere == 2)
{
Con calcul = new Con();
calcul.calculare();
}
76
LimbajuldeprogramareJava
if (alegere == 3)
{
Cilindru calcul = new Cilindru();
calcul.calculare();
}
} while (alegere != 4);
}
77
ndrumardelaborator
Imbricate.java
import java.util.Scanner;
78
LimbajuldeprogramareJava
/*
* apelarea metodei metoda() ce apartine clasei Figura prin
* intermediul obiectului extern
*/
extern.metoda();
}
}
79
ndrumardelaborator
80
LimbajuldeprogramareJava
LABORATORUL8
10.Motenirea
Proprietiledeinstanimetodelecomunemaimultorobiectesedeclarntrosingurclas
(ex.clasaA).Pentruobiectelenruditesepoatedeclaraonouclas(ex.clasaB)ceconineatt
membriiclaseiActimembriiparticulariclaseiB.
Esteinutilssedeclareidefineascaceeaimembriatttimpctexistosoluiemaibuni
anumemotenirea.
Regulapentruastabilidacmotenireaestepotrivitpentruunanumitprogramsenumete
esteuniimpunecaunobiectsaiborelaiecuunaltobiectnaintedealmoteni.
Conformreguliiesteun,punemurmtoareantrebare:obiectulAesteunobiectB?.Dac
rspunsul este afirmativ, obiectul A poate s moteneasca obiectul B. Din punct de vedere
tehnicnuexistnimiccaresmpiediceoclassmoteneascoaltclas,daroricerelaiede
motenireartrebuisrespecteregulaesteun.
De exemplu, trstura comun ntre un student masterand i un student n primii ani este
aceea c ambii sunt studeni. Cu alte cuvinte, ambii au atribute i comportamente comune
tuturorstudenilor.Totui,unstudentmasterandareatributeicomportamentediferitedeale
altorstudeni.
Artrebuidefinitetreiclase:
clasaStudentcaredefineteatributeleicomportamentelediferitetuturorstudenilor;
clasaStudentMasterandpentrustudeniimasteranzi;
clasaStudentNelicentiatpentrustudeniidinprimiianidefacultate.
Aplicndregulaesteunobiectuluicarereprezintstudentulmasterand,punemurmtoarea
ntrebare: Studentul masterand este un student?. Rspunsul este afirmativ deci clasa
StudentMasterandpoatesmoteneascclasaStudent.
AplicndaceeairegulclaseiStudentNelicentiat(Studentulneliceniatesteunstudent?)
observmcStudentNelicentiatpoatemoteniclasaStudent.
Oclasmoteneteoaltclasfolosindcuvntulcheieextendsndefiniiaclasei.
81
ndrumardelaborator
Clasamotenitestenumitsuperclasa (clasaprinte),iarclasacaremotenetesenumete
subclasa(clasacopil).
Motenirea:
public class A
{
class B extends A
{
10.1.Accesullamembriiuneiclasemotenite
Accesullamembriiuneiclasesefacenfunciedespecificatoriideaccesfolosii.
Unmembrudeclaratca publicesteaccesibilpentruoricealtmembru,dinoricealtclas.Un
membrudeclaratca privateesteaccesibilpentruoricemetodmembrdinpropriaclas.Un
membrudeclaratca protectedesteaccesibilpentruoricemetodmembrdinpropriaclas
ipentrumetodelemembredinsubclaselecaremotenescpropriaclas.
Student.java
class Student
{
private int studentID;
public Student()
{
studentID = 1234;
}
StudentMasterand.java
82
LimbajuldeprogramareJava
Demonstratie.java
class Demonstratie
{
public static void main(String args[])
{
StudentMasterand ob = new StudentMasterand();
ob.afisare();
}
}
nexempluldemaisus,clasa Student,pelngconstructor,aredoimembri:oproprietatede
instan numit studentID i o metod membr numit afisare() ce afieaz pe ecran
valoarea proprietii studentID. Constructorul este folosit pentru iniializarea proprietiide
instan.
Clasa StudentMasterandnuareniciunmembru,darareacceslamembriipubliciiprotejai
ai clasei Student. Acesta nseamn c o instan a clasei StudentMasterand poate folosi
metoda afisare() din clasa Student, ca i cum metoda ar fi membr a clasei
StudentMasterand.
Aceastideeesteilustratdeinstruciuniledinmetoda main()aaplicaiei.Primainstruciune
declar o instan a clasei StudentMasterand. A doua instruciune folosete instana creat
pentruaapelametodaafisare().
La prima vedere metoda afisare() sar putea crede ca este membr clasei
StudentMasterand,deieste,defapt,membraclaseiStudent.
Motenirea este o relaie unidirecional. Cu alte cuvinte, o subclas are acces la membrii
publiciiprotejaiaisuperclasei,darsuperclasanuareacceslamembriipubliciiprotejaiai
subclaselor.
10.2.Apelareaconstructorilor
Atunci cnd o subclas motenete o superclas, la instanierea subclasei sunt implicai cel
puindoiconstructori.
Atuncicndsedeclaraoinstanasubclasei,Javaapeleazattconstructorulsubclaseicti
celalsuperclasei.
83
ndrumardelaborator
10.2.1.Folosireacuvntuluicheiesuper
Cuvntul cheie super este utilizat pentru referirea la membrii unei superclase n metodele
uneisubclase.
Cuvntulcheie supersefolosetelafelcumsefoloseteoreferinauneiinstanepentrua
referiunmembrualuneiclasedinprogram.
10.2.1.1.Folosireacuvntuluicheiesuper
Student.java
class Student
{
Student()
{
studentID = 1234;
}
Student(int ID)
{
studentID = ID;
}
StudentMasterand.java
84
LimbajuldeprogramareJava
Demonstratie.java
nexempluldemaisus,nclasaStudentsuntdefiniidoiconstructoriambiifiindfolosiipentru
iniializarea proprietii de instan. Primul constructor folosete pentru iniializare o valoare
prestabilit,iaraldoileafolosetepentruiniializareovaloareprimitcaparametru.Sespune
caldoileaconstructorsuprancarcprimulconstructor.
10.2.2.Motenireapemaimulteniveluri
n programele Java motenirea poate fi pe mai multe niveluri. Acesta permite unei clase s
moteneascmembridinmaimultesuperclase.Sefolosetemotenireapemaimulteniveluri
pentruagrupaobiectemaisimplenobiectemaicomplexe.
Unele limbaje de programare, cum ar fi C++, permit folosirea mai multor tipuri de motenire
multipl. n Java exist un singur tip de motenire multipl, numit motenire pe mai multe
niveluri (multilevel inheritance). Motenirea pe mai multe niveluri permite unei subclase s
moteneascdirectosingursuperclas.Totui,superclasarespectivpoatefi,larndulsu,o
subclasauneisuperclase.
10.2.2.1.Motenireapemaimulteniveluri
Persoana.java
class Persoana
{
private String nume;
Persoana()
{
nume = "Popescu";
}
85
ndrumardelaborator
}
}
Student.java
public Student()
{
student = 12345;
}
}
}
StudentMasterand.java
Mostenire.java
LimbajuldeprogramareJava
Motenireapemaimulteniveluripermiteuneisubclasesmoteneascosingursuperclas.
TotuinaplicaiesedoretecaStudentMasterand smoteneascattclasaStudent,cti
clasa Persoana. Se poate ocoli restricia impus de motenirea simpl crend mai nti o
relaiedemotenirentreclasa Persoana iclasa Student. Clasa Studentareacceslatoi
membriiprotejaiipubliciaiclasei Persoana.Apoisepoatecreaorelaiedemotenirentre
clasa Student i clasa StudentMasterand. Clasa StudentMasterand motenete toi
membrii publici i protejai ai clasei Student, ceea ce include i accesul la membrii publici i
protejaiaiclasei Persoana,deoarececlasa Student amotenitdejaaccesullaaceimembrii
prinmotenireaclaseiPersoana.
Acestexemplucreeazomotenirepemaimulteniveluri.Primulnivelesteformatdinclasele
Persoana i Student. Clasa Persoana este superclas, iar clasa Student este subclas. Al
doilea nivel este format din clasele Student i StudentMasterand: clasa Student este
superclas,iarclasaStudentMasterandestesubclas.
Se poate realiza orice numr de niveluri de motenire ntrun program cu condiia ca fiecare
classtreacdetestulesteun.Totuiestedepreferatsnuexisteunnumrmaimarede
trei niveluri deoarece acesta duce la creterea complexitii i face ca programul s fie mai
dificildentreinutiactualizat.
10.2.3.Supradefinireametodelorfolosindmotenirea
Ometodpermiteuneiinstaneauneiclasesimplementezeunanumittipdecomportament,
cum ar fi afiarea unei variabile de instan. O subclas motenete comportamentul unei
superclase,atuncicndareacceslametodelesuperclasei.
87
ndrumardelaborator
Suprancrcareareprezintdefinireauneimetodecareareacelainumecuoaltmetod,dar
cuolistdeparametridiferit.
Supradefinirea reprezint definirea unei metode care are acelai nume cu o alta metod i
aceeailistdeparamteri,nsarecomportamentdiferit.
10.2.3.1.Supradefinireametodelorfolosindmotenirea
Salarii.java
class Salarii
{
private String nume;
private double salariu;
Manager.java
88
LimbajuldeprogramareJava
/*
* clasa Manager fiind o subclasa a clasei Salarii are acces la
* membrii acesteia publici si protejati
*/
Mostenire.java
import java.util.*;
obiect[0] = sef;
obiect[1] = secretar;
obiect[2] = new Salarii("Grigore Mihai", 2000);
89
ndrumardelaborator
// cresterea salariilor cu 5%
for (Salarii i : obiect)
{
// apelarea metodei Salariu
i.Salariu(5);
10.2.4.Cuvntulcheiefinalimotenirea
Cuvntulcheie finalaredouautilizrinmotenire.nprimulrnd,poatefifolositmpreun
cuometodmembrasuperclaseipentruampiedicaosubclasssuprascrieometod:
Persoane.java
class Persoane
{
final void MesajAvertizare()
{
System.out.println("Aceasta metoda nu poate fi supradefinita.");
}
}
n al doilea rnd, poate fi folosit mpreun cu o clas pentru a mpiedica folosirea clasei
respectivecasuperclas(mpiedicalteclasesmoteneascclasarespectiv).
Persoane.java
90
LimbajuldeprogramareJava
LABORATORUL9
11.Tratareaexcepiilor
ntrun program pot aprea dou tipuri de erori: erori de compilare i erori de execuie. O
eroaredecompilareapare,deobicei,atuncicndprogramatorulafcutogreealdesintaxla
scrierea codului (de ex. omiterea caracterului punct i virgule la sfritul unei instruciuni).
Acesteerorisuntuordescoperitedecompilator.
O eroare de execuie apare n timpul rulrii programului i poate avea diverse cauze:
introducerea de ctre utilizator a unor date de alt natur dect cele ateptate de program,
indisponibilitateauneiresurse(deex.unfiier),etc.
Erorile de execuie sunt mai grave dect erorile de compilare deoarece acestea apar
ntotdeauna, pe cnd eroarile de execuie apar numai n anumite situaii. Din acest motiv,
acesteeroritrebuieanticipateitrebuieinclusenprogrammodalitilelordedezvoltare.
11.1.Proceduridetratareaexcepiilor
Oprocedurdetratareaexcepiiloresteoporiuneaprogramuluicareconineinstruciunice
suntexecutatecndapareoanumiteroaredeexecuie.
Includereauneiproceduridetratareaexcepiilornprogramsenumetetratareaexcepiilor.
nlocsseverificedateleprovenitedinsurseexternesaudinalteprelucrrisemonitorizeaz
acesteinstruciuniisearuncoexcepiedacapareoeroaredeexecuie.Deasemenea,se
include n program instruciuni care sunt executate dac este aruncat o excepie. Aceast
procedursenumeteprindereauneiexcepii.
Instruciunilecetrebuiescmonitorizatetrebuiencadratentrunbloctry.
try
{
<instructiuni>;
}
Instruciunileexecutateatuncicndapareoexcepiesuntplasatentrunbloccatch.
91
ndrumardelaborator
Mai exist o seciune finally ce conine instruciuni care se execut indiferent dac a
aprutoexcepiesaunu.Deobicei,nblocul finallyseplaseazinstruciunicareelibereaz
resurselerezervatedeprogram.
finally
{
<instructiuni>;
}
Formatgeneral:
try
{
<instructiuni_test>;
}
[catch (<tip_exceptie1> <id_var_exceptie1>)
{
<instructiuni_tratare_exceptie1>;
}]
[catch (<tip_exceptie2> <id_var_exceptie2>)
{
<instructiuni_tratare_exceptie2>;
}]
[]
[finally
{
<instructiuni_care_se_executa_totdeauna>;
}]
Presupunemexemplul:
ImpartireLaZero.java
92
LimbajuldeprogramareJava
try
{
int z = impartire(x, y);
}
catch (ArithmeticException e)
{
System.out.println(e);
System.out.println("Exceptia Aritmetica: impartirea la 0");
}
}
Larularevaafia:
java.lang.ArithmeticException: / by zero
Exceptia Aritmetica: impartirea la 0
deoarece la sfritul blocului try se afla un bloc catch, care prinde excepiile de tip
ArithmeticException, reprezentate prin variabila e. Codul monitorizat de blocul try
genereazoeroarearitmeticatuncicndsencearcomprirelazero.
Cndsencearcomprirelazero,instruciuneancauzaruncoexcepiedemprirela
zero,careesteprinsdevariabilae.
Oseriedeinstruciunipotgeneramaimultetipurideerorideexecuie.Prinurmaresefolosesc
blocuricatchmultiplepentruainterceptafiecaretipdeexcepie.
Atunci cnd apare o excepie, Java o arunc ctre blocurile catch care urmeaz dup blocul
try,nordineancareaparacesteanprogram.Dacexistdoublocuri catchiprimulbloc
prindeexcepia,aceastanumaiajungelaaldoileabloc catch,deoareceestetratatnprimul
bloc.
93
ndrumardelaborator
Demo1.java
}
catch (ArithmeticException e)
{
System.out.println("Eroare: nu se poate imparti la 0);
System.out.println(e);
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("Eroare: s-a depasit indexul vectorului a);
System.out.println(e);
}
}
Rezultatulrulrii:
Excepiaprinsestededepireaindexului:ArrayIndexOutOfBoundsException.
Demo2.java
94
LimbajuldeprogramareJava
catch (ArithmeticException e)
{
System.out.println("Eroare: nu se poate imparti la 0");
System.out.println(e);
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("Eroare: s-a depasit indexul vectorului a");
System.out.println(e);
}
}
}
Rezultatulrulrii:
Demo3.java
}
catch (ArithmeticException e)
{
System.out.println("Eroare: nu se poate imparti la 0");
System.out.println(e);
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("Eroare: s-a depasit indexul vectorului a");
System.out.println(e);
}
}
}
95
ndrumardelaborator
Rezultatulrulrii:
PrimaeroareinterceptatestedetipArithmeticException.
ExemplulurmtorilustreazfolosireabloculuifinallyntrunprogramJava:
DemoFinally.java
Rezultatulrulrii:
96
LimbajuldeprogramareJava
11.1.1.Blocuritryimbricate
Exist situaii cnd se combin dou sau mai multe blocuri try, plasnd un bloc try n
interiorul unui alt bloc try. Acest procedeu se numete imbricarea blocurilor try, iar blocul
internsenumetebloc tryimbricat.Colectiv,acesteasenumescperechiimbricatedeblocuri
try.
Fiecare bloc try dintro pereche imbricat trebuie s aib unul sau mai multe blocuri catch
sau un bloc finally, care prind excepiile. Blocurile catch sunt plasate imediat dup blocul
trycorespunztor,lafelcaatuncicndsescriublocuritrysimple.
Atuncicndoinstruciunedinblocultryinterndeterminaruncareauneiexcepii,Javaverific
dac blocurile catch asociate cu blocul try intern pot sa prind excepia. Dac nici unul din
aceste blocuri nu poate s prind excepia aruncat, sunt verificate blocurile catch asociate
blocului tryextern.Dacnicinacestfelexcepianuestetratatatunciexcepiaestetratat
deproceduraimplicit.
Demo.java
97
ndrumardelaborator
Rezultatulrulrii:
11.2.Lucrulcuexcepiineinterceptate
Deintimpulexecuieiprogramuluipotapreafoartemulteexcepii,nuestenevoiessescrie
cteunbloc catchastfelnctsfieprinsetoate.Oriceexcepiepentrucarenuexistunbloc
catchesteinterceptatdeblocul catchimplicitdinJava,numitprocedurimplicitdetratare
aexcepiilor(defaulthandler).
Oridecteoriprindeoexcepie,proceduraimplicitafieazdoutipurideinformaii:unir
decaracterecaredescrieexcepiaaprutionregistrareastivei.nregistrareastiveiaratce
execut programul, ncepnd cu punctul n care a aprut excepia i terminnd cu punctul n
careexecuiaprogramuluisancheiat.
Demo.java
Rezultatulrulrii:
Primalinieestemesajulcaredescrieexcepia.Adoualinieestenregistrareastivei,carespune
cexcepiaaaprutinlinia6dinmetodamain()aprogramuluiDemo.java.Aceastaestelinia
n care se face calculul mpririi lui 2 la 0. Pe acest linie se termin programul odat cu
aruncareaexcepiei.
Dac excepia este generat de o instruciune dintro metod apelat de metoda main(),
nregistrarea stivei include ambele metode, artnd calea pn la instruciunea care a cauzat
excepia.
98
LimbajuldeprogramareJava
Demo.java
Rezultatulrulrii:
Prima linie este mesajul care descrie excepia. ncepnd cu a doua linie ncepe nregistrarea
stivei.Citindnregistrareastiveincepndcuultimalinie:maintiesteapelatfuncia main()
a programului Demo.java, apoi n linia 4 a fost apelat metoda metoda(). Linia 9 a
programului,carefacepartedindefiniiametodei metoda(),estepunctulncaresancheiat
execuiaprogramului,dincauzauneiexcepii.
11.3.Metodecarenutrateazexcepiile
Nuesteobligatoriucaometodcarearuncoexcepiesoitrateze.Totui,antetulmetodei
trebuiesspecificeexcepiilecarepotfigeneratedemetodarespectiv.Pentruaapelametoda
trebuie s se includ n program un bloc try..catch care trateaz excepiile ce nu sunt
interceptatedemetod.
Sespecificexcepiilelansatefolosindcuvntulcheie throwsnantetulmetodei,duplistade
parametri.Dacsunmaimultetipurideexcepii,elevorfiseparateprinvirgule.
Exemplulurmtorilustreazspecificareaexcepilorcaresuntaruncate,darnuiinterceptarea
dectremetod.
ndrumardelaborator
Demo.java
}
}
}
11.4.Excepiiverificateineverificate
Claseledeexcepiisuntmpritendougrupuri:verificateineverificate.Excepiileverificate
trebuiesfieinclusenlistadeexcepiiaruncatedeometod;dacmetodarespectivpoate
sa arunce excepia, dar nu o i trateaz. Compilatorul verific dac exist blocuri catch care
trateazacesteexcepii.
Cualtecuvinteoexcepieverificattrebuietratatexplicit,fieprininterceptatreantrunbloc
catch,fieprindeclarareacaexcepiearuncat.
100
LimbajuldeprogramareJava
Urmtorultabelprezintopartedinexcepiileverificate:
Excepie Descriere
ArithmeticException Eroarearitmetic,cumarfimprirealazero
ArrayIndexOutOfBoundsException Indexulmatriceiadepitlimitele
ArrayStoreException Atribuireaunuitipincompatibilunuielemental
matricei
ClassCastException Conversieinvalid
IllegalArgumentException Argumentinvalidfolositpentruapelareauneimetode
IllegalMonitorStateException Operaiedemonitorizareilegal,cumarfiateptarea
unuifirdeexecuieblocat
IllegalStateException Mediulsauaplicaiaseaflntrostareincorect
IllegalThreadStateException Operaiasolicitatnuestecompatibilcustarea
curentafiruluideexecuie
IndexOutOfBoundsException Untipoarecaredeindexadepitlimitele
NegativeArraySizeException Matricecudimensiunenegativ
NullPointerException Utilizareauneireferienule
NumberFormatException Conversieinvalidaunuiirdecaraterentrun
formatnumeric
SecurityException Incercaredencalcareasecuritii
StringIndexOutOfBoundsException Incercaredeindexaredincolodelimiteleunuiirde
carcatere
UnsupportedOperationException Afostntlnitooperaieneacceptat
Urmtorultabelprezintopartedinexcepiileneverificate:
Excepie Descriere
ClassNotFoundException Clasanuafostgsit
CloneNotSupportedException ncercareadeaclonaunobiectcarenu
implementeazinterfaaCloneable
IllegalAccessException Accesullaoclasesteinterzis
InstantiationException ncercareadeacreeaoinstanauneiclaseabstracte
sauauneiinterfee
InterruptedException Unfirdeexecuieafostntreruptdeunaltfirde
execuie
NoSuchFieldException Afostsolicitatuncmpcarenuexist
(NoSuchMethodError Afostsolicitatometodacarenuexist
IOException Aaprutoexcepientimpuluniprocessde
intrare/ieire
SQLException Aaprutoexcepientimpulinterconectriicuun
sistemdegestionareabazelordedatefolosindSQL
11.5.TratareaexceptiilrfolosindsuperclasaException
Toate tipurile de excepii din Java sunt clase derivate din clasa Exception, astfel c, prin
mecanismuldepolimorfism,ovariabildetipExceptionpoateprindeoriceexcepie.
101
ndrumardelaborator
Demo.java
Rezultatulrulrii:
A aparut o eroare!
java.lang.ArrayIndexOutOfBoundsException: 4
Executarea blocului finally
Acesttipdetratarearedezavantajulcnusepoateprecizatipuleroariiaprute.
11.6.Exemple
11.6.1.ExcepiideI/O
ScanExceptii.java
import java.util.*;
102
LimbajuldeprogramareJava
while (!numar)
{
try
{
String s = scanner.nextLine();
/*
* initializeza variabila d cu valoarea specificata de String in
* cazul in care String poate fi reprezentat ca o valoare double
*/
d = Double.parseDouble(s);
numar = true;
}
catch (NumberFormatException e)
{
/*
* NumberFormatException-valoarea String nu poate fi convertita
* intr-o valoare double
*/
System.out.println("Nu ai inserat un numar valid.
+ Incearca din nou ");
System.out.print("Introduceti un numar: ");
}
}
11.6.2.Excepii:Depireaindexuluiunuivector
DepasireIndex.java
try
{
System.out.println("Intrare in blocul try");
System.out.println(Array[2]);
System.out.println("Iesire din blocul try");
}
catch (ArithmeticException e)
{
System.out.println("Exceptie aritmetica");
}
103
ndrumardelaborator
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("Exceptie index depasit");
// instructiunea return-iesirea din metoda return;
}
Finally
{
System.out.println("Blocul Finally este intodeaua executat");
}
11.6.3.Excepii:Vectorcudimensiunenegativ
Negative.java
try
{
System.out.println("Intrarea in blocul try.");
// declararea unui vector cu dimensiune negativa
vector = new int[x - y];
System.out.println("Iesirea din blocul try.");
// prinderea exceptiei
}
catch (NegativeArraySizeException e)
{
System.out.println("Exceptia consta intr-un tablou
+ de dimensiune negativa.");
/*
* executarea blocului finally care se executa indiferent daca
* apar sau nu exceptii
*/
}
finally
{
// redeclararea vectorului
vector = new int[y - x];
System.out.println("Blocul finally este intodeauna executat.");
}
104
LimbajuldeprogramareJava
try
{
// initializarea vectorului
for (int i = 0; i <= vector.length; i++)
vector[i] = i;
// prinderea exceptiei
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("Exceptie index depasit");
try
{
// realizarea unei operatii de impartire a unui intreg la 0
z = y / x;
/*
* prinderea exceptiei generate de impartirea unui intreg
* la 0 si tratatrea ei
*/
}
catch (ArithmeticException i)
{
System.out.println("Exceptie aritmetica");
z = x / y;
System.out.println(z);
}
}
}
}
11.6.4.Excepii:NullPointerException
NullPointer.java
105
ndrumardelaborator
catch (NullPointerException e)
{
System.out.println("Exceptia consta in faptul ca
+ obiectul este este null.");
}
}
}
11.6.5.Excepii:ArrayIndexOutOfBoundsException
RandomIndex.java
try
{
System.out.println("La indexul " + index + " valoarea este: "
+ Array[index]);
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("Indexul " + index
+ " depaseste dimensiunea.");
}
}
}
}
106
LimbajuldeprogramareJava
LABORATORUL10
12.Interfee
Deasemenea,ointerfapoateconineideclaraiideconstante.
Practic,ointerfaesteunansambludemetodefrimplementareideclaraiideconstante.
Toatemetodeledeclaratentrointerfaau,implicit,modificatoruldeaccespublic.
Formatgeneral:
Oclasimplementeazointerfaprinutilizareacuvntuluicheieimplements.
Urmtoareleexempleprezintmodulncareseutilizeazinterfeele.
Masina.java
interface Masina
{
String formatedText = "\nDetalii masina:"; // folosit pentru afisare
String getMarca();
String getCuloare();
void setCuloare(String value);
float getGreutate();
void setGreutate(float value);
int getPutereMotor();
void setPutereMotor(int value);
String getTipCombustibil(); // "benzina", "motorina"...
void setTipCombustibil(String value);
107
ndrumardelaborator
int getPret();
void setPret(int value);
void afiseazaDetalii();
}
Dacia.java
108
LimbajuldeprogramareJava
Interfete.java
class Interfete
{
public static void main(String[] args)
{
Dacia masina1 = new Dacia();
masina1.afiseazaDetalii();
masina2.afiseazaDetalii();
}
}
109
ndrumardelaborator
Instrument.java
interface Instrument
{
// defineste o metoda fara implementare
void play();
}
Pian.java
Vioara.java
Muzica.java
110
LimbajuldeprogramareJava
111
ndrumardelaborator
LABORATORUL11
13.Fluxurideintrare/ieiere(fiiere)
Pentru ca un program Java s aduc date din surse externe trebuie s deschid un canal de
comunicaie(flux)ctresursaexternisciteascdatelerespective.nmodsimilar,pentrua
stoca datele dintrun program pe o surs extern trebuie s se deschid un flux ctre sursa
externissescriedatelepeea.
Java include un numr mare de clase pentru lucrul cu fiiere i fluxuri, concepute pentru
operaiiledestocareitransferaledatelor.
13.1.Fiiereisistemedefiiere
Un fiier reprezint un grup de octei nrudii. Un sistem de fiiere este un produs software
folositpentruorganizareaipstrareafiierelorpeundispozitivsecundardestocare.
Fiecare fiier are proprieti care l descriu. Sistemul de fiiere determin tipul proprietilor
caredescriufiierul.nmodobinuit,acestanseamnnumelefiierului,permisiuniledeacces,
dataioraultimeimodificriafiierului.ngeneral,celetreipermisiunideaccesfolositesunt:
citire/scriere(read/write),numaicitire(readonly)iexecuie.
Fiierelesuntorganizatendirectoareisubdirectoare.Directorulaflatpepoziiaceamainalt
a ierarhiei se numete director rdcina. De aici ncepe ntreaga ierarhie de directoare i
subdirectoare.Colectiv,directoarelesisubdirectoareleformeazstructuradedirectoare.
13.2.ClasaFILE
Esteinclusnpachetuljava.ioidefinetemetodeutilizatepentruinteraciunilecusistemul
defiiereinavigareanstructuradedirectoare.
CndsecreeazoinstanaclaseiFilesefoloseteunuldinceitreiconstructoriaiclasei:
Primulconstructornecesittransmitereaciideacceslafiier.Demulteoricaleadeacceseste
o ierarhie de directoare terminate cu directorul de care are nevoie programul. De exemplu,
112
LimbajuldeprogramareJava
D:\Laborator_Java \test este o cale de acces care ajunge la subdirectorul test din directorul
aplicatiidepepartiiaD.
Al doilea constructor are nevoie de doi parametrii. Primul parametru este calea de acces la
director,iaraldoileaparametruestenumeleunuifiierconinutnultimulsubdirectordincalea
deaccesspecificat.
Altreileaconstructorestefoarteasemntorceceldealdoilea,darcaleadeaccesladirector
estetransmiscaoinstanclaseiFile,nucaunirdecaractere.
Aceticonstructorinucreeazundirectorsauunfiier.
Dupceprogramulareladispoziieocaledeacceslaundirectorsauunfiier,potfiapelate
metodedefinitenclasaFile.
MetodedefinitenclasaFilesuntprezentatesinteticntabelulurmtor:
Metod Descriere
isFile() Returneazvaloareabooleantruedacobiectul
esteunfiier.Metodareturneazvaloarefalsecnd
obiectulnuestefiiersauinstanaclaseiFilereferun
director,unsubdirector,uncanalsauundriverde
dispozitiv.
isAbsolute() Returneazvaloareabooleantruedacfiierul
conineocaledeaccesabsolutaltfelreturneaz
valoareafalse.
boolean renameTo(File newName) Redenumeteundirector,subdirectorsauunfiier,
folosindnumeletransmiscaargument.
delete() tergeunfiierdepesursaextern.
void deleteOnExit() tergefiieruldupcemainavirtualJavatermin
execuia.
boolean isHidden() Returneazvaloareabooleantruedacfiierulsau
caleadeaccesesteascuns;altfelreturneazvaloarea
booleanfalse.
boolean setLastModified(long ms) Modificmarcatemporalafiierului.Marca
temporalfurnizatcaargumenttrebuiesspecifice
dataiorainmilisecunde,ncepndcu1ianuarie
1970iterminndcudataioracurent.
boolean setReadOnly() Stabiletepermisiuneadeaccesnumaipentrucitire.
compareTo() Compardoufiiere.
length() Returneazlungimeafiieruluinoctei.
isDirectory() Returneazvaloareabooleantruedacobiectuleste
undirector;altfelreturneazvaloareabooleanfalse.
113
ndrumardelaborator
canRead() Returneazvaloareabooleantruedacdirectorul
saufiierularepermisiunedecitire;altfelreturneaz
valoareabooleanfalse.
canWrite() Returneazvaloareabooleantruedacdirectorul
saufiierularepermisiunedescriere;altfelreturneaz
valoareabooleanfalse.
exists() Returneazvaloareabooleantruedacdirectorul
saufiierulexist;altfelreturneazvaloareaboolean
false.
getParent() Returneazcaleadeaccesladirectorulprinteal
subdirectorului.
getAbsolutePath() Returneazcaleadeaccesabsolutasubdirectorului.
getPath() Returneazcaleadeaccesasubdirectorului.
getName() Returneaznumeledirectoruluisauafiierului.
Urmtoareaaplicaieilustreazutilizareaacestora.
DemoFile.java
import java.io.File;
Rezultatulrulrii:
Nume: DemoFile
Cale: \Laborator_Java\DemoFile
Despre cale: D:\Laborator_Java\DemoFile
Parinte: \Laborator_Java
Existenta: true
Scriere: true
Citire: true
114
LimbajuldeprogramareJava
Director: true
File: false
Cale absoluta: false
Length: 0
13.2.1.Afiarealisteidefiieredintrundirector
Sepoatereturnaconinutulunuidirectorapelndmetodalist().
Metodalist()returneazuntabloudeiruridecaractereconinndnumelefiierelorstocate
ntrun director. Metoda list() poate fi folosit numai pentru directoare, de aceea este
recomandatsseapelezemetoda isDirectory()pentruaverificadacobiectulestesaunu
director,naintedeapelareametodei.
DemoFileDirector.java
import java.io.File;
115
ndrumardelaborator
Rezultatulrulrii:
director: /acest_fisier
Director: test1
Director: test1_1
Director: test2
Director: test2_1
Structuradirectorului:
13.3.Fluxuri
Java include mai multe clase pentru fluxuri, construite pe baza a patru clase abstracte:
InputStream,OutputStream,ReaderiWriter.
116
LimbajuldeprogramareJava
13.3.1.Scriereantrunfiier
Pentruaputeascriedatentrunfiiertrebuieca,mainti,ssecreezeunfluxdeieirepentru
fiier.Unfluxdeieiredefiieredeschidefiierul,dacexist,saucreeazunnoufiierdacnu
exist.Dupcesedeschideunfluxdefiiere,sepoatescriedatenfiierfolosindunobiectde
scrierePrintWriter.
Secreeazunobiectdescriereapelndconstructorulclasei PrintWriteritransminduio
referin ctre un flux de ieire pentru fiiere. Constructorul returneaz o referin a unui
obiectPrintWriter,care poatefifolositpentruscrierenfiier.Dupcedatelesuntscrisen
fiier,trebuieapelatmetoadaclose()pentruanchidefiierul.
Exemplulurmtorilustreazdeschidereaunuifluxdeieirepentrufiiere,creareaunuiobiect
descrierePrintWriteriscriereadedatenfiier.
ScriereaInFisier.java
import java.io.*;
import java.util.*;
117
ndrumardelaborator
Exemplulncepecudeclarareaiiniializareaatreiiruridecaractere,carevorfiscrisentrun
fiier.ncontinuare,programuldeschideunfluxdeieirepentrufiiereicreazunobiectde
scriere. Fiierul folosit n acest exemplu se numete Student.doc i este stocat n directorul
curent. Programul apeleaz apoi metoda print(), definit n clasa PrintWriter, pentru a
scriedatelenfiierulStudent.doc.Defiecaredatcndesteapelatmetoda print(),isunt
trimisedatelecaretrebuiescrisenfiier.Fiierulestenchisdupscriereaultimuluielementde
date.
13.3.2.Citireadintrunfiier
Exist mai multe modaliti de citire a datelor dintrun fiier. Se pot citi octei individuali sau
blocuri de date format dintrun numr specificat de octei. De asemenea, se pot citi, printro
singuroperaie,oliniedeoctei.Olinieesteformatdintroseriedeocteicaresetermincu
un octet corespunztor caracterului linie nou. Acest caracter este similar cu apsarea tastei
ENTER la sfritul uneipropoziii. De obicei, tasta ENTER determin programul sinsereze un
caracter linie nou. Dup citirea liniei programul trebuie s mpart linia n segmente
semnificative, cum ar fi numele i prenumele unui student, folosind metode definite n clasa
String. De asemenea, programul poate s afieze direct pe ecran linia citit. O alt soluie
frecvent folosit la citirea dintrun fiier este s se citeasc datele ca iruri de caractere, nu
octei.
Pentru citirea datelor trebuie s se deschid fiierul. Se creaz un obiect de citire din fiiere,
folosind constructorul clasei FileReader, cruia i se transmite numele (i, eventual, calea)
fiierului.Dacfiierulnuseaflndirectorulcurent,trebuiesseincludnnumeicaleade
acceslafiier.
Sepoatefolosiaceasttehnicnprogramecrenduncititorcubuffer(bufferedreader),care
creeaz un buffer pentru stocarea datelor citite pe unitatea de disc. Se creeaz un cititor cu
buffer folosind constructorul clasei BufferedReader, cruia i se transmite ca argument o
referin a obiectului FileReader, folosit pentru deschiderea fiierului. Clasa
BufferedReaderdefinetemetodelefolositepentrucitireadatelordinbuffer.
118
LimbajuldeprogramareJava
Exemplul urmtor ilustreaz crearea obiectelor pentru deschiderea fiierelor i citirea prin
buffer. Acestea sunt apoi folosite pentru a citi date din fisierul creat n exemplu anterior.
Programul deschide fisierul Student.doc, care conine date despre un student. Datele sunt
copiatedinfiiernbuffer.Apoiesteapelatmetoda readLine(),carecitetedateleliniecu
liniedinbufferileatribuieuneivariabiledetipString.
Seobservctoateacesteoperaiisuntexecutatenexpresiantrunciclulwhile.Facemacest
lucru pentru a stabili momentul n care ajungem la sfritul fiierului. Metoda readLine()
returneaz valoarea null atunci cnd ajunge la sfritul fiierului. Cnd se ajunge la sfritul
fiierului,programuliesedinciclulwhileiapeleazmetodaclose(),carenchidefiierul.
CitireaDinFisier.java
import java.util.*;
import java.io.*;
13.3.3.Adugareadatelorntrunfiier
Se adaug date ntrun fiier folosind valoarea true pentru al doilea parametru al
constructorului clasei FileOutputStream. Versiunea constructorului folosit n seciunea
Scriereantrunfiieracceptunsingurargument,careestenumelefiierului.nmodprestabilit,
octeiisuntscriidelanceputulfiierului.
119
ndrumardelaborator
valoareabooleana true.nacestcaz,octeiisuntscriilasfritulfiierului(append).Dacnu
exist,fiierulestecreat.
Exemplulurmtorilustreaztehnicadeadugareadatelornfiier.
AdaugareaDatelor.java
import java.io.*;
import java.util.*;
try
{
PrintWriter out = new PrintWriter(new FileOutputStream(
"\\acest_fisier\\test2\\student.doc", true));
out.println(nume);
out.println(prenume);
out.println(grade);
out.close();
}
catch (IOException e)
{
System.out.println(e);
}
}
}
13.3.4.Citireaiscriereunuiobiectntrunfiier
ntrunprogramreal,multedinelementelededatepecarevreislestocaintrunfiiersunt
datemembrealeuneiclase.
Multe atribute ale unei clase sunt stocate n variabile de instan. O variabil de instan
reprezintolocaiedememoriefolositpentrustocareadatelorspecificeuneiinstaneaclasei.
Spresupunemcndefiniiaclaseisuntdefinitedouvariabiledeinstanisuntcreatecinci
obiectealeclasei.Javarezervcinciseturidevariabiledeinstan,independenteunulfade
cellalt.Totui,fiecaredintrecelecinciobiectefoloseteacelaisetdemetodeceleasociate
clasei.
120
LimbajuldeprogramareJava
Atuncicndsedoretepstrareainstaneiuneiclase,aceastasesalveazntrunfiier.Cndse
faceacestlucru,nfiiersuntsalvatenumaivariabileledeinstan,nuimetodeleclasei.
Etapelescrieriiicitiriiunuiobiectn/dinfiier.
Citirea unui obiect dintrun fiier este la fel de simpl ca i scrierea unui obiect ntrun fiier.
Totui, n locul clasei ObjectOutputStream se folosete clasa ObjectInputStream, iar n
loculclasei FileOutputStreamsefoloseteclasa FileInputStream.Seciteteunobiectdin
fiier apelnd metoda readObject(), definit n clasa ObjectInputStream. Metoda
readObject() returneaz o referin de tip Object. Aceast referin trebuie convertit la
tipulspecificalclaseiobiectuluicitit.
nexemplulurmtorsalvmnfiierinstanealeclasei Student.Atuncicndcitimoinstan
dinfiieroconvertimlatipul Student.Obiectulreturnatdemetoda readObject()esteapoi
atribuituneireferineaobiectuluirespectiviestefolositcaoricealtobiectdinprogram.
Exemplu definete o clas Student care conine trei variabile de instan, reprezentnd
numele, prenumele i nota studentului. Clasa implementeaz interfaa Serializable, astfel
nctssepoattransformainstaneleclaseinfluxurideoctei.Suntdeclaratetreiinstaneale
clasei,pentrufiecarefiindtransmisedatedeiniializareconstructoruluiclasei.Dateletransmise
suntatribuievariabilelelordeinstan.nacestscopsafolosituntabloudeobiecte,astfelnct
s putem apela la un ciclu for pentru a scrie fiecare obiect n fiier. Folosirea ciclului for
reducenumruldeliniipecaretrebuieslescriemnprogram.
121
ndrumardelaborator
Apelm, apoi, metoda writeObject() n primul ciclu for, fiindui transmis o referin a
fiecrei instanei a clasei Student declarat n program. Dup ce este scris n fiier ultima
instanaclasei,fiierulestenchis.
Fiierulestedeschisdinnou,dardeaceastdatpentruacitiobiectelestocatenfiier.nal
doilea ciclu for este apelat metoda readObject(), care citete din fiier fiecare obiect. Se
observcvaloareareturnatdemetoda readObject()esteconvertitlatipul Student.Se
realizeaz acest lucru deoarece metoda readObject() retutneaz o referin pentru clasa
Object, care este prea general pentru a fi folosit n acest program. Clasa Object este
superclasa tuturor obiectelor. Tabloul readStudentInfo este folosit pentru a stoca fiecare
obiectcititdinfiier.
Dup ce ultimul obiect este citit din fiier, fiierul este nchis, apoi sunt afiate pe ecran
variabileledeinstanalefiecruiobiect.
Student.java
import java.io.Serializable;
public Student()
{
}
CitScrOb.java
import java.util.*;
import java.io.*;
122
LimbajuldeprogramareJava
out.close();
in.close();
}
catch (Exception e)
{
System.out.println(e);
}
}
}
123
ndrumardelaborator
LABORATORUL12
14.Interfeegrafice
Interfaa grafic sau, mai bine zis, interfaa grafic cu utilizatorul (GUI), este un termen cu
neleslargcaresereferlatoatetipuriledecomunicarevizualntreunprogramiutilizatorii
si. Aceasta este o particularizare a interfeei cu utilizatorul (UI), prin care vom nelege
conceptul generic de interaciune ntre un program i utilizatorii si. Aadar, UI se refer nu
numailaceeaceutilizatorulvedepeecrancilatoatemecanismeledecomunicarentreacesta
iprogram.
Pachetul care ofer servicii grafice se numete java.awt, AWT fiind prescurtarea pentru
Abstract Window Toolkit i este pachetul care care a suferit cele mai multe modificari n
trecereadelaoversiuneJDKlaalta.
nprincipiu,creareauneiaplicaiigraficepresupuneurmtoarelelucruri:
Creareauneisuprafeedeafiare(cumarfiofereastr)pecarevorfiaezateobiectele
graficecareservesclacomunicareacuutilizatorul(butoane,controaledeeditare,texte,
etc.);
Crearea i aezarea obiectelor grafice pe suprafaa de afiare n poziiile
corespunztoare;
Definirea unor aciuni care trebuie s se execute n momentul cnd utilizatorul
interacioneazcuobiectelegraficealeaplicaiei;
"Ascultarea" evenimentelor generate de obiecte n momentul interaciunii cu
utilizatoruliexecutareaaciunilorcorespunztoareasacumaufosteledefinite.
Majoritateaobiectelorgraficesuntsubclasealeclasei Component,clasacaredefinetegeneric
o component grafic care poate interaciona cu utilizatorul. Singura excepie o constituie
meniurilecaremotenescclasaMenuComponent.
Aadar,printrocomponentsaucomponentgraficvomnelegencontinuareoriceobiect
care are o reprezentare grafic ce poate fi afiat pe ecran i care poate interaciona cu
utilizatorul.Exempledecomponentesuntferestrele,butoanele,barededefilare,etc.ngeneral,
toate componentele sunt definite de clase proprii ce se gsesc n pachetul java.awt, clasa
Componentfiindsuperclasaabstractatuturoracestorclase.
124
LimbajuldeprogramareJava
Creareaobiectelorgraficenurealizeazautomatiafiarealorpeecran.Maintieletrebuie
aezate pe o suprafa de afiare, care poate fi o fereastr sau suprafaa unui applet, i vor
deveni vizibile n momentul n care suprafaa pe care sunt afiate va fi vizibil. O astfel de
suprafa pe care se aeaz obiectele grafice reprezint o instan a unei clase obinut prin
extensia clasei Container; din acest motiv suprafeele de afiare vor mai fi numite i
containere. Clasa Container este o subclas special a clasei Component, fiind la rndul ei
superclasatuturorsuprafeelordeafiareJava(ferestre,appleturi,etc).
Aacumamvzut,interfaagraficserveteinteraciuniicuutilizatorul.Decelemaimulteori
programul trebuie s fac o anumit prelucrare n momentul n care utilizatorul a efectuat o
aciune i, prin urmare, obiectele grafice trebuie s genereze evenimente, n funcie de
aciunea pe care au suferito (aciune transmis de la tastatur, mouse, etc.). ncepnd cu
versiunea 1.1 a limbajului Java evenimentele se implementeaz ca obiecte instan ale clasei
AWTEventsaualesubclaselorei.
Un eveniment este produs de o aciune a utilizatorului asupra unui obiect grafic, deci
evenimentele nu trebuie generate de programator. n schimb, ntrun program trebuie
specificat codul care se execut la apariia unui eveniment. Interceptarea evenimentelor se
realizeazprinintermediulunorclasedetiplistener(asculttor,consumatordeevenimente),
clase care sunt definite n pachetul java.awt.event. n Java, orice component poate
"consuma"evenimentelegeneratedeoaltcomponentgrafic.
14.1.Pachetuljavax.swing
Deoarecelucrulcuobiecteledefinitenpachetul java.awtestegreoii,pealocuri,complicat,
Java ofer un pachet care se suprapune peste AWT, oferind un API mai prietenos
programatorului.DenumireaclaselorderivdinceleAWT,croralisaadugatprefixulJ.De
exemplu,clasasButtonadevenitJButton.
ncontinuarevomprezentatreiexemplecarefolosescpachetul javax.swingpentrucrearea
aplicaiilorcuinterfagrafic.
14.2.Oaplicaiecuinterfagraficsimpl
CasetaDialog.java
import javax.swing.*;
125
ndrumardelaborator
String str;
/*
* crearea unei casete apeland metoda showMessageDialog ce accepta 4
* argumente: referinta catre fereastra parinte, mesajul ce va fi
* afisat, textul din bara de titlu, constanta pentru indicarea
* tipului casetei acesta metoda este folosita si pentru a afisa
* butonul OK pe care utilizatorul il selecteaza pentru a confirma
* citirea mesajului. atunci cand este apasat mesajul determina
* inchiderea casetei dedialog
*/
/*
* o caseta de dialog pentru introducerea datelor este afisata prin
* apelarea metodei showInputDialog(). argumentul metodei il
* reprezinta mesajul prin care utilizatorul este invitat sa
* introduca informatiile in caseta de dialog ce vor fi memorate in
* variabila str
*/
System.out.println(str);
System.exit(0);
}
}
Rezultatulrulrii:
126
LimbajuldeprogramareJava
14.3.Creareauneicasetededialog
CasetaDialog.java
import javax.swing.*;
/*
* crearea unei casete apeland metoda showMessageDialog ce accepta 4
* argumente: referinta catre fereastra parinte, mesajul ce va fi
* afisat, textul din bara de titlu, constanta pentru indicarea
* tipului casetei acesta metoda este folosita si pentru a afisa
* butonul OK pe care utilizatorul il selecteaza pentru a confirma
* citirea mesajului. atunci cand este apasat mesajul determina
* inchiderea casetei dedialog
*/
/*
* o caseta de dialog pentru introducerea datelor este afisata prin
* apelarea metodei showInputDialog(). argumentul metodei il
* reprezinta mesajul prin care utilizatorul este invitat sa
* introduca informatiile in caseta de dialog ce vor fi memorate in
* variabila str
*/
System.out.println(str);
System.exit(0);
}
}
127
ndrumardelaborator
Rezultatulrulrii:
14.4.Concatenareaadouiruridecaractere
Fereastra.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
128
LimbajuldeprogramareJava
Fereastra()
{
initializare();
}
jtf_editare_text1.setText("");
jtf_editare_text1.setBounds(130, 10, 240, 22);
jtf_editare_text1.setFont(new java.awt.Font("SansSerif",
Font.ITALIC, 12));
jtf_editare_text1.setForeground(Color.black);
jtf_editare_text2.setText("");
jtf_editare_text2.setBounds(130, 40, 240, 22);
jtf_editare_text2.setFont(new java.awt.Font("SansSerif",
Font.PLAIN, 12));
jtf_editare_text2.setForeground(Color.black);
jb_concateneaza.setText("Concateneaza siruri");
jb_concateneaza.setBounds(150, 70, 200, 22);
jb_concateneaza.setFont(new java.awt.Font("SansSerif",
Font.BOLD, 12));
129
ndrumardelaborator
jb_concateneaza.setForeground(Color.red);
jb_concateneaza.addActionListener(
new java.awt.event.ActionListener() {
// metoda apelata automat de fiecre data cand utilizatorul executa
// un clic pe un buton
public void actionPerformed(ActionEvent e)
{
concateneazaSiruri();
}
});
jtf_siruri_concatenate.setText("");
jtf_siruri_concatenate.setBounds(130, 100, 240, 22);
jtf_siruri_concatenate.setFont(new java.awt.Font("SansSerif",
Font.PLAIN, 12));
jtf_siruri_concatenate.setForeground(Color.black);
jtf_lungime_sir.setText("");
jtf_lungime_sir.setBounds(380, 100, 20, 22);
jtf_lungime_sir.setFont(new java.awt.Font("SansSerif",
Font.PLAIN, 12));
jtf_lungime_sir.setForeground(Color.blue);
130
LimbajuldeprogramareJava
Main.java
class Main
{
public static void main(String[] args)
{
// se creeaza un obiect de tip Fereastra
Fereastra fereastra = new Fereastra();
Rezultatulrulrii:
131
ndrumardelaborator
Completaiaplicaiaprinadugareaunuibutonderesetareacasetelor.
132