Indrumar de Laborator Java

download Indrumar de Laborator Java

of 140

description

O colectie de exemple practice pentru incepatori in limbajul de programare java puse in practica la laborator

Transcript of Indrumar de Laborator Java

  • DominicMirceaKRISTLY AncaVULPE

    ndrumardelaborator |Braov,2009

    LIMBAJULDEPROGRAMAREJAVA

  • LimbajuldeprogramareJava

    i

    Cuprins

    1.CreareairulareaprogramelorJavadinliniedecomand........................................................11.1.Creareacoduluisurs...........................................................................................................11.2.Compilareaprogramului......................................................................................................21.3.Lansareanexecuieaprogramului.....................................................................................4

    2.CreareairulareaprogramelorJavacuajutorulplatformeiEclipse...........................................52.1.InterfaadelucruaplatformeiEclipse.................................................................................62.2.CreareaunuiproiectJava.....................................................................................................72.3.Creareapachetelor...............................................................................................................92.4.Creareaclaselor....................................................................................................................92.5.AplicaiaHelloWorld..........................................................................................................11

    3.StructuraunuiprogramJava.....................................................................................................133.1.Definiiaclasei....................................................................................................................133.2.Definiiametodelor............................................................................................................133.3.Instruciuni.........................................................................................................................13

    4.Tipuridedateprimitive.............................................................................................................154.1.Tipurintregi.......................................................................................................................154.2.Tipurireale.........................................................................................................................164.3.Tipulcaracter......................................................................................................................164.4.Tipullogic...........................................................................................................................174.5.Conversiintretipurilededateprimitive...........................................................................184.6.Variabile..............................................................................................................................184.7.Constante...........................................................................................................................194.8.Operatori............................................................................................................................194.9.Aplicaiecuvariabileioperatori......................................................................................20

    5.CitireadelatastaturclasaScanner..................................................................................215.1.Introducereadatelordelatastaturiafiarealor...........................................................22

  • ndrumardelaborator

    ii

    6.Structuridecontrol...................................................................................................................236.1.Instruciunidedecizie/selecie........................................................................................236.1.1.Instruciuneaif.........................................................................................................236.1.1.1.Clauzaelse......................................................................................................................246.1.1.2.Clauzaelse if...............................................................................................................246.1.1.3.Instruciuniifimbricate...................................................................................................256.1.1.4.Utilizareainstruciuniiif..................................................................................................26

    6.1.2.Instruciuneaswitch................................................................................................276.1.2.1.Instruciuniswitchimbricate.........................................................................................28

    6.2.Instruciuniiterative...........................................................................................................296.2.1.Instruciuneafor.......................................................................................................296.2.1.1.Cicluriforimbricate.........................................................................................................306.2.1.2.Utilizareainstruciuniifor...............................................................................................31

    6.2.2.Instruciuneawhile..................................................................................................356.2.2.1.Utilizareainstruciuniiwhile...........................................................................................36

    6.2.3.Instruciuneado..while.........................................................................................376.3.Instruciunidesalt.............................................................................................................386.3.1.Instruciuneabreak..................................................................................................386.3.2.Instruciuneacontinue...........................................................................................396.3.3.Instruciuneareturn................................................................................................39

    6.4.Utilizareainstruciunilordo..while,switch,breakicontinue........................407.Tablouri.....................................................................................................................................437.1.TablouriunidimensionaleVectori...................................................................................437.1.1.Declarareavariabileitablou........................................................................................437.1.2.Instanierea.................................................................................................................437.1.3.Iniializarea..................................................................................................................44

    7.2.TablourimultidimensionaleMatrice...............................................................................457.2.1.Creareaunuitabloumultidimensional.......................................................................457.2.2.Atribuireavalorilorctreelementelematricei...........................................................457.2.3.Proprietilength....................................................................................................46

  • LimbajuldeprogramareJava

    iii

    7.3.ClasaArrays....................................................................................................................467.3.1.Metodaequals()....................................................................................................467.3.2.Metodafill().........................................................................................................477.3.3.Metodasort().........................................................................................................487.3.4.MetodabinarySearch().....................................................................................487.3.5.Metodaarraycopy().............................................................................................49

    7.4.Aplicaiecuvectori.............................................................................................................507.5.Aplicaiecuvectori:Loteria................................................................................................527.6.Aplicaiecuomatricebidimensional...............................................................................53

    8.iruridecaractere.....................................................................................................................558.1.ClasaString....................................................................................................................558.2.ClasaStringBuffer......................................................................................................60

    9.Claseiprogramareorientatobiect........................................................................................639.1.Termeniutilizainprogramareaorientatobiect............................................................639.2.Definiiauneiclase.............................................................................................................639.2.1.Modificatorideacces..................................................................................................649.2.2.Alimodificatori...........................................................................................................649.2.2.1.Modificatorulfinal........................................................................................................649.2.2.2.Modificatorulstatic......................................................................................................659.2.2.3.Modificatorulsynchronized.......................................................................................65

    9.2.3.Proprieti...................................................................................................................659.2.4.Metode........................................................................................................................659.2.5.Constructori..................................................................................................................679.2.6.Declarareauneiinstaneauneiclase.........................................................................689.2.7.Accesullamembriiuneiclase.....................................................................................689.2.8.Suprancrcareametodelor.........................................................................................699.2.9.Cuvntulcheiethis..................................................................................................70

    9.3.Creareaiutilizareclaselor(1)...........................................................................................729.4.Creareaiutilizareaclaselor(2).........................................................................................749.5.Claseinterne.......................................................................................................................75

  • ndrumardelaborator

    iv

    10.Motenirea..............................................................................................................................8110.1.Accesullamembriiuneiclasemotenite.........................................................................8210.2.Apelareaconstructorilor..................................................................................................8310.2.1.Folosireacuvntuluicheiesuper...........................................................................8410.2.1.1.Folosireacuvntuluicheiesuper.....................................................................................84

    10.2.2.Motenireapemaimulteniveluri............................................................................8510.2.2.1.Motenireapemaimulteniveluri...................................................................................85

    10.2.3.Supradefinireametodelorfolosindmotenirea.......................................................8710.2.3.1.Supradefinireametodelorfolosindmotenirea..............................................................88

    10.2.4.Cuvntulcheiefinalimotenirea.......................................................................9011.Tratareaexcepiilor.................................................................................................................9111.1.Proceduridetratareaexcepiilor....................................................................................9111.1.1.Blocuritryimbricate...............................................................................................97

    11.2.Lucrulcuexcepiineinterceptate....................................................................................9811.3.Metodecarenutrateazexcepiile.................................................................................9911.4.Excepiiverificateineverificate...................................................................................10011.5.TratareaexceptiilrfolosindsuperclasaException..................................................10111.6.Exemple..........................................................................................................................10211.6.1.ExcepiideI/O.........................................................................................................10211.6.2.Excepii:Depireaindexuluiunuivector...............................................................10311.6.3.Excepii:Vectorcudimensiunenegativ................................................................10411.6.4.Excepii:NullPointerException..................................................................10511.6.5.Excepii:ArrayIndexOutOfBoundsException..........................................106

    12.Interfee................................................................................................................................10713.Fluxurideintrare/ieiere(fiiere).......................................................................................11213.1.Fiiereisistemedefiiere............................................................................................11213.2.ClasaFILE.....................................................................................................................11213.2.1.Afiarealisteidefiieredintrundirector...............................................................115

  • LimbajuldeprogramareJava

    v

    13.3.Fluxuri.............................................................................................................................11613.3.1.Scriereantrunfiier...............................................................................................11713.3.2.Citireadintrunfiier.............................................................................................11813.3.3.Adugareadatelorntrunfiier...........................................................................11913.3.4.Citireaiscriereunuiobiectntrunfiier..........................................................120

    14.Interfeegrafice....................................................................................................................12414.1.Pachetuljavax.swing..............................................................................................12514.2.Oaplicaiecuinterfagraficsimpl............................................................................12514.3.Creareauneicasetededialog........................................................................................12714.4.Concatenareaadouiruridecaractere.......................................................................128

  • ndrumardelaborator

    vi

  • LimbajuldeprogramareJava

    1

    LABORATORUL11.CreareairulareaprogramelorJavadinliniedecomandPaiicetrebuieurmaipentrucreareaunuiprogramJavasuntprezentaischematicnfigurademaijos:

    Fig.1.EtapelenecesarecreriiunuiprogramJava

    1.1.CreareacoduluisursCodul surs este scris n limbajul Java i rezid ntrunul saumaimulte fiiere text avndextensia.java.Pentru scriereaprogramului sepoateutilizaoriceeditorde texte.Dac selucreaz sub sistemuldeoperareMicrosoftWindows, sepoateutiliza,deexemplu, aplicaiaNotepad.DacselucreazsubUnix/Linuxprogramulvipoatefifolositpentruscriereacoduluisurs.Figura2prezintcodulsursalunuiprogramJavacareafieazpeecrantextulHelloWorlddinJava!,aacumaratelnaplicaiaNotepad.

    Fig.2.EditareaprogramelorJavacuajutorulaplicaieiNotepaddinWindows

    Numele fiierului care conine codul surs al programului trebuie s aib numeleidenticcunumeleclaseiceconinemetodamain().

  • ndrumardelaborator

    2

    1.2.CompilareaprogramuluiTransformarea codului surs n codul de octei (byte code) neles de JVM (Java VirtualMachine) se realizeazprin compilarea programului. Pe sistemeleWindows acest lucru esterealizatdeexecutabiluljavac.exe,cepoatefiapelatdintrofereastrsistem.CompilatorulJavafacepartedinpachetulJDK(JavaDevelopmentKit)caretrebuiesfieinstalatpecalculatorulpecaresedezvoltprogrameJava.Acestpachetpoatefidescrcat,gratuit,depe siteulcompanieiSunmicrosystems.Programeleprezentate ncontinuareau fost scrise itestatefolosinduseversiunea6apachetuluiJDK.Acestpachetpoatefidescrcatdelaadresa:http://java.sun.com/javase/downloads/index.jsp.PentruacompilaprogramulHelloWorld,prezentatnfigura2,sedeschideofereastrsistem(CommandPrompt),ncaresescrieurmtoareacomand,urmatdetastaCR(Enter):javac HelloWorld.java

    Dacprogramulafostcompilatcusucces,peecranaparedinnoucommandpromptul:

    ndirectoruldelucruapareunnoufiier,numitHelloWorld.class,ceconinecoduldeocteialprogramului(aacumaratfigura3).

    Fig.3.Codulsursifiierulobinutnurmacompilrii

  • LimbajuldeprogramareJava

    3

    Dacprogramulnuafostcompilatcusucces, nfereastrasistempotaparediferitemesajedeeroare,precum:

    javac isnot recognized as an internalor external command,operableprogramorbatchfile.Cauzeposibile:

    1. nuesteinstalatpachetulJDK.o Soluie:instalareapachetuluiJDK;

    2. esteinstalatpachetulJDK,darcaleadirectoruluibinnuafostinclusnvariabiladesistemPATH.

    o Soluie:adugarea lavariabiladesistemPATHadirectoruluibin.Acestlucru se poate realiza, n Windows, din fereastra System properties,accesibil prin clic dreapta pe iconiaMy Computer i selecia opiuniiProperties,saudinControlPanel(accesibildinStartMenuSettings)n seciunea Advanced se efectueaz clic pe butonul EnvironmentVariables. n fereastra care se deschide, din lista System variables, seselecteazvariabilaPATH,dupcareseapasbutonul Edit.Lasfritulvaloriivariabileiseadaugcaracterul;,dacnuexist,dupcaresetrececaleacompletctredirectorulbinalpachetuluiJDK.

    Fig.4.IncludereadirectoruluibinalpachetuluiJDKnvariabiladesistemPATH

  • ndrumardelaborator

    4

    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:;expectedCndoeroareconinecuvntulexpectedurmatdeunfragmentdeprogram nseamncfragmentulrespectivconineoeroaredesintax. nacestexemplu,linia6esteceacareagenerateroarea.

    1.3.LansareanexecuieaprogramuluiPentruaputea lansa nexecuieunprogramJava,calculatorulgazdtrebuiesaib instalatmaina virtual Java (JVM). Aceasta este reprezentat de pachetul JRE (Java RuntimeEnvironment),careesteinclusinpachetulJDK.LansareanexecuieaprogramuluiHelloWorldserealizeazprincomanda:java HelloWorld

    nfereastraCommandPromptaparemesajulHelloWorlddinJava!:

  • LimbajuldeprogramareJava

    5

    LalansareanexecuieaunuiprogramJavadinliniedecomandesteutilizatfiierulcuextensia.class,daraceastextensienusemenioneaz,cinumainumelefiierului(caretrebuiescoincidexactcunumeleclaseiceconinemetodamain()).

    2.CreareairulareaprogramelorJavacuajutorulplatformeiEclipseEclipseesteoplatformmultiscoppentrudezvoltareade software, scris, nmareparte, nlimbajulJava,astfelputndrulapeoricesistemdeoperareactual.Oferunmediuintegratdedezvoltare(IDEIntegratedDevelopmentEnvironment)pentrudiverselimbajedeprogramare(Java, C/C++, PHP, Python, Perl, Cobol). Baza codului surs provine din platforma VisualAgedezvoltatdeIBM,astfelseexplicsuportulprimitdinparteaacesteicompanii.Platforma Eclipse se ncadreaz n categoria programelor gratuite i open source. Ceamairecentversiune,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 EclipseGanymedeiJDK6iruleazpeJRE6.VersiunileplatformeiEclipse,ncepndcuversiunea3.2,suntdenumitedupsateliiinaturaliiartificialiaiplaneteiJupiter(Callisto,Europa,Ganymede).Urmtoareaversiune,programatafilansatoficialn26iunie2009,sevanumiEclipseGalileo.

  • ndrumardelaborator

    6

    2.1.InterfaadelucruaplatformeiEclipseLa pornirea mediului Eclipse este cerut calea unui director care va fi spaiul de lucru alplatformei.Aici se vor salvaproiectele i vor fi stocatedatelenecesare rulriiproiectelor nlucru.

    Fig.5.Seleciaspaiuluidelucru

    Dac se utilizeaz acelai spaiu de lucru pentru toate proiectele, se poate bifa csua devalidareUse thisas thedefaultanddonotaskagain,pentru aelimina aceast ntrebare lafiecarepornireaplatformei.FerestrelevizibiledininterfaaEclipsesuntgrupatelogicnperspective.O perspectiv indic numrul de ferestre vizibile, poziia lor i opiunile vizibile n acesteferestre, nfunciede limbajulutilizat nproiectuldeschis. ncapturiledeecranprezentate nacest ndrumar se va folosi perspectiva Java. Perspectiva curent se poate schimba de labutoanelededicatesituatenparteadreaptsusaworkbenchuluiEclipse.Figura6prezintferestrelevizibiledinperspectivaJavaisemnificaialor.

    Fig.6.ComponenaperspectiveiJava

  • LimbajuldeprogramareJava

    7

    2.2.CreareaunuiproiectJavaDinmeniulFileNewsealegeopiuneaJavaProject.

    Fig.7.a.CreareaunuiproiectJavanEclipse

    nfereastracaresedeschidetrebuiespecificatnumeleproiectului.EsteindicatsfieselectatopiuneaCreateseparatefoldersforsourcesandclassfilesdinseciuneaProjectlayout,pentrua nu amesteca fiierele ce conin codul surs cu cele ce conin codul de octei, executabil.PentruunproiectcompletnouestebinessealeagopiuneaCreatenewprojectinworkspacea seciuniiContents.ApsareabutonuluiNext vadetermina accederea lamaimulteopiuni,cum ar fi importul unor librrii suplimentare,modificarea directoarelor unde vor fi salvatesurseleicoduldeocteialproiectului,etc.Crearea i deschiderea nworkbench a noului proiect se realizeaz prin apsarea butonuluiFinish.

  • ndrumardelaborator

    8

    Fig.7.b.CreareaunuiproiectJavanEclipse

    Fig.8.ProiectnoudeschisnworkbenchulplatformeiEclipse

  • LimbajuldeprogramareJava

    9

    2.3.CreareapachetelorClasele unui proiect Java sunt grupate, de regul, n pachete. Criteriile de grupare in defunciilepecare le ndeplinescaceleclase nproiect(lucrulcufiiere,accesul labazededate,comunicaia prin reea, etc.). De asemenea, pachetele asigur i controlul numelor i alvizibilitii.Fizic,unpachetesteundirectoralproiectului.Accesul la clasele dintrun pachet se face prin utilizarea instruciunii import la nceputulcoduluisurs. Instruciuneaimport trebuiesconinnumelepachetelor ialeclaselorcarevorfifolositencodulsurs.Crearea unui pachet n Eclipse se realizeaz prin clic dreapta pe numele proiectului, iar dinmeniul care apare se alegeNewPackage. n fereastra ce se deschide se specific numelenouluipachetului,dupcareseapasbutonulFinish.

    Fig.9.Crearepachetuluiprogramprincipal

    Unpachetpoate coninealtepachete, care, la rndul lor,pot coninealtepachete. n cazulacestaseefectueazclicpenumelepachetuluincaresefaceadugarea,dupcareseparcurgeaceleaietapeprezentatemaisus.

    2.4.CreareaclaselorClasele aparin pachetelor, prin urmare adugarea se va face prin clic dreapta pe numelepachetului; se selecteazNewClass. n fereastra care se deschide se completeaz numeleclaseiiseselecteazopiunilepentruaceasta.

  • ndrumardelaborator

    10

    Fig.10.Creareauneiclase

    Dacsedoretecaclasacreatsconinmetodamain(),atuncisebifeazopiuneapublicstaticvoidmain(String[]args)dinseciuneaWhichmethodstubswouldyou liketocreate?.Serecomandcamodificatoruldeaccesalclaselorsfiecelpublic(seciuneaModifiers).

    Se recomand respectarea urmtoarei convenii de notare: numele claselor ncepntotdeauna cu litermare.Dac numele coninemaimuli atomi lexicali (cuvinte),fiecaredintreeincepculitermare.MaimultedetaliidespreconveniadenotareJavaaidentificatoriloribeneficiileadusederespectareaacesteiasegsesclaadresa:http://en.wikipedia.org/wiki/Naming_conventions_(programming)#Java_language

    DupapsareabutonuluiFinish,estedeschisautomat fiierulceconinedeclaraianoiiclase,aacumsevedenfigura11.

  • LimbajuldeprogramareJava

    11

    Fig.11.ClasageneratautomatdeEclipse

    2.5.AplicaiaHelloWorldPentruafiareamesajuluiHelloWorlddinJava!sefoloseteinstruciunea:System.out.println(Hello World din Java!); Aceast instruciune trebuie plasat n interiorul metodei main() (care este echivalentulprogramuluiprincipal:execuiaprogramuluincepecuaceastmetod).

    Fig.12.AplicaiaHelloWorld

  • ndrumardelaborator

    12

    Deoarece instruciunea System.out.println() este foarte uzitat, editorulplatformeiEclipseoferoscurtturpentruscriereaei.Tastareatextuluisyso,urmatde combinaia de taste CTRL+Space determin introducerea instruciuniiSystem.out.println().

    Lansarea n execuie a programului se poate face dinmeniul RunRun, prin combinaia detasteCTRL+F11sauprinapsareabutonului dinbaradeinstrumente.naintede lansarea nexecuieaunuiprogrameste recomandabil s salvai fiierelepecareleaimodificat.Oricum,mediulEclipsevvacerepermisiuneadeasalvaacestefiierenaintedelansareanexecuie.Rezultatul rulrii programului este afiat n fereastra Console, aflat n parte de jos aworkbenchului.

    Fig.13.RezultatelerulriisuntafiatenfereastraConsole

  • LimbajuldeprogramareJava

    13

    3.StructuraunuiprogramJava3.1.Definiiaclasei

    3.2.Definiiametodelor

    3.3.Instruciuni

  • ndrumardelaborator

    14

  • LimbajuldeprogramareJava

    15

    LABORATORUL24.TipuridedateprimitivenlimbajulJavaexistdoucategoriidetipuridedate:

    tipuriprimitive:tipurilenumerice,tipulcaracteritipullogic; tipulreferin:reineoreferin(adres)ctreoinstanauneiclase(obiect).

    LimbajulJavadefineteopttipuridedateprimitive.Acesteasepotclasifican: tipurintregi: byte,short,intilong; tipurireale:floatidouble; tipulcaracter:char; tipullogic:boolean.

    4.1.TipurintregiAcestetipurisuntreprezentate nmemoriecanumerecusemn(reprezentare ncomplementfade2).LimbajulJavanuofertipurintregifrsemn.Tipul Octeialocai Acoperireabyte 1 128pnla127short 2 32768pnla32767int 4 2147483648pnla2147483647long 8 9223327036854755808Lpnla922332703685475807L Tipul byte este folosit, de obicei, pentru efectuarea unor operaii la nivel de bit sau laprelucrarealanivelsczut(lowlevel)afluxurilor(streamfiiere,socketuri,etc.).Tipulshortestedeseorifolositnlocultipuluiint,maialesdinmotivedeoptimizareautilizriimemoriei.Tipulint este celmaides folosit, avnd avantajul c areo acoperire suficientdemare, iarnumrul de octei folosii pentrumemorare este de dou orimaimic dect tipul urmtor(long).Tipullong estemai rar folosit, nlocuind tipulintdoar n cazuldepirii acoperirii. LiteraliintregidetiplongvoraveasufixulL;deexemplu:long l = 23568912457801112L.n mod implicit, literalii ntregi sunt de tip int. Java suport utilizarea literalilor ntregireprezentaiinbazeledenumeraiehexazecimalioctal.

  • ndrumardelaborator

    16

    Utilizarealiteralilornbazeledenumeraiehexazecimalioctal // numrul 10 scris n hexazecimal int example_hexa = 0xA; // numrul 8 scris n sistemul octal (folosirea acestei baze de numeraie // nu este recomandat dat fiind forma confuz de declarare) int example_octa = 010;

    4.2.TipurirealeNumerele reale sunt reprezentate n limbajul Java ca numere cu semn (reprezentare ncomplementfade2,virgulmobilsimplsaudublprecizie).LimbajulJavanuofertipurirealefrsemn.Existdou tipuridenumere reale reprezentate nvirgulmobil:float (simplprecizie) idouble(dublprecizie).Numerele iraionale(cumarfisau2)sunttrunchiate,putnduselucradoarcuoaproximarealor.Esterecomandatfolosireatipuluifloatnumaicndviteza lacaretrebuiesrulezeaplicaiatrebuiesfiefoartemare(saumemoriafolositdeaceastatrebuiesfiefoartemic).nmod implicit literaliinumererealesuntreprezentaicavaloridouble.LiteraliidetipfloatpoartsufixulF.Deexemplu:// declarare de float float example_float = 5.505F; Caracteristicilecelordoutipuriesteprezentatntabelulurmtor:Tipul Octeialocai Acoperireafloat 4 Aproximativ:3.40282347E+38F(67zecimale)double 8 Aproximativ:1.79769313486231570E+308(1314zecimale)

    4.3.TipulcaracterUtilizareacaracterelornJavasefacecuajutorultipuluichar.TipulcaracterutilizeazpentrustocaredoiocteicereincodulUnicodealcaracterului.

  • LimbajuldeprogramareJava

    17

    Avantajul folosirii standarduluiUnicodeeste acela c acoperireaestede65535de caractere(valorilelimitfiind\u0000i\uFFFF),fadecodulASCII(AmericanStandardCodesforInformationInterchange)carearedoar128decaracteresaudeASCIIextinscu256decaractere.Dei se poate utiliza orice caracter, afiarea acestuia depinde de sistemul de operare(caractereleUnicodenecunoscutesistemuluideoperarenuvorputeafiafiate).Literaliidetipcaractersuntscriintreapostrofuriipotconinesecveneescape(secvenedecaracterecarencepcu\).Declarareauneivariabiledetipcaractercuiniializare: // variabila ch va contine caracterul avand codul 1111 // (codul este un numar hexazecimal) char ch = '\u1111'; Urmtorultabelprezintcelemaifolositesecveneescape:

    Secvenaescape ValoareaUnicode Denumire\b \u0008 Backspace\t \u0009 tab(TAB)\n \u000A Linefeed(LF)\r \u000D carriagereturn(CR)\ \u0022 ghilimele\ \u0027 apostrof\\ \u005C backslash

    4.4.TipullogicTipullogicpermitememorareadoaradouvalori:adevrat(true)ifals(false).Desemnareaacestuitip,nlimbajulJava,sefacecuajutorulcuvntuluicheieboolean.Tipulbooleaneste folosit, nprinicpal,pentruevaluareacondiiilor logice. Introducerea saaeliminatneclaritiledinlimabjeleCiC++,undeevaluareacondiiilorsefceafolosindntregi.

    Nusepoatefaceconversientretipurilebooleanicelentregi.

  • ndrumardelaborator

    18

    4.5.ConversiintretipurilededateprimitiveTabelulurmtorsintetizeazconversiilepermisentretipurilededateprimitive: byte short int long char float double byte = * * * ! * short ! = * * ! * int ! ! = * ! * long ! ! ! = ! char ! ! * * = * float ! ! ! ! ! = * double ! ! ! ! ! ! = =acelaitip;!conversianusepoateface;*conversiasepoateface;conversiasepoateface,darcupierderedeprecizie.4.6.VariabileCanoricelimbajdeprogramare,tipurilededatesuntutilizate,nprincipal,pentrudescriereavariabileloristabilescfeluldatelorpecarelepotmemora,cantitateadememorienecesarivalorilecelepotfiasociate.Maiconcret,ovariabilesteunspaiudememoriedestinatstocriiuneivalori ntrunformatcorespunztortipuluideclaraticreiaiseataeazoetichetnumelevariabilei.Variabileleipotschimbavaloareaoricndpeparcursulprogramului.Pentrudeclarareavariabilelor,limbajulJavautilizeazsintaxa:Sintaxutilizat: id_tip id_var1[, id_var2 [, ...]]; Deexemplu,sepoatescrie:int variabla; boolean bool; Semaipotfaceideclarrideforma:int v1, v2; daraceastmodalitatenuesteindicat.Deseoriesterecomandatcavariabiladeclaratsconiniovaloareiniial:int v1 = 10;

  • LimbajuldeprogramareJava

    19

    Astfel,sepoatespune,pescurt,cdefinireauneivariabilereprezintdeclarareaei, lacareseadaugoperaiadeiniializare. Declararea variabilelor se poate face oriunde pe parcursul programului. De asemenea,variabilelesepotredeclara,curestriciacaredeclarareasnusefac nacelaibloccuprimadeclaraie(decisnuseaflenacelaidomeniudedeclaraiescope).Referitor lanumele variabilelor se recomanddenumirea lor n concordan cu semnificaiadatelorpecare lereprezint.Aceastmsurconferoclaritatesporitsurseiiminimizeaztimpulnecesarefecturiiunorcorecturisaumodificri.Deasemenea,numeleuneivariabilenupoate ncepecuocifr;elepot ncepecuorice litersaucaracterulunderscore(_).

    4.7.ConstanteDefinirea constantelor n Java se face prefixnd definirea unei variabile cu final. Folosireaconstanteloreste indicat cndprogramatorul vrea ca valoareaunei variabile snupoat fischimbat sau cnd se dorete stabilirea unor aliasuri. Imaginaiv c ntrun program estenecesar folosirea demaimulte ori a constanteimatematice . Acest lucru se poate faceelegant fcnd o declarare de forma (exemplul este pur didactic; n practic, clasajava.lang.Mathpoateoferivaloareaacesteiconstante):final double PI = 3.14159;

    4.8.Operatorintabelulurmtorsuntprezentaitoioperatorii,nordineaprecedeneilor.Operatorul Tipuldeasociativitate[] . () (apel de metod) delastngaladreapta! ~ ++ -- +(unar) (unar) () (cast) new deladreaptalastnga* / % delastngaladreapta+ - delastngaladreapta> >>> delastngaladreapta< >= instanceof delastngaladreapta== != delastngaladreapta& delastngaladreapta^ delastngaladreapta| delastngaladreapta&& delastngaladreapta

  • ndrumardelaborator

    20

    Operatorul Tipuldeasociativitate|| delastngaladreapta?: delastngaladreapta= += -= *= /= %= &= |= ^= = >>>= deladreaptalastnga

    4.9.AplicaiecuvariabileioperatoriVariabileOperatori.java public class VariabileOperatori { public static void main(String[] args) {

    // declararea variabilelor int a = 1; int b = 1; // 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");

  • LimbajuldeprogramareJava

    21

    // 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 folosindinstruciuneaimport:import java.util.Scanner; PentruacitidatedelatastaturtrebuieconstruitunobiectdetipScannercearecaargumentalconstructoruluifluxulSystem.in:Scanner tastatura = new Scanner(System.in); ncontinuaresepotutilizametodeledefinite nclasaScannerpentrupreluareadatelorde latastatur.Deexemplu:

    datecevorfimemoratentrovariabilStringString nume = tastatura.nextLine();

    datecevorfimemoratentrovariabildetipntreg

    int ani = tastatura.nextInt();

    Maimultedetalii:http://java.sun.com/javase/6/docs/api/java/util/Scanner.html.

  • ndrumardelaborator

    22

    5.1.IntroducereadatelordelatastaturiafiarealorIntrariIesiri.java import java.util.Scanner; public class IntrariIesiri { public static void main(String[] args) {

    /* * pentru a citi date de la consola trebuie construit un obiect de * tip Scanner */ Scanner tastatura = new Scanner(System.in); System.out.print("Introduceti numele si prenumele: "); /* * utilizarea metodei nextLine(). nextLine() parcurge linia si * returneaza intrarea care a fost parcursa */ String nume = tastatura.nextLine(); System.out.print("Cati ani aveti?"); // metoda next.Int() scaneaza intrarea intr-o variabila de tip int. int ani = tastatura.nextInt(); System.out.println("Buna " + nume + " anul viitor veti avea " + (ani + 1) + " ani."); tastatura.nextLine(); System.out.print("str="); String str = tastatura.nextLine(); } }

  • LimbajuldeprogramareJava

    23

    LABORATORUL36.Structuridecontrol6.1.Instruciunidedecizie/selecie6.1.1.InstruciuneaifInstruciunea if ceremainii virtuale Java s evalueze o expresie (condiie) la o valoare deadevr.Dac expresia este adevrat, atunci sunt executate una saumaimulte instruciuniaflatenbloculif.Dacexpresianuesteadevrat,instruciunilerespectivesuntomise.Expresiaevaluatdintroinstruciuneifsenumeteexpresiecondiional.Formatgeneral: if () [];

    Schemlogic:

    Exemplu: int m=3; int n=4; if(m>n) System.out.println("m"); if(n>=m) System.out.println("n");

  • ndrumardelaborator

    24

    6.1.1.1.ClauzaelseAceast clauz aparine instruciunii if i conine una saumaimulte instruciuni care suntexecutateatuncicndexpresiacondiionaldininstruciuneaifestefals.Formatgeneral: if () []; [else [];]

    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 () ; else if () ; else ;

  • LimbajuldeprogramareJava

    25

    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.InstruciuniifimbricateExistsituaiicndtrebuieluatonoudeciziedacprimacondiieesteadevrat.Formatgeneral: if () if () ; else ; else ;

    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,atunciestenecesarcainstruciunile s fie ncadrate de acolade. Se recomand utilizarea acoladelorntotdeauna,indiferentdenumruldeinstruciunidinblocurileifielse.

  • ndrumardelaborator

    26

    6.1.1.4.Utilizareainstruciuniiif EcuatiaDeGradulDoi.java import java.util.*; public class EcuatiaDeGradulDoi { public static void main(String[] args) { /* * construirea unui obiect de tip Scanner pentru citirea de la * tastatura a coeficientilor ecuatiei de gradul 2 */ Scanner valoare = new Scanner(System.in); System.out.print("coeficientul lui x^2:"); // memorarea coeficientului luix^2 in variabila a double a = valoare.nextDouble(); System.out.print("coeficientul lui x:"); // memorarea coeficientului luix in variabila b double b = valoare.nextDouble(); 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");

  • LimbajuldeprogramareJava

    27

    System.out.println("x1= " + (-b / (2 * a)) + "+ i*" + (Math.sqrt(-delta) / (2 * a))); System.out.println("x2= " + (-b / (2 * a)) + " -i*" + (Math.sqrt(-delta) / (2 * a))); // afisarea cu printf // System.out.printf("x1=%.2f +i*%.2f", -b / (2 * a), // Math.sqrt(-delta)/ (2 * a)); // System.out.printf("\nx2=%.2f -i*%.2f", -b / (2 * a), // Math.sqrt(-delta)/ (2 * a)); } else { if (delta == 0) { System.out.println("Radacini reale si egale:"); System.out.println("x1=x2=" + (-b / (2 * a))); } else { if (delta > 0) { System.out.println("Radacini reale si distincte:"); System.out.println("x1=" + ((-b + Math.sqrt(delta)) / (2 * a))); System.out.println("x2=" + ((-b - Math.sqrt(delta)) / (2 * a))); // afisarea cu printf // System.out.printf("x1=", -b + Math.sqrt(delta) / // (2 * a)); // System.out.printf("\nx2=", -b - Math.sqrt(delta) / // (2 * a)); } } } } } } } }

    6.1.2.InstruciuneaswitchOsoluiealternativlafolosireauneilungiseriideclauzeif...elseoreprezintfolosireauneiinstruciunidecontrolswitch,cunoscutisubnumeledeinstruciuneaswitch...case.Instruciunea switch cere mainii Java s compare o expresie cu mai multe valori date,coninute ntroetichetcase.Dacvalorilesepotrivesc,seexecut instruciuniledinbloculcase.

  • ndrumardelaborator

    28

    Formatgeneral: switch() { case(): ; [break;] case(): ; [break;] : : case(): ; [break;] default: ; [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"); }

    1. n cazul n care n clauza case a crei constant se potrivete cu valoareaexpresieidinswitchicomandabrakenuestefolosit,atunciseexecutiinstruciunile din clauzele case urmtoare, pn cnd ntlnete primulbreaksausetermininstruciunea switch.

    2. Oclauzelseestefolositntroinstruciuneifpentruadefiniinstruciunileexecutate atunci cnd condiia instruciunii nu este adevrat. Instruciuneaswitchareofunciesimilar,numitclauzimplicit(defaultstatement).

    3. Clauza implicit seamn cuo clauzcase iesteplasat ntotdeaunadupultimaclauzcase.Aceastanuareataatoconstant inicio instruciunebreak, deoarece este ultima instruciune din blocul switch. InstruciunileconinutenclauzaimplicitsuntexecutateatuncicndJavaajungelaaceasta.

    6.1.2.1.InstruciuniswitchimbricateO instruciuneswitch imbricat esteo instruciuneswitch inserat ntro clauzcase saudefaultauneialteinstruciuniswitch.

  • LimbajuldeprogramareJava

    29

    6.2.InstruciuniiterativeAcesttipde instruciunicermainiivirtualeJavasexecuteunasaumaimulte instruciuni, nmodrepetat,atttimpctestendeplinitocondiie.nJavaexist3tipurideinstruciuniiterative:

    for:instruciuneiterativcutestiniial,cunumrcunoscutdepai; while:instruciuneiterativcutestiniial,cunumrnecunoscutdepai; dowhile:instruciuneiterativcutestfinal,cunumrnecunoscutdepai.

    6.2.1.Instruciuneafor Instruciuneaforseutilizeazatuncicndsecunoatesausepoateantecalculanumrulderepetriainstruciunii/bloculuideinstruciuniicorpulinstruciuniifor.Formatgeneral: for ([];[];[]) []; Schemlogic:

    Exemplu: for (int i=0 ; i

  • ndrumardelaborator

    30

    Moduldelucru:Ciclu Instruciune/operaie

    1234

    i=0test0

  • LimbajuldeprogramareJava

    31

    Exemplu: for(int i=0;i

  • ndrumardelaborator

    32

    System.out.println("Suma numerelor impare pana la " + a + " este " + suma); } { int suma = 0; for (x = 0; x

  • LimbajuldeprogramareJava

    33

    for (int j = 2; j

  • ndrumardelaborator

    34

  • LimbajuldeprogramareJava

    35

    LABORATORUL46.2.2.Instruciuneawhile Ciclulwhile ceremainiivirtuale Java sexecuteuna saumaimulte instruciuni,din corpulciclului,atttimpctoexpresiecondiionalesteadevrat.Formatgeneral: while () [];

    Schemlogic:

    Exemplu: int i=0; while (i

  • ndrumardelaborator

    36

    6.2.2.1.Utilizareainstruciuniiwhile ExempluWhile.java import java.util.Scanner; public class ExempluWhile { public static void main(String[] args) { Scanner a = new Scanner(System.in); System.out.print("Cati bani doresti sa retragi? "); // memorarea valorii creditului in variabila retragere double retragere = a.nextDouble(); System.out.print("Cu cati bani vrei sa contribui in fiecare an? "); // memorarea valorii ratei anuale in variabila rata double rata = a.nextDouble(); System.out.print("Introduceti dobanda %: "); /* * declararea unei variabile (dobanda)pentru memorarea ratei * dobanzii(in procente) */ double dobanda = a.nextDouble(); /* * 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; // valoarea rambursata in fiecare an double x = rata - dobandaP;

  • LimbajuldeprogramareJava

    37

    if ((retragere - returnat) < (x)) { // calculul ultimelor luni cand suma de rambursat impreuna cu // dobanda este mai mica decat rata anuala luni += (((retragere - returnat) + dobandaP) * 12) / x; } else { luni += 12; } returnat += x; } int l = (int) luni % 12; System.out.println("Poti plati in " + (int) luni / 12 + " ani si " + l + " luni."); } }

    6.2.3.Instruciuneado..while Ciclul do..while ceremainii virtuale Java s execute una saumaimulte instruciuni, dincorpulciclului,atttimpctoexpresiecondiionalesteadevrat.Formatgeneral: do { [;] } while (); Schemlogic:

    Ciclul do..while este format din ase componente: cuvntul cheie do, corpul cicluluido..while,definitdeacoladededeschidere i nchidere,unasaumaimulte instruciunidin

  • ndrumardelaborator

    38

    corpul ciclului, cuvntul cheie while, expresia condiional, ncadrat de paranteze, i uncaracterpunctivirgul.Exemplu: int i=0; do { System.out.println("i="+i); i++; } while(i

  • LimbajuldeprogramareJava

    39

    6.3.2.InstruciuneacontinueInstruciuneacontinueeste folosit ncorpulunuiciclupentruaceremainiivirtuale Javasrenunelaexecuiaiteraieicurenteistreaclaurmtoarea.Exemplu: for(int i=2;i

  • ndrumardelaborator

    40

    6.4.Utilizareainstruciunilordo..while,switch,breakicontinueExDoWhileSwitch.java import java.util.Scanner; public class ExDoWhileSwitch { public static void main(String[] args) { Scanner n = new Scanner(System.in); 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

  • LimbajuldeprogramareJava

    41

    int sumaimp = 0; for (int x = 1; x

  • ndrumardelaborator

    42

    System.out.println("Optiunea dumneavoastra nu este definita."); } } while (c != 6); } }

  • LimbajuldeprogramareJava

    43

    LABORATORUL57.TablouriRezervareamemorieipentrustocareauneidateesteooperaiefoartesimpl:sefoloseteuntipdedateiunnumepentruadeclaraovariabil.Spresupunemctrebuierezervatmemoriepentruastoca100deelementedeunanumittip.Laprimavederenuparecomplicat:trebuiedeclarate100devariabile.Acest lucrupresupunegsirea a 100 de nume sugestive i unice, o sarcin nu tocmai uoar, iarmanagementulvariabilelor ar fi un comar. Acest lucru poate fi simplificat prin declararea unui tablou.Untablouarenevoiedeunsingurnumeunicisugestiv,carepoatefiapoifolositpentrureferireatuturorcelor100deelementededatesauorictesuntnecesarenprogram.Un tablouesteo coleciede variabiledeacelai tipdedate, creia iesteasociatunnume.Fiecare variabil din colecie estenumit element al tabloului.Un element al tabloului esteidentificatprintrocombinaientrenumeletablouluiiunindexunic.Un indexesteun ntregcuprins ntrezeroinumrulmaximdeelementealetabloului,minusunu.Indexulestespecificatntreparantezedrepte,ndreaptanumeluivariabileitablou.

    7.1.TablouriunidimensionaleVectori7.1.1.DeclarareavariabileitablouDeclarareauneivariabiledetiptablouunidimensionalsefaceutilizndsintaxa:Sintaxutilizat: [];

    sau[] ;

    unde: reprezinttipuldedatealelementelorvectorului estenumelevectorului,caretrebuiesfieunicisugestiv [] specificfaptulcestedeclaratunvector,inuosimplvariabil

    7.1.2.InstaniereaInstanierea defineteprocesulde creareaunuiobiect, respectivalocareamemorieipentruacestaiefectuareatuturoriniializrilornecesare.

  • ndrumardelaborator

    44

    Tipul tablou este un tip de date referin, prin urmare trebuie utilizat instaniereapentrucreareaunuiobiectdetiptablou.

    Memoriaestealocatdinamic,printrunprocesntreietape:

    1. Declarareauneivariabilereferin;2. Alocareamemoriei;3. Asocierealocaieidememorierezervatcuvariabilareferin.

    Declarareaiinstaniereaunuivectorpotfifcutesimultan: int[] note = new int[6]; OperatorulnewceremainiivirtualeJavasrezervememoriepentrustocareaa6valorintregiprinnew int[6]. Operatorul new returneaz adresa primului element. Celelalte elemente sunt dispuse, nmemorie,unalngcealalt,secvenial,dupprimulelement.Adresareturnatestememoratnvariabilareferin.

    1.Cndsedeclaruntablousespecificntotdeaunanumruldeelemente.2.Primul indexaltablouluieste0,inu1, iarultimulelementaltablouluiare indexulnumruldeelemente1,inunumruldeelemente.

    7.1.3.IniializareaReprezintprocesulprincareuneivariabileisedovaloare.Lainiializareaunuivectorvalorileiniialetrebuieinclusentreacoladeiseparateprinvirgule. int note[]={10,9,10,8,9}; Nuestenevoie s se specificeexplicitdimensiunea tabloului.Numrulde valori iniialeestefolositpentruastabilidimensiuneaacestuia.

    Nu se folosete operatorul new pentru declararea unui tablou dac acesta seiniializeaz.Javaalocdinamicmemoriesuficientpentrutablou,folosindnumruldevaloridininiializarepentruaideterminadimensiunea.

  • LimbajuldeprogramareJava

    45

    7.2.TablourimultidimensionaleMatriceTablourilepotaveamaimultedimensiuni.Acesteasuntnumitetablourimultidimensionalesaumatrice.7.2.1.CreareaunuitabloumultidimensionalDeclarareauneimatricesepoatefacefolosindoperatorulnew,ntrunmodasemntorcucelfolositpentrutablouriunidimensionale.Exempluurmtorilustreazaceasttehnic. int note[][] = new int [3][2]; Fiecareperechedeparantezedreptedindeclarareauneimatricereprezintodimensiune.

    Inde

    xul d

    in s

    tng

    a

    Fig.14.Elementeletablourilormultidimensionale

    7.2.2.AtribuireavalorilorctreelementelematriceiUnelementalunuitablouestefolosit ntroexpresie lafelcaiovariabil.Singuradiferendintreovariabiliunelementalunuitablouestefaptulcpentruelementultablouluitrebuiespecificatattnumeletablouluictiindexulelementului.Sepoateatribuiovaloareunuielementaltablouluifolosindoperatoruldeatribuire. note[0]=9; Valoarea atribuit unui element al unui tablou poate fi folosit ntro expresie la fel ca ivaloareauneivariabile. note[1]=note[0]; Acelaiformatestefolositipentrutablourilecefolosescdousaumaimultedimensiuni: note[1][1]=note[0][1];

  • ndrumardelaborator

    46

    Un tabloumultidimensionaleste,de fapt,un tabloude tablouri. nexempluanterior, tabloulnoteesteunvectorde3elementedetipvectorde2elemente.7.2.3.ProprietilengthTipul tablou, fiindun tip referin,areproprieticepot fiutilizatedeprogramator.Ceamaiutilesteproprietatealength,carereturneaznumruldeelementealtabloului.Exemplu: int note[]={10,9,10,8,9}; System.out.print("Notele sunt:"); for(int i=0;i

  • LimbajuldeprogramareJava

    47

    int note2[] = new int[3]; note2[0] = 10; note2[1] = 9; note2[2] = 8; if (Arrays.equals(note1, note2)) System.out.println("Notele sunt egale!"); else System.out.println("Notele nu sunt egale!"); } } Metodaequals()esteapelatprinreferireaclaseiArrays.Numeleclaseitrebuiespreceadnumele metodei folosit n program, iar numele clasei i numele metodei trebuie s fieseparateprinoperatorulpunct.7.3.2.Metodafill()Sefolosetecndtrebuieatribuitevaloriiniialeelementelorunuitablou.nexemplulurmtorsuntprezentatedouversiunialemetodei:

    Primaversiunearenevoiededouargumente:numeletabloului ivaloareacareva fiatribuitelementelormatricei.Este important ca tipuldedatealacestei valori s fiecompatibilcucelalelementelortabloului.

    A doua versiune are nevoie de patru argumente: numele tabloului, indexul primuluielementacruivaloarevafischimbat,indexulultimuluielementalcruivaloarevafischimbativaloareacevafiatribuitelementelornintervalulspecificat.

    ExempluFill.java import java.util.*; public class ExempluFill { public static void main(String[] args) { // se utilizeaza un vector de 2000 de elemente de tip int

    int note[] = new int[2000]; Arrays.fill(note, 0); for (int i = 0; i < note.length; i++) System.out.println("" + note[i]); Arrays.fill(note, 100, 1500, 3);

  • ndrumardelaborator

    48

    for (int i = 0; i < note.length; i++) System.out.println(i + "" + note[i]); } }

    7.3.3.Metodasort() Sorteaz cresctor elementele unui tablou folosind algoritmul QuickSort. Dac elementeletablouluisunttipurireferin(clase),acesteatrebuiesimplementezeinterfaaComparable.Metodaprimeteunsingurargumentvariabilatablou.ExempluSort.java import java.util.*; public class ExempluSort { public static void main(String[] args) { int note[] = { 5, 2, 4, 1, 7, 3, 5, 7, 0 }; Arrays.sort(note); for (int i = 0; i < note.length; i++) System.out.println(note[i]); } }

    7.3.4.MetodabinarySearch() Aceastmetodcautunanumitelementntruntablou.Pentruafolosiaceastmetodtabloultrebuiesfiesortatnaintedeasefacecutarea.Metoda binarySearch() are nevoie de dou argumente: numele tabloului i criteriul decutare.Criteriuldecutaretrebuiesfiecompatibilcutipuldedatealelementelortabloului.Metodareturneazovaloarentreag.Acestapoatefiunnumrpozitivsauunnumrnegativ.Un numr pozitiv reprezint indexul elementului care conine valoarea cutat. Un numrnegativnseamncvaloareacutatnuafostgsitntablou.

  • LimbajuldeprogramareJava

    49

    ExempluBinarySearch.java import java.util.*; public class ExempluBinarySearch { public static void main(String[] args) { int note[] = { 5, 2, 4, 1, 7, 3, 5, 7, 0 }; int index; Arrays.sort(note); index = Arrays.binarySearch(note, 2); System.out.println(index); index = Arrays.binarySearch(note, 99); System.out.println(index); } } Rezultatulrulrii: 2 -10

    7.3.5.Metodaarraycopy() Metoda arraycopy() se utilizeaz pentru a copia elementele unui tablou n alt tablou saupentruacopiaopartedinelementeleuneitablounalttablou.AceastmetodstaticfacepartedinclasaSystemiare5argumente:numeletablouluisurs,indexul elementului din tabloul surs de unde ncepe copierea, numele tabloului destinaie,indexulelementuluidintablouldestinaiedeundencepecopiereainumruldeelementecevorficopiate.ExempluArrayCopy.java import java.util.*; public class ExempluArrayCopy { public static void main(String[] args) { int note1[] = { 5, 2, 4, 1, 7, 3, 5, 7, 0 }; int note2[] = new int[9]; Arrays.fill(note2, 0);

  • ndrumardelaborator

    50

    System.arraycopy(note1, 3, note2, 1, 4); for (int i = 0; i < note2.length; i++) System.out.print("::" + note2[i]); } } Rezultatulrulrii: ::0::1::7::3::5::0::0::0::0

    7.4.Aplicaiecuvectori Vectori.java import java.util.*; public class Vectori { public static void main(String[] args) { int[] nota = new int[4]; System.out.println("Introduceti notele de la fiecare laborator: "); citire(nota); afisare(nota); System.out.println("Media este: " + media(nota)); // schimbarea valorilor unor elemente Arrays.fill(nota, 0, 2, 9); afisare(nota); System.out.println("Laboratorul 1 si 2 au acum valoarile: " + nota[0] + " si " + nota[1]); System.out.println("Ordonare notelor"); // argumentul este de tip referinta iar metoda ii va modifica starea Arrays.sort(nota); afisare(nota); // copierea vectorilor int notaCopie1[] = nota; System.out.println("Afisarea primei copii"); afisare(notaCopie1);

  • LimbajuldeprogramareJava

    51

    int notaCopie2[] = new int[4]; System.arraycopy(nota, 0, notaCopie2, 0, nota.length); System.out.println("Afisarea copiei numarul 2"); afisare(notaCopie2); 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); } static void citire(int nota[]) { // atribuirea valorilor catre elementele tabloului Scanner valoare = new Scanner(System.in); for (int i = 0; i < nota.length; i++) { System.out.print("Laboratorul " + (i + 1) + ": "); nota[i] = valoare.nextInt(); } } static void afisare(int[] nota) { for (int i = 0; i < nota.length; i++) System.out.println("Laborator " + (i + 1) + ": " + nota[i]); } static double media(int nota[]) { double media = 0; for (int i = 0; i < nota.length; i++) media += nota[i]; return media / nota.length; } static void afisareCopie1(int[] nota) { for (int i = 0; i < nota.length; i++) System.out.println(nota[i]); }

    }

  • ndrumardelaborator

    52

    7.5.Aplicaiecuvectori:LoteriaLoteria.java import java.util.*; public class Loteria { public static void main(String[] args) {

    Scanner in = new Scanner(System.in); System.out.print("Cate bile doresti sa extragi? "); int k = in.nextInt(); System.out.print("Care este nuamarul maxim de bile? "); int n = in.nextInt(); // construirea unei matrici numarul total de bile int[] bile = new int[n];// maxim de bile for (int i = 0; i < bile.length; i++) bile[i] = i + 1; // construirea unei matrici pentru bilele extrase int[] extras = new int[k]; // bile extrase for (int i = 0; i < extras.length; i++) { // realizarea unei extrageri in mod aleatoru intre 0 si n-1 int r = (int) (Math.random() * n); // extragerea unei bile extras[i] = bile[r]; // mutarea ultimului element in locatia aleatoare bile[r] = bile[n - 1]; n--; } // sortarea bilelor extrase in ordine crescatoare Arrays.sort(extras); System.out.println("Cea mai buna combinatie: "); // afisarea bilelor extrase // for(variabila:colectie)->afiseaza elementele colectiei for (int r : extras) System.out.println(r); // sau // for(int r=0;r

  • LimbajuldeprogramareJava

    53

    7.6.AplicaiecuomatricebidimensionalMatriceBi.java public class MatriceBi { public static void main(String[] args) { final int capTabel = 10; final int coloane = 6; final int linii = 10; // setarea ratei dobanzii 10 . . . 15%(dobandap=dobanda procent) double[] dobandap = new double[coloane]; for (int j = 0; j < dobandap.length; j++) { dobandap[j] = (capTabel + j) / 100.0; } // crearea unei matrici bidimensionale pentru afisarea valorilor // depozitului pe 10 ani(coloane)cu diferite dobanzi(10-15%) // (6 coloane) double[][] balanta = new double[linii][coloane]; // setarea valorii initiale cu 10000 for (int j = 0; j < balanta[0].length; j++) { balanta[0][j] = 10000; } // calcularea ratei pentru anii viitori for (int i = 1; i < balanta.length; i++) { for (int j = 0; j < balanta[i].length; j++) { // valoarea anului trecut pentru calculul dobanzii double oldBalance = balanta[i - 1][j]; // calcularea valorii dobanzii double dobanda = oldBalance * dobandap[j]; // calcularea valorii corespunzatoare anului si dobanzii balanta[i][j] = oldBalance + dobanda; } } // afisarea randului cu valorile procentelor for (int j = 0; j < dobandap.length; j++) { System.out.printf("%9.0f%%", 100 * dobandap[j]); } System.out.println(); // trecere la randul urmator

  • ndrumardelaborator

    54

    // afisarea valorilor in tabel for (double[] row : balanta) { // afisarea fiecarui rand din tabel for (double b : row) System.out.printf("%10.2f", b); System.out.println(); } } }

  • LimbajuldeprogramareJava

    55

    LABORATORUL68.iruridecaractereiruriledecaracterepotfireprezentatedetipurileStringiStringBuffer.Dacsedoretecaun irdecaracteres rmnconstant,atuncise folosete tipulString.Dacsedoretemodificareairului,atuncisevautilizatipulStringBuffer,deoareceaceastclas pune la dispoziie metode de prelucrare a irului ncapsulat (append(), insert(),delete(),reverse()).Concatenarea irurilor de caractere se realizeaz prin intermediul operatorului +, n cazulirurilor de tip String, i prin intermediul metodei append() n cazul irurilor de tipStringBuffer.

    8.1.ClasaStringListatuturorproprietilorimetodeloraleclaseiStringsegsetelaadresa:http://java.sun.com/javase/6/docs/api/java/lang/String.html.ExemplededeclarareiinstaniereaobiectelordetipString String sir1 = "sir"; String sir2 = new String("sir"); char sir[] = {'s','i','r'}; String sir3 = new String(sir); System.out.println(sir1); System.out.println(sir2); System.out.println(sir3); ExempluString.java public class ExempluString { public static void main(String[] args) { // declararea a patru siruri de caractere cu initializare String s1 = "Happy girl!"; String s2 = "Happy boy!"; String ss1 = "Happy!"; String ss2 = ss1;

  • ndrumardelaborator

    56

    // 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);

  • LimbajuldeprogramareJava

    57

    String s3 = "opt zeci si trei"; // concatenarea a doua caractere la un sir System.out.println(s3 + " este " + 8 + 3); String s4 = "unsprazece"; // concatenarea rezultatului unei operatii aritmetice System.out.println(8 + 3 + " este " + s4); // utilizarea metodei valueOf(int i)pentru a reprezenta argumentul // int ca si string String myString1 = "opt zeci si trei este: " + String.valueOf(8) + String.valueOf(3); String myString2 = String.valueOf(8) + String.valueOf(3) + " este: opt zeci si trei"; System.out.println(myString1); System.out.println(myString2); // declararea unui tablou de tip caracter char[] carray = new char[30]; // utilizarea unui ciclu for pentru afisarea fiecarui caracter in // parte a sirului for (int index = 0; index < s2.length(); index++) { // utilizarea metodei charAt(index)pentru returnarea caracterului // de la indexul specificat carray[index] = s2.charAt(index); System.out.print(carray[index]); } System.out.println("\n"); // utilizarea metodei replace pentru inlocuirea intr-un sir a unui // caracter cu un alt caracter(carcterul 'H' este inlocuit // cu caracterul 'X' s1 = s1.replace('H', 'X'); System.out.println(s1); // utilizarea metodei startsWith(String prefix)pentru a verifica // daca sirul incepe cu prefixul specificat if (ss2.startsWith("He")) System.out.println("Sirul \"" + ss2 + "\" incepe cu prefixul He"); // utilizarea metodei startsWith(String prefix,int toffset) pentru // a verifica daca in subsirul ce incepe de la indexul specificat // (int/ toffset)din sir este precedat de sufixul respectiv if (ss2.startsWith("pp", 2)) { System.out.println("Sirul \"" + ss2 + "\" include subsirul \"pp\" la pozitia 2"); }

  • ndrumardelaborator

    58

    // utilizarea metodei endsWith(String suffix)pentru a verifica daca // sirul se termina cu sufixul specificat if (ss2.endsWith("y!")) { System.out.println("Sirul \"" + ss2 + "\" se termina cu subsirul y!"); } // declararea unui sir de caractere (valoarea initiala este // sirul vid "") String m1 = new String(); // declararea si initializarea unui sir de caractere String m2 = new String("Acesta este un sir"); // declararea celui de-al treilea sir si initializarea sa cu // valoarea celui de-al doilea sir. aceasta valoare se va mentine // chiar daca sirul s2 va suferi modificari String m3 = m2; // afisarea celor trei siruri System.out.println(m1); System.out.println(m2); System.out.println(m3); // cocatenarea sirului s2 cu sirul "modificat" m2 += "modificat"; // afisarea noilor valori System.out.println(m2); System.out.println(m3); char[] textchar = {'A', 'c', 'e', 's', 't', 'a', ' ', 'e', 's', 't', 'e', ' ', 'u', 'n', ' ', 's', 'i', 'r', '.' }; // metoda copyValueOf(char[]data) returneaza un sir format din // caracterele specificate de vector (char[]textchar) String n1 = String.copyValueOf(textchar); System.out.print(n1); String text = "Un sir declarat"; System.out.println("Sirul este:" + "\"" + text + "\""); // utilizarea metodei substring(int beginIndex, int endIndex) pentru // crea un un subsir dintr-un sir pornind de la pozitia beginIndex // la pozitia endIndex a sirului String subsir = text.substring(7, 15); System.out.println("Subsirul de la pozitia 7 la 15: \"" + subsir + "\"");

  • LimbajuldeprogramareJava

    59

    String propozitie = "Problema principala este de a gasi grupul de" + " caractere din sirul curent si, cateodata, a" + " verifica daca caracterele exista in sir sau" + " nu. Atentie! grupul de caractere poate" + " forma un cuvant din sir sau poate fi o" + " parte a unui cuvant din sir."; int siCount = 0; int deCount = 0; int index; System.out.println("String-ul este:"); System.out.println(propozitie); // gasirea lui "si" index = propozitie.indexOf("si"); // gaseste primul "si" while (index >= 0) { ++siCount; index += "si".length(); // sare la pozitia dupa ultimului "si" index = propozitie.indexOf("si", index); // cauta "si" de la index // la sfarsitul textului } // gasirea lui "de" index = propozitie.lastIndexOf("de"); // gaseste ultimul de while (index >= 0) { ++deCount; index -= "de".length(); // sare la pozitia de dinaintea // ultimului "de" index = propozitie.lastIndexOf("de", --index); } System.out.println("Textul contine " + siCount + " \"si\"\n" + "Textul contine " + deCount + " \"de\""); } }

  • ndrumardelaborator

    60

    8.2.ClasaStringBufferListatuturorproprietilorimetodeloraleclaseiStringBuffersegsetelaadresa:http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html.ExempluStringBuffer.java public class ExempluStringBuffer { public static void main(String[] args) { // StringBuffer este un String care poate fi modificat fara crearea // unei noi instante a clasei StringBuffer sb1 = new StringBuffer(); // declararea unui // StringBuffer vid ce are // capacitatea initiala // de 16 caractere // crearea unei instante ce are ca valoare initaial textul // "Acesta este un StringBuffer" StringBuffer sb2 = new StringBuffer("Acesta este un StringBuffer"); // declararea unui StringBuffer fara caractere ce are // capaciatatea initiala de 20 de caractere StringBuffer sb3 = new StringBuffer(20); sb1 = new StringBuffer("Eu am mere"); sb3 = new StringBuffer("Eu am pere"); System.out.println(sb1); System.out.println(sb2); System.out.println(sb3); // utilizarea metodei insert(int offset,char c) pentru a insera // un caracter c la pozitia specificata offset sb1.insert(6, 3); System.out.println("Noul sir sb1 este: " + sb1); sb1.insert(6, 3); System.out.println("Noul sir sb1 este: " + sb1); // transformarea SringBuffer intr-un String String myString1 = sb2.toString(); // declararea unui string si initializarea sa cu valoarea // StringBufferului declarat anterior String myString2 = new String(sb2); System.out.println("Sirul din StringBuffer este: " + myString1); System.out.println("Sirul din StringBuffer este: " + myString2); // declararea unui String Buffer StringBuffer sir = new StringBuffer("12345678901234567890");

  • LimbajuldeprogramareJava

    61

    // afisarea lui System.out.println("Sirul este: " + sir); // folosirea metode replace(int start,int end,String str) // pentru inlocuirea in sirul specificat a unui subsir cu un alt // subsir(str)incepand de la pozitia start pana la pozitia end sir.replace(2, 15, "abcdefghijk"); System.out.println("Noul sir este: " + sir); // utilizarea metodei reverse() pentru inversarea sirului specificat sir.reverse(); System.out.println("Noul sir inversat este: " + sir); } }

  • ndrumardelaborator

    62

  • LimbajuldeprogramareJava

    63

    LABORATORUL79.ClaseiprogramareorientatobiectUtilizareaclaselornscriereadeprogramesencadreaznparadigmadeprogramareorientatobiect(POOOOPObjectOrientedProgramming),carepresupunecreareunortipuridedatecomplexecareseaseamn,nmulteaspecte,cuobiectereale.Astfel,acestetipuriconinattdateleutile,ctimetodeledeoperareasupraacestora.Oclasvaconineproprieti(atribute)imetode(comportamente),ivadescrie,ntrunmodabstract,naturaobiectuluicesedoreteafitranspusnprogram.

    9.1.TermeniutilizainprogramareaorientatobiectOclasesteun tipdedatece ncapsuleazattdateleutilect imoduldeoperareasupraacestora.Instaniereaesteprocesulprincareseobineunobiectcarearepropriasalocaiedememorieipropriulcodexecutabil.Unobiectesteo instanauneiclase,adicesteconstruitpebazadeclaraiilordinclas.Utilizndoanalogie,oclasesteunplanaluneicase(practicundesen),iarobiectul,sauinstana,estecasaconstruit.Motenireaestemecanismulprincaresepotobinenoiclasedinclasedejaexistente.Noileclasevormotenicaracteristici(proprietiimetode)aleclaseidebaz(superclasei).Operaiaprincareseobineoclasnoudinunaexistentpoartdenumireadederivare.Polimorfismulreprezintmecanismulcarepermiteaccesareaproprietilor imetodelorunuiobiectdeunanumittipprinintermediulunortipuridedatedincareacestaafostobinutprinderivare.

    9.2.DefiniiauneiclaseCeamaisimpldefiniieauneiclase,nJava,esteformatdintreicomponente:

    Fig.15.Componenteleesenialealeuneiclase

  • ndrumardelaborator

    64

    1.Princonvenie,numeleclaselorJavatrebuiesnceapculitermare.Dacnumeleconinemaimuliatomilexicali,fiecaredintreeitrebuiesnceapculitermare.Deexemplu:class ClasaAceastaRespectaConventiaDeNotare { } 2.Estefoarteindicatcafiecareclassfiescrisnpropriulfiier.Numelefiierului,nmodobligatoriu,trebuiesaibexactacelainumecucelalclaseiconinute.

    Corpulclaseiconinedeclaraiiledeproprietiimetode.9.2.1.ModificatorideaccesProgramareaorientatobiect impuneexistenaunuimecanismdecontrolasupraaccesului laclase iproprietile imetodeleunuiobiect. n Java,acestmecanismeste implementatprinmodificatorideacces.Exist4modificatorideacces:private,protected,publici implicit(atuncicndniciunuldinceianteriorinusuntmenionai).Deasemenea,sepotevidenia4domeniidevizibilitateametodelor iproprietilor: clasacareconinemetodele iproprietile,claselederivatedinaceasta(subclase),pachetulncareseaflclasailumeaexterioar(zonapublic).Tabelulurmtorprezintsemnificaiamodificatorilordeaccesdinpunctdevedereavizibilitiiproprietilorimetodelor.Specificator Clas Subclas Pachet Zonapublicprivate X protected X X X public X X X Ximplicit X X

    Modificatoriiprivateiprotectednupotfiaplicaiclaselor.

    9.2.2.Alimodificatori9.2.2.1.Modificatorulfinal Pentrudeclaraiiledeproprietiaresemnificaia faptuluicaceaproprietateesteconstant(nupoatefimodificat).

  • LimbajuldeprogramareJava

    65

    Metodelepurtndacestmodificatornumaipotfisupradefinitensubclase.ncazulclaselor,finalprecizeazcaceaclasnumaipoatefiderivat(nuaremotenitori).9.2.2.2.Modificatorulstatic Acestmodificatorpoatefiutilizatnumaipentruproprietiimetode.Proprietile imetodeledeclarate cumodificatorulstaticpoartdenumiredeproprieti,respectivmetodedeclas.Dacoproprietatesauometodnuconinemodificatorulstaticndeclaraie,atuncieasenumeteproprietate,respectivmetoddeinstan.9.2.2.3.Modificatorulsynchronized Acestmodificatoresteutilizatnaplicaiicareruleazmaimultefiredeexecuienparalel.Modificatorulasigurexclusivitateaccesuluilaexecuie,astfelnctsnuaparerorideviolareaaccesului.9.2.3.ProprietiOproprietateesteunelementdedateasociatclasei.Definirea/declarareproprietilorsefacelafelcancazulvariabilelor.Proprietilesedeclarninteriorulclasei,darnafaraoricreimetode.Declaraiilepotfiprecedatedemodificatoriideaccesprivate,protectedsaupublicipotfiiniializatenmomentuldeclarrii.Proprietilepotfideinstan,prinurmarepotfiaccesatedoarprinnumelevariabileicarefacereferirelaobiect,ideclas,caresuntcomunepentrutoateinstaneleipotfiaccesatedirectprinnumeleclasei.

    Modificrile fcute asupra unei proprieti de instan a unui obiect nu are efectasupraproprietilordeinstanaunuialtobiect.

    9.2.4.MetodeOmetodesteoparteaunuiprogramcareconine logicapentruexecutareauneisarcini.Defiecaredatcndtrebuieexecutatsarcinarespectivtrebuieapelatmetoda.Principalul motiv pentru folosirea metodelor n programe este reducerea numrului deinstruciuni duplicate n program. De asemenea, folosirea metodelor duce la simplificareantreineriiprogramului.Modificrilesuntfcutentrunsingurlocncodulmetodei.nmodobligatoriumetodeletrebuiedeclarateninteriorulclaselor.

  • ndrumardelaborator

    66

    Declarareametodelor:Formatgeneral: () { } Tipulreturnatpoatefiuntipdedateprimitivsauoreferinctreunobiect.Dacmetodanureturneazdateseutilizeazcuvntulcheievoidpentrutipulreturnat.

    A nu se confunda cuvntul cheie void cu 0. Zero este o valoare, pe cnd voidsemnificabsenauneivalori.

    Numelemetodeiestedatedeprogramator.NumeletrebuiesfiesugestivpentruceeacefacemetodaisrespecteconveniadedenumireJava.Lista de parametri este format din datele de caremetoda are nevoie pentru ai duce landeplinire sarcina. Lista este format prin specificarea tipului de date i a numelui pentrufiecareelementdedatetransmismetodei.Tipuldedatealparametruluiesteacelaicutipuldedate al unei variabile. Acesta spunemainii virtuale Java ctmemorie s rezerve pentruparametru i ce feldedatevor fi stocate.Numeleparametruluieste similar cunumeleuneivariabile; este o etichet pentru o adres de memorie care conine datele transmise deinstruciuneacareapeleazmetoda. ncadruluneimetode,numeleparametruluisefolosetelafelcaovariabil.Numele unui parametru trebuie s reflecte natura datelor stocate de acesta. i acest numetrebuiesrespecteconveniadedenumireJava.Listadeparametripoateconineoriciparametri,separaiprinvirgule, iarnumele lors fieunice.Lista de parametri este opional. Numai ometod care are nevoie de date transmise deinstruciunea care o apeleaz trebuie s aib o list de parametri. Totui, definiiametodeitrebuiesincludparantezele,chiardacnuexistolistdeparametri.TransferulparametrilorsefacenJavaprinvaloare.

  • LimbajuldeprogramareJava

    67

    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.ConstructoriUn constructoresteometod special careesteapelatautomat la creareaunei instaneauneiclase.Dinpunctdevederetehnic,constructorulesteapelat naintecaoperatorulnewsitermineexecuia. Constructorul se folosete att pentru iniializarea proprietilor de instan ct ipentruexecutareaunoroperaiilacreareaunuiobiect.Unconstructorestedefinitcaoricemetodns:

    numeleconstructoruluitrebuiesfieacelaicunumeleclasei; constructorulnutrebuiesconininstruciuneareturn;

    Se pot defini mai muli constructori pentru o clas, fiecare avnd semnturi diferite(suprancrcareaconstructorului).Dacprogramatorulnuscrieniciunconstructor, Javautilizeazunconstructor implicit (creatautomat de Java). Constructorul implicit nu are list de parametri. Un constructor sesuprancarcprindefinireaunuiconstructorcareareo listdeparametri.Acestasenumeteconstructorparametrizat(cuparametri).

    Dac ntroclasestedefinitunconstructor, indiferentdenumruldeargumentepecare le accept, Java nu mai creeaz constructorul implicit. Prin urmare, dac sedoreteunconstructorfrargumentedupcesadefinitunulcuargumentetrebuiecreatconstructorulfrargumentenmodexplicit.

  • ndrumardelaborator

    68

    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.DeclarareauneiinstaneauneiclaseLa creareaunuiobiect (instane) Java alocmemoriepentru toateproprietilede instan,apoiapeleazconstructorul.myClass x = new myClass(); Instruciuneademaisusimplictreioperaii:

    OperatorulnewceremainiiJavasrezerveunblocdememoriepentruinstan.Acestbloc dememorie este suficient demare pentru stocarea proprietilor de instan.Operatorulnewreturneazadresabloculuidememorierezervat.

    EstedeclaratovariabilreferinauneiinstaneaclaseimyClass,numitx.Referinaestedeclaratfolosindnumeleclasei.

    A treia operaie const n a atribui referinei prima adres din blocul dememorie alinstanei.Referina (x)este folositapoi nprogramoridecteori se face referire lainstanacreat.

    nexemplulanterior sadeclarato referin io instana clasei ntro singur instruciune.Celedoudeclaraiipotfiseparatendouinstruciuni: myClass x; x=new myClass(); Referinelordeclaratefinalenulepotfiatribuitealtevalori.9.2.7.AccesullamembriiuneiclaseDupceestedeclaratoinstanauneiclase,accesullamembriiclaseisefaceprinintermediuluneireferineaclasei(variabila).Pentruaobineaccesul launmembrualuneiclase,se folosetenumelereferinei,urmatdeoperatorulpunctidenumelemembrului.Exemplul urmtor definete clasa myClass, care are 3membri. Acetia sunt o variabil deinstannumitstudent,unconstructor iometodnumitprint().Variabilade instaneste iniializatcunumrulde identificarealunuistudent,dectreconstructor, ladeclarareainstanei.Instanaesteapoifolositpentruaapelametodaprint(),careafieaznumeledeidentificarealstudentului.

  • LimbajuldeprogramareJava

    69

    MyClass.java class MyClass { int student; MyClass() { student = 1234; } public void print() { System.out.println("Neata, student: " + student); }

    } Demonstratie.java class Demonstratie { public static void main(String args[]) {

    //declararea unei instante a clasei MyClass MyClass x = new MyClass(); //apelarea functiei print() folosind instant clasei MyClasss x.print(); } }

    9.2.8.SuprancrcareametodelorOmetodseidentificdupsemnturasa,carereprezintcombinaiantrenumelemetodeiilista tipurilor parametrilor. Acesta nseamn c dou metode pot avea acelai nume, darparametridiferii.Oclaspoateaveamaimultemetodecuacelainume,darsemntura fiecreimetodes fieunicndefiniiaclasei.Atunci cnd ntro clas exist doumetode cu acelai nume se spune c a douametodsuprancarcprimametod.

    1.Doumetodealeuneiclasenupotaveaaceeaisemntur.2.Metodeadouclasediferitepotaveaaceeaisemntur.

  • ndrumardelaborator

    70

    Aceastideeesteilustratnurmtorulexemplu,ncareexistdoumetodenumiteprint().Primaversiunenuareo listdeargumenteiafieazunmesajde ntmpinareprestabilitdefiecaredatcndesteapelat.Adouaversiuneconineuntextcarevafincorporatnmesajulafiat. Astfel se poate opta ntre afiarea unuimesaj de ntmpinare generic sau unmesajpersonalizat. MyClass.java class MyClass { //functia print() fara parametrii public void print() { System.out.println("Neata!"); } //functia print cu parametru de tip String public void print(String str) { System.out.println("Neata " + str); }

    } Demonstratie.java class Demonstratie { public static void main(String args[]) { //declararea unei instante a clasei MyClass MyClass x = new myClass(); /* apelarea functiei print(), functie fara parametrii, folosind instant clasei MyClasss */ x.print(); /* apelarea functiei print(), functie cu parametru de tip String, folosind instant clasei myClasss */ x.print("Student"); }

    }

    9.2.9.CuvntulcheiethisOmetodareacces,nmodimplicit,lavariabileledeinstanilacelelaltemetodealeclaseincareestedefinit.

  • LimbajuldeprogramareJava

    71

    Exist situaii n care se declar ntro metod o variabil care are acelai nume ca i oproprietatede instan.Ovariabildeclarat n interioruluneimetode senumete variabillocal.Dacoinstruciunedintrometodreferunnumedevariabil,Javafolosetevariabilalocalnloculvariabileideinstancuacelainume.SepoateceremainiivirtualeJavasfoloseascovariabildeinstannloculvariabileilocalecu acelai nume, folosind cuvntul cheie this. Cuvntul cheie this permite referirea laobiectulcurentalclasei.MyClass.java class MyClass { //functia print() fara parametrii public void print() { System.out.println("Neata!"); } public void print() { int student = 12; // afiseaza variabila locala System.out.println("Neata ,student: " + student); // se afiseaza variabila de instanta utilizand cuvantul this System.out.println("Neata ,student: " + this.student);

    } } Demonstratie.java class Demonstratie { public static void main(String args[]) { MyClass x = new myClass(); x.print(); }

    } Urmtorulexempluprezintmodulcumsepoateutilizacuvntulcheiethispentruapelulunuiconstructordininteriorulaltuiconstructor.

  • ndrumardelaborator

    72

    Dacsedoreteapelareaunuiconstructornmodexplicit,aceastinstruciunetrebuiesfieprimanconstructor.

    MyClass.java class MyClass { int studentID; String studentNume; double media; MyClass(int x, String y, double z) { studentID = x; studentNume = y; media = z; } 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 class Student { private int student; // variabila de instanta public Student() {

    // initializarea variabilei de instanta prin constructor student = 1234; }

  • LimbajuldeprogramareJava

    73

    public void print() {

    int student = 12; // afiseaza variabila locala System.out.println("Student: " + student); // se afiseaza variabila de instanta utilizand cuvantul this System.out.println("Student: " + this.student); } public void print(String str) {

    System.out.println("Student: " + str); } } Clase.java public class Clase { public static void main(String[] args) {

    // declaraea unor instante ale unor clase Student x, y, temp; // declararea referintelor x = new Student(); // atribuie instanta referintei /* * operatorul new aloca dinamic memorie pentru instanta clasei (java * rezerva memorie in timpul rularii, nu in timpul compilarii) */ y = new Student(); // accesul la membrii aceleiasi instante temp = x; temp = y; /* * apelarea metodei print() (metoda a clasei Student) folosind * instanta clasei Student */ temp.print(); // metoda ce supraincarca prima metoda print(); temp.print("Ana"); } }

  • ndrumardelaborator

    74

    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. */ private String Nume; private double salariu; private Date aniversare; /* * 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(); } // definirea metodei care preia parametrul nume public String getNume() {

    return Nume; } // definirea metodei care preia parametrul salariu public double getSalariu() {

    return salariu; } // definirea parametrului care preia data public Date getaniversare() {

    return aniversare; }

  • LimbajuldeprogramareJava

    75

    // definirea metodei pentru calculul salariului marit cu 5 % public double Salariu(double Procent) {

    return salariu += salariu * Procent / 100; }

    } Clase.java public class Clase { public static void main(String[] args) {

    // declararea unei instante a unei calse Angajat[] obiect = new Angajat[3]; /* * initializarea celor trei obiecte a clasei Angajat (initializarea * tine cont de