-timp de lucru 4 ore- I. Partea teoretica In acest laborator se vor studia: Identificarea partilor de baza ale unui program Java Diferentierea dintre literali si tipuri de date primitive Dezvoltarea unui program Java folosind conceptele studiate Clase si obiecte CREAREA UNEI APICA!II "I#PE a. "crierea codului $ur$a public class Hello { /** * My first Java program */ public static void main( String[] args ){ //prints the string Hello world on screen System.out.println(Hello world!" # # b. "al%area codului $ur$a 1.Programele Java trebuie sa aiba totdeauna extensia .java 2. umele fisierului trebuie sa fie acelasi cu al clasei publice. Daca de exemplu! numele clasei publice este &ello! fisierul trebuie numit &ello.ja%a. ". #oate programele scrise in Java cu exceptia $pplet%urilor trebuie sa contine o metoda principala &. #rebuie scrise comentarii in cod pentru a explica actiunile unei metode sau unei clase c. Compilarea aplicatiei 1. 'e foloseste compilatorul Java! javac 2. $pelul compilatorului se face pentru fisierul ce contine clasa principala a aplicatiei. ".Compilatorul creeaza c(te un fisier separat pentru fiecare clasa a programului) acestea au extensia .class si sunt plasate *n acelasi director cu fisierele sursa. $avac Hello.$ava
d. Rularea aplicatiei MVP 2011-2012 Anca Ion 'e face cu interpretorul java! apelat pentru unitatea de compilare corespunzatoare clasei principale! fiind *nsa omisa extensia .class asociata acesteia $ava Hello '. Ja%a "tatement$ + una sau mai multe linii de cod terminate cu punct si virgula. + ,xemplu: '-stem.out.println./0ello 1orld23) (. )locuri Ja%a blocul este format din: + una sau mai multe declaratii incadrate in acolade + blocurile pot fi imbricate + ,xemplu: public static void main. 'tring45 args 36 '-stem.out.println.70ello73) '-stem.out.println.71orld23) 8 *. Identi+icatori Ja%a + 'unt atomi care reprezinta numele variabilelor! metodelor! claselor! etc. + ,xemple de identificatori: 0ello! main! '-stem! out. +Identificatorii Java sunt case%sensitive. + $ceasta inseamna ca identificatorul &ello nu este acelasi cu ,ello. + Identificatorii trebuie sa inceapa cu ori cu o litera! underscore /92! sau semnul dolar /:2. +Identificatorii nu pot folosi cuvintele c;eie Java cum ar fi: class! public! void! etc. 4. Cu%inte c,eie Ja%a Cuvintele c;eie sunt identificatori predefiniti rezervati de Java pentru diverse scopuri $cestea nu se pot folosi ca nume de variabile! clase! metode! etc Cuvinte c;eie in Java -. iterali in Ja%a <iteralii sunt atomi care nu se sc;imba + raman constanti #ipurile de literali in Java sunt: + Integer MVP 2011-2012 Anca Ion + =loating%Point + >oolean + C;aracter + 'tring iterali Ja%a de tip Integer <iteralii de tip Integer sunt in diferite formate: + decimal .baza 1?3 + ;exadecimal .baza 1@3 + octal .baza A3. E.emple de literali Ja%a de tip Integer otatii speciale pentru literali de tip intreg: + Becimal ,xemplu: 12 + 0exazecimal Precedat de ?x sau ?C ,xemplu: ?xC + Dctal Precedat de ? ,xemple: ?1& iterali Ja%a/ Floating Point Eeprezinta numere zecimale cu parte fractionala + ,xemplu: ".1&1@ Pot fi scrisi in notatie standard sau notatie stiintifica + ,xemple: FA".&F .standard3! F.A"&Fe2 .stiintifica3 iterali Ja%a/ )oolean <iteralii de tip >oolean au valorile: true sau false. iterali Ja%a/ C,aracter <iteralii de tip C;aracter reprezinta caractere Gnicode. caracter Gnicode + reprezinta un set de caractere pe 1@%bit care inlocuieste setul de caractere A%bit $'CII + Gnicode +ul permite includerea de simboluri si caractere speciale din alte limbi iterali Ja%a/ "tring <iteralii de tip 'tring reprezinta caractere multiple si sunt inc;ise in g;ilimele duble / 2 ,xemplu de literal string: /0ello Horld2. 0. !ipuri de date primiti%e <imbajul de programare Java defineste A tipuri de date primitive: + boolean + c;ar + b-te + s;ort + int + long MVP 2011-2012 Anca Ion + double + float 0.'.!ipul primiti% de date boolean #ipul de date >oolean reprezinta 2 stari: true si false. ,xemplu: boolean result I true) 0.(. !ipul primiti% de date/ c,ar #ipul de date c;ar reprezinta caracterele unicod <iteralii acestui tip se reprezinta intre g;ilimele simple .J J3. De exemplu KaJ LLlitera a KMtJ LL tab Pentru a reprezenta caractere speciale ca g;ilimele simple N sau g;ilimele duble 7! se foloseste caracterul c;aracter M. De exemplu! NMNN LLpentru g;ilimele simple NM7N LLpentru g;ilimele duble 0.*. !ipul primiti% de date/ "tring Desi 'tring nu este un tip de date primitiv ci o clasa! totusi va fi prezentat in aceasta sectiune 'tring reprezinta un tip de date care contine caractere multiple. <iteralii acestui tip se reprezinta intre g;ilimele duble./23. De exemplu! 'tring messageI/0ello 1orldO2) 0.4. !ipuri de date primiti%e intregi/ b1te2 $,ort2 int 3 long #ipul de date intreg in Java foloseste " forme+ zecimal! octal sau ;exazecimal. ,xemple: 2 LLvaloarea zecimala a lui 2 ?PP LLvaloarea octala ?x>$CC LL?x valoare ;exazecimala #ipurile de date intregi au ca si tip de date implicit int Qaloarea de tip long se poate defini prin adaugarea literei l sau < De exemplu: 1?< #ipul de date intreg are urmatoarele ranguri: MVP 2011-2012 Anca Ion 0.-. !ipuri de date primiti%e reale 4 float si double #ipurile de date reale au ca si tip implicit tipul de date double <iteralii de tip real se reprezinta folosind punctul zecimal sau una dintre notatiile: , sau e LL.adaugarea unei valori exponentiale3 = sau f LL.float3 D sau d LL.double3 ,xemple: ".1& LLdouble @.?2,2" LLvaloare mare de tip double 2.P1A= LLvaloare de tip float #ipurile de date reale au urmatoare ranguri: 5. Variabile Qariabilele pot avea ca tip fie un tip primitiv de data! fie o referinta la un obiect. 6eclararea %ariabilelor #ip nume9variabila Initiali7area %ariabilelor #ip nume9variabila I valoare 6eclararea con$tantelor +inal %ip nume&variabila Conventia de notare a variabilelor in Java este data de urmatoarele criterii: 1. variabilele finale .constante3 se scriu cu majuscule 2. variabilele normale se scriu astfel : prima litera cu litera mica! daca numele variabilei este format din mai multi atomi lexicali! atunci primele litere ale celorlalti atomi se scriu cu majuscule! de exemplu: ". final double PI I ".1&) &. int valoare I 1??) F. long numar,lemente I 12"&F@PA<) @. 'tring bauturaReaPreferata I 7apa7) In functie de locul in care sunt declarate variabile se impart in urmatoatele categorii: MVP 2011-2012 Anca Ion 1. Variabile membre! declarate in interiorul unei clase! vizibile pentru toate metodele clasei respective si pentru alte clase *n functie de nivelul lor de acces .vezi 7Declararea variabilelor membre73 2. Variabile locale! declarate *ntr%o metoda sau *ntr%un bloc de cod! vizibile doar *n metodaLblocul respectiv ". Parametri metodelor! vizibili doar *n metoda respectiva &. Parametrii de la tratarea e.ceptiilor E.emplu '/ 6eclararea $i initiali7area %ariabilelor ' public class (ariableSamples { ) public static void main(String*+ args !{ , //declare a data type with variable name - //result and boolean data type . boolean result" / 0 //declare a data type with variable name 1 //option and char data type 2 char option" '3 option 4 565" //assign 565 to option '' ') //declare a data type with variable name ', //grade7 double data type and initiali8ed '- //to 3.3 '. double grade 4 3.3" '/ # '0 # A+i$area %ariabilelor Pentru a afisa valoarea variabilelor se folosesc urmatoarele comenzi: '-stem.out.println.3 '-stem.out.print.3 E.emplu/ ' public class 9utput(ariable { ) public static void main( String*+ args !{ , int value 4 '3" - char :" . : 4 ;<=" / 0 System.out.println( value !" 1 System.out.println( >%he value of :4? @ : !" 2 # '3 # Variabile re+erinta %$. %ariabile primiti%e ,xista 2 tipuri de variabile in Java: + Qariabile primitive + Qariabile de referinta Qariabile primitive + sunt variabile cu tipuri de date primitive cum ar fi int sau long. + stoc;eaza datele in locatia de memorie curenta in care este stocata variabila MVP 2011-2012 Anca Ion Qariabile de referinta + variabile care stoc;eaza adresa unei locatii de memorie + cand se declara o variabila de tip clasa! de fapt se declara o variabila de referinta pentru obiectul din acea clasa E.emplu S Presupunem ca avem 2 variabile cu tipurile de date int si "tring. int num I 1?) LL tip primitiv 'tring name I 70ello7) LL tip referinta E.emplu S In figura de mai jos! este aratat modul de stocare al variabilelor referinta si primitive. 8peratori atribuirea: 4 operatori matematici: T! %! U! L! V ,ste permisa notatia prescurtata de forma lval opI rval .ex: n TI 23 ,xista operatorii pentru autoincrementare si autodecrementare .post si pre3 ex: xTT! TTx! n%%! %%n Dbservatie: evaluarea expresiilor logice se face prin metoda scurtcircuitului .evaluarea se opreste *n momentul *n care valoarea de adevar a expresiei este sigur determinata3 operatori logici: WW.and3! XX.or3! O.not3 operatori relationali: A7 A47 B7 A47 447 C4 operatori pe biti: W .and3! X.or3! Y.xor3! Z.not3 operatori de translatie [[! \\! \\\ .s;ift la dreapta fara semn3 operatorul if%else: expresie9logica ] val9pt9true : val9pt9false ) operatorul ! .virgula3 folosit pentru evaluarea secventiala a operatiilor int xI?! -I1! zI2) operatorul T pentru concatenarea sirurilor: 'tring sI7abcd7 int xI1??) '-stem.out.println.s T 7 % 7 T x3) operatori pentru conversii .cast3 : .tip9de9data3 int i I 2??) long l I .long3i) LL1idening conversion % conversie prin extensie long l2 I .long32??) MVP 2011-2012 Anca Ion int i2 I .int3l2) LLnarro1ing conversion % conversie prin contractie E.emplu ( ' public class <rithmeticDemo { ) public static void main(String*+ args!{ , //a few numbers - int i 4 ,0" . int $ 4 -)" / double : 4 )0.-0." 0 double y 4 0.))" 1 System.out.println((ariable values...!" 2 System.out.println( i 4 @ i!" '3 System.out.println( $ 4 @ $!" '' System.out.println( : 4 @ :!" ') System.out.println( y 4 @ y!" System.out.println(<dding...!" ', System.out.println( i @ $ 4 @ (i @ $!!" '- System.out.println( : @ y 4 @ (: @ y!!" '. //subtracting numbers '/ System.out.println(Subtracting...!" '0 System.out.println( i E $ 4 @ (i F $!!" '1 System.out.println( : E y 4 @ (: F y!!" '2 )3 //multiplying numbers )' System.out.println(Multiplying...!" )) System.out.println( i * $ 4 @ (i * $!!" ), System.out.println( : * y 4 @ (: * y!!" )- ). //dividing numbers )/ System.out.println(Dividing...!" )0 System.out.println( i / $ 4 @ (i / $!!" )1 System.out.println( : / y 4 @ (: / y!!" )2 //computing the remainder resulting from dividing ,3 // numbers ,' System.out.println(6omputing the remainder...!" ,) System.out.println( i G $ 4 @ (i G $!!" ,, System.out.println( : G y 4 @ (: G y!!" ,- ,. //mi:ing types ,/ System.out.println(Mi:ing types...!" ,0 System.out.println( $ @ y 4 @ ($ @ y!!" ,1 System.out.println( i * : 4 @ (i * :!!" ,2 # -3# Programul a+i$ea7a/ Qariable values... i I "P j I &2 x I 2P.&PF MVP 2011-2012 Anca Ion - I P.22 $dding... i T j I P^ x T - I "&.@^F 'ubtracting... i % j I %F x % - I 2?.2FF Rultipl-ing... i U j I 1FF& x U - I 1^A."P Dividing... i L j I ? x L - I ".A?F& Computing t;e remainder... i V j I "P x V - I F.A1F Rixing t-pes... j T - I &^.22 i U x I 1?1@.FA 8peratorii Increment $i 6ecrement S operatorul unar increment .TT3 S operatorul unar decrement .%%3 S Dperatorii increment si decrement cresc si descresc valoarea stocata intr%o variabila cu 1. S De exemplu expresia countIcount T 1)LLincrement t;e value of count b- 1 este ec;ivalenta cu countTT) S De exemplu! int i I 1?) int j I ") int _ I ?) MVP 2011-2012 Anca Ion _ I TTj T i) LLva rezulta _ I &T1? I 1& int i I 1?) int j I ") int _ I ?) _ I jTT T i) LL1ill result to _ I "T1? I 1" 8peratori relationali E.emplu */ ' public class HelationalDemo{ ) public static void main(String*+ args!{ , //a few numbers - int i 4 ,0" . int $ 4 -)" / int I 4 -)" 0 System.out.println((ariable values...!" 1 System.out.println( i 4 @i!" 2 System.out.println( $ 4 @$!" '3 System.out.println( I 4 @I!" '' //greater than ') System.out.println(Jreater than...!" ', System.out.println( i B $ 4 @(iB$!!"//false '- System.out.println( $ B i 4 @($Bi!!"//true '. System.out.println( I B $ 4 @(IB$!!"//false '/ //greater than or eKual to '0 System.out.println(Jreater than or eKual to...!" '1 System.out.println( i B4 $ 4 @(iB4$!!"//false '2 System.out.println( $ B4 i 4 @($B4i!!"//true )3 System.out.println( I B4 $ 4 @(IB4$!!"//true )' //less than )) System.out.println(Less than...!" ), System.out.println( i A $ 4 @(iA$!!"//true )- System.out.println( $ A i 4 @($Ai!!"//false ). System.out.println( I A $ 4 @(IA$!!"//false )/ //less than or eKual to )0 System.out.println(Less than or eKual to...!" )1 System.out.println( i A4 $ 4 @(iA4$!!"//true MVP 2011-2012 Anca Ion )2 System.out.println( $ A4 i 4 @($A4i!!"//false ,3 System.out.println( I A4 $ 4 @(IA4$!!"//true ,' //eKual to ,) System.out.println(MKual to...!" ,, System.out.println( i 44 $ 4 @ (i44$!!"//false ,- System.out.println( I 44 $ 4 @ (I44$!!"//true ,. //not eKual to ,/ System.out.println(Not eKual to...!" ,0 System.out.println( i C4 $ 4 @ (iC4$!!"//true ,1 System.out.println( I C4 $ 4 @ (IC4$!!"//false ,2 # -3 # Programul %a a+i$a/ Qariable values... i I "P j I &2 _ I &2 `reater t;an... i \ j I false j \ i I true _ \ j I false `reater t;an or eaual to... i \I j I false j \I i I true _ \I j I true <ess t;an... i [ j I true j [ i I false _ [ j I false <ess t;an or eaual to... i [I j I true j [I i I false _ [I j I true ,aual to... i II j I false _ II j I true ot eaual to... i OI j I true _ OI j I false 8peratori logici S Dperatorii logici au unul sau mai multi operanzi booleeni si produc rezultat de tip boolean + WW .$D logic3 + W .$D boolean logical3 + XX .logical DE3 + X .boolean logical inclusive DE3 + Y .boolean logical exclusive DE3 + O .logical D#3 MVP 2011-2012 Anca Ion 8peratori logici/ 339"I logic: $i 39"I boolean logic: ' public class %est<ND { ) public static void main( String*+ args !{ , int i 4 3" - int $ 4 '3" . boolean test4 false" / //demonstrate OO 0 test 4 (i B '3! OO ($@@ B 2!" 1 System.out.println(i!" 2 System.out.println($!" '3 System.out.println(test!" '' //demonstrate O ') test 4 (i B '3! O ($@@ B 2!" ', System.out.println(i!" '- System.out.println($!" '. System.out.println(test!" '/ # '0 # Programul afiseaza: ? 1? false ? 11 false S 'e observa ca expresia jTT .linia P3nu este evaluata deoarece prima expresie .i\1?3 este deja falsa. 8peratori ogici/ ;; 9"AU logic: $i ; 9"AU boolean logic: + XX va evalua expresia exp1! si va returna imediat valoarea true daca exp1 este true + In contrast! operatorul X va evalua intotdeauna ambele expresii exp1 si exp2 inainte de a returna un rezultat E.emplu/ public class %est9H { ) public static void main( String*+ args !{ , int i 4 3" - int $ 4 '3" . boolean test4 false" / //demonstrate PP 0 test 4 (i A '3! PP ($@@ B 2!" 1 System.out.println(i!" 2 System.out.println($!" '3 System.out.println(test!" '' //demonstrate P MVP 2011-2012 Anca Ion ') test 4 (i A '3! P ($@@ B 2!" ', System.out.println(i!" '- System.out.println($!" '. System.out.println(test!" '/ # '0 # Programul a+i$ea7a/ ? 1? true ? 11 true S 'e observa ca expresia jTT din linia P nu este evaluata deoarece expresia .i[1?3 este deja true 8peratori logici/ < 98R e.clu$i% boolean logic: #abela de adevar : Y! E.emplu/ ' public class %estQ9H { ) public static void main( String*+ args !{ , boolean val' 4 true" - boolean val) 4 true" . System.out.println(val' R val)!" / val' 4 false" val) 4 true" 0 System.out.println(val' R val)!" 1 val' 4 false" val) 4 false" 2 System.out.println(val' R val)!" '3 val' 4 true" val) 4 false" '' System.out.println(val' R val)!" ') # ', # Programul a+i$ea7a: false true false true 8peratorul logic/ = 9N8! logic: Dperatorul logic D# primeste un singur argument! care poate sa fie expresie! variabila sau constanta S #abela de adevar pentru O! MVP 2011-2012 Anca Ion E.emplu/ ' public class %estN9% { ) public static void main( String*+ args !{ , boolean val' 4 true" - boolean val) 4 false" . System.out.println(Cval'!" / System.out.println(Cval)!" 0 # 1 # S Programul afiseaza! false true 8peratori logici/ 8peratorul conditional 9>/: S este un operator ternar%aceasta inseamna ca primeste " argumente care impreuna formeaza o expresie. +'tructura expresiei este: exp1]exp2:exp" in care! exp1 +este o expresie booleana al carei rezultat poate fi true sau false + Eezultat: Daca exp1 este true! exp2 este valoarea returnata Daca exp1 este falsa atunci exp" este valoarea returnata E.emplu/ ' public class 6onditional9perator { ) public static void main( String*+ args !{ , String status 4 " - int grade 4 13" . //get status of the student / status 4 (grade B4 /3!STassedUVail" 0 //print status 1 System.out.println( status !" 2 # '3 # S Programul va afisa Passed Precedenta operatorilor MVP 2011-2012 Anca Ion 5. Crearea obiectelor In Java obiectele sunt create prin instantierea unei clase. Crearea unui obiect presupune trei lucruri: 1. 6eclararea obiectului : NumeCla$a numeDbiect) ,xemplu: Rectangle patrat) 2. In$tantierea 'e realizeaza prin intermediul operatorului ne? si are ca efect crearea efectiva a obiectului cu alocarea spatiului de memorie corespunzator. patrat I ne1 Eectangle.3) ". Initiali7area 'e realizeaza prin intermediul constructorilor clasei respective. Hectangle(! este un apel catre constructorul clasei Hectangle care este responsabil cu initializarea obiectului. Initializarea se poate face si cu anumiti parametri! cu conditia sa existe un constructor al clasei respective care sa accepte parametrii respectivi) patrat I ne1 Eectangle.?! ?! 1??! 2??3) =iecare clasa are un set de constructori care se ocupa cu initializare obiectelor nou create. De exemplu clasa Eectangle are urmatorii constructori: public Eectangle.Point p3 public Eectangle.int 1! int ;3 public Eectangle.Point p! int 1! int ;3 public Eectangle.3 MVP 2011-2012 Anca Ion ,xemplu: Eectangle patrat I ne1 Eectangle.?! ?! 1??! 2??3) Atentie OOO 'patiul de memorie nu este pre%alocat Declararea unui obiect nu implica alocarea de spatiu de memorie pentru acel obiect. $locarea memoriei se face doar la apelul instructiunii ne1 O Eectangle patrat) patrat.x I 1?) LL,ED$E,O @. Folo$irea obiectelor Eeferirea valorii unei variabile se face prin obiect.%ariabila De exemplu clasa Eectangle are variabilele publice x! -! 1idt;! ;eig;t! origin. $flarea valorilor acestor variabile sau sc;imbarea lor se face prin constructii de genul: Eectangle patrat I ne1 Eectangle.?! ?! 1??! 2??3) '-stem.out.println.patrat.1idt;3) LLafiseaza 1?? patrat.x I 1?) patrat.- I 2?) LLsc;imba originea patrat.origin I ne1 Point.1?! 2?3) LLsc;imba originea Dbs: $ccesul la variabilele unui obiect se face *n conformitate cu drepturile de acces pe care le ofera variabilele respective celorlalte clase. $pelul unei metode se face prin obiect.metoda9AparametriB: Eectangle patrat I ne1 Eectangle.?! ?! 1??! 2??3) patrat.set<ocation.1?! 2?3) LLsc;imba originea patrat.set'ize.2??! "??3) LLsc;imba dimensiunea C. 6i$trugerea obiectelor In Java programatorul nu mai are responsabilitatea distrugerii obiectelor sale *ntruc(t! *n momentul rularii unui program! simultan cu interpretorul Java ruleaza si un proces care se ocupa cu distrugerea obiectelor care nu mai sunt folosite. $cest proces pus la dispozitie de platforma Java de lucru se numeste garbage collector .colector de gunoi3! prescurtat gc. Gn obiect este elimnat din memorie de procesul de colectare atunci c(nd nu mai exista nici o referinta la acesta. Eeferintele .care sun de fapt variabile3 sunt distruse *n mod : natural! atunci cand variabila respectiva iese din domeniul sau! de exemplu la terminarea unei metode explicit! daca atribuim variabilei respective valoare null. 'D. 6eclararea cla$elor 4public54abstract54final5 cla$$ NumeCla$a 4extends ume'uperclasa5 MVP 2011-2012 Anca Ion 4implements Interfata1 4! Interfata2 ... 55 6 LLcorpul clasei 8 public- Implicit! o clasa poate fi folosita doar de clasele aflate *n acelasi pac;et cu clasa respectiva .daca nu se specifica un anume pac;et! toate clasele din directorul curent sunt considerate a fi *n acelasi pac;et3. D clasa declarata cu public poate fi folosita de orice clasa! indiferent de pac;etul *n care se gaseste. ab$tract - Declara o clasa abstracta .sablon3. D clasa abstracta nu poate fi instantiata! fiind folosita doar pentru a crea un model comun pentru o serie de subclase +inal -Declara ca respectiva clasa nu poate avea subclase. Declarare claselor finale are doua scopuri: Dupa numele clasei putem specifica! daca este cazul! faptul ca respectiva clasa este subclasa a unei alte clase cu numele NumeSuperclasa sauLsi ca implementeaza una sau mai multe interfete! ale caror nume trebuie separate prin virgula. 'e observa ca! spre deosebire de CTT! Java permite doar mo$tenirea $impla! asadar o clasa poate avea un singur un singur parinte .superclasa3. ,vident o clasa poate avea oric(ti mostenitori .subclase3. ,xtinderea unei clase se realizeaza deci astfel: class > extends $ 6...8 LL$ este superclasa clasei > Corpul unei cla$e Grmeaza declararea clasei si este cuprins *ntre acolade. Contine: declararea variabilelor de instanta si de clasa .cunoscute impreuna ca variabile membre3 declararea si implementarea metodelor de instanta si de clasa .cunoscute *mpreuna ca metode membre3 In CEE/ class $ 6 void metoda1.3) int metoda2.3 6 LLimplementare 8 8 $::metoda1.3 6 LLimplementare 8 In Ja%a/ class $ 6 void metoda.36 MVP 2011-2012 Anca Ion LLimplementare 8 8 Con$tructorii unei cla$e Constructorii unei clase sunt metode speciale care au acelasi nume cu cel al clasei! nu returneaza nici o valoare si sunt folositi pentru initializarea obiectelor acelei clase *n momentul instantierii lor. class Dreptung;i 6 Dreptung;i.3 6 LLconstructor 8 8 D clasa poate avea unul sau mai multi constructori care trebuie insa sa difere prin lista de argumente primite. In felul acesta sunt permise diverse tipuri de initializari ale obiectului la crearea sa! in functie de numarul parametrilor cu care este apelat constructorul. class Dreptung;i 6 double x! -! 1! ;) Dreptung;i.double x?! double -?! double 1o! double ;?3 6 xIx?) -I-?) 1I1?) ;I;?) 8 Dreptung;i.double x?! double -?3 6 t;is.x?! -?! ?! ?3) 8 Dreptung;i.3 6 LLinitializare implicita t;is.?! ?! 1??! 1??3) 8 8 Constructorii sunt apelati automat la instantierea unui obiect. In cazul in care dorim sa apelam explicit constructorul unei clase folosim metoda t,i$9argumente:! care apeleaza constructorul corespunzator .ca argumente3 al clasei respective. $ceasta metoda este folosita atunci cand sunt implementati mai multi constructori pentru o clasa pentru a nu repeta secventele de cod scrise la constructorii cu mai putine argumente. Dintr%o subclasa putem apela si constructorii superclasei cu metoda $uper9argumente:. class Patrat extends Dreptung;i 6 double size) Patrat.double x?! double -?! double s?3 6 LLse apeleaza constructorul superclasei super.x?! -?! s?! s?3) size I s?) 8 8 MVP 2011-2012 Anca Ion Constructorii sunt apelati automat la instantierea unui obiect. In cazul in care scrieti o clasa care nu are declarat nici un constructor! sistemul ii creeaza automat un constructor implicit care nu primeste nici un argument si care nu face nimic. Deci prezenta constructorilor in corpul unei clase nu este obligatorie. Daca insa ati scris un constructor pentru o clasa care are mai mult de un argument! atunci constructorul implicit .fara nici un argument3 nu va mai fi furnizat implicit de catre sistem. class Dreptung;i 6 LLnici un constructor 8 ... Dreptung;i d) dIne1 Dreptung;i.3) %\ Db .a fost generat constructorul implicit3 class Dreptung;i 6 double x! -! 1! ;) Dreptung;i.double x?! double -?! double 1o! double ;?3 6 xIx?) -I-?) 1I1?) ;I;?) 8 8 ... Dreptung;i d) dIne1 Dreptung;i.3) %\ ,roare la compilare Constructorii unei clase pot avea urmatorii specificatori de acces: pri%ate-ici o alta clasa nu poate instantia obiecte ale acestei clase. protected-Doar subclasele pot crea obiecte de tipul clasei respective public-Drice clasa poate crea instante ale clasei respective 6eclararea %ariabilelor membre Qariabilele se delara de obicei inaintea metodelor! desi acest lucru nu este impus de compilator. class umeClasa 6 LLdeclararea variabilelor LLdeclararea metodelor 8 Qariabilele unei clase se declara in corpul clasei dar nu *n corpul unei metode. Qariabilele declarate *n cadrul unei metode sunt locale metodei respective. Declararea unei variabile presupune specificarea urmatoarelor lucruri: numele variabilei tipul de date nivelul de acces la acea variabila de catre alte clase MVP 2011-2012 Anca Ion daca este constanta sau nu daca este variabila de instanta sau de clasa `eneric! o variabila se declara astfel: 4modificatori5 #ipDeDate numeQariabila 4I valoareInitiala5) unde un modificator poate fi : un specificator de acces : public7 protected7 private unul din cuvintele rezervate: static7 final7 transient7 volatile ,x: double x) protected static int n) public 'tring s I 7abcd7) private Point p I ne1 Point.1?! 1?3) final long R$C I 1?????<) 'pecificatorii de acces sunt cuvinte rezervate ce controleaza accesul celorlate clase la membrii unei clasei. 'pecificatorii de acces pentru variabilele si metodele unei clase sunt: public7 protected7 private si cel implicit .pacIage3! iar nivelul lor de acces este dat *n tabelul de mai jos: "peci+icator Cla$a "ubcla$a Pac,et !oti private C protected C CUU C public C C C C pac_ageU C C ,xemple de declaratii: private int secretPersonal) proteceted 'tring secretDe=amilie) public Qector elemente) long doarIntrePrieteni ) %\ pac_age private void metodaInterna.3) public double calculeazaEezultat.3) Dbs1.U3: Daca nu este specificat nici un modificator de acces! implicit nivelul de acces este la nivelul pac;etului .pac_age3. $sadar! modificatorul 7pac_age7 nu apare explicit *n declararea unei variabileLmetode .*n cazul *n care apare! compilatorul va furniza o eroare3. Dbs2.UU3: In cazul in care declaram un membru 7protected7 atunci accesul la acel membru din subclasele clasei in care a fost declarata variabila depinde si de pac;etul *n care se gaseste MVP 2011-2012 Anca Ion subclasa: daca sunt in acelasi pac;et accesul este permis! daca nu sunt *n acelasi pac;et accesul nu este permis decat pentru obiecte de tipul subclasei. Implementarea metodelor Retodele sunt responsabile cu descrierea comportamentului unui obiect. `eneric! o metoda se declara astfel: 4modificatori5 #ipEeturnat numeRetoda . 4argumente5 3 4t;ro1s #ip,xceptie5 6 LLcorpul metodei 8 unde un modificator poate fi : un specificator de acces : public! protected! private
unul din cuvintele rezervate: static7 abstract7 final7 native7 synchroni8ed #embri de in$tanta $i membri de cla$a D clasa Java poate contine doua tipuri de variabile si metode : de instanta: declarate +ara modificatorul static! specifice fiecarei instante si de clasa: declarate cu modificatorul static! specifice clasei Variabile Cand declarati o variabila membra cum ar fi x *n exemplul de mai jos: class R-Class 6 int x ) LLvariabila de instanta 8 se declara de fapt o variabila de instanta! cee ce *nsemna ca la fiecare creare a unei instante a clasei R-Class sistemul aloca o zona de memorie separata pentru memorarea valorii lui x. R-Class o1 I ne1 R-Class.3) o1.x I 1??) R-Class o2 I ne1 R-Class.3) o2.x I 2??) '-stem.out.println.o1.x3) LL %\ afiseaza 1?? '-stem.out.println.o2.x3 ) LL%\ afiseaza 2?? $sadar! fiecare obiect nou creat va putea memora valori diferite pentru variabilele sale de instanta. Pentru variabilele de clasa .statice3 sistemul aloca o singura zona de memorie la care au acces toate instantele clasei respective! ceea ce *nseamna ca daca un obiect modifica valoarea unei variabile statice ea se va modifica si pentru toate celelate obiecte. class R-Class 6 int x ) LLvariabila de instanta static long n) LLvariabila de clasa 8 . . . MVP 2011-2012 Anca Ion R-Class o1 I ne1 R-Class.3) R-Class o2 I ne1 R-Class.3) o1.n I 1??) '-stem.out.println.o2.n3 %\ afiseaza 1?? o2.n I 2??) '-stem.out.println.o1.n3 %\ afiseaza 2?? #etode 'imilar ca la variabile! metodele declarate fara modificatorul static sunt metode de instanta iar cele declarate cu static sunt metode de clasa .statice3. Diferenta *ntre cele doua metode este urmatoarea: metodele de in$tanta opereaza at(t pe variabilele de instanta c(t si pe cele statice ale clasei metodele de cla$a opereaza doar pe variabilele statice ale clasei class R-Class 6 int x ) LLvariabila de instanta static long n) LLvariabila de clasa void metodaDeInstanta.3 6 n TT) LLcorect x %%) LLcorect static void metoda'tatica.3 6 n TT) LLcorect x %%) LLincorect 8 Intruct metodele de clasa nu depind de starea obiectelor clasei respective! apelul lor se poate face astfel: R-Class.metoda'tatica.3) LLcorect! ec;ivalent cu R-Class obj I ne1 R-Class.3) obj.metoda'tatica.3) LLcorect spre deosebire de metodele de instanta care nu pot fi apelate dec(t unei instante a clasei respective: R-Class.metodaDeInstanta.3! LLincorect R-Class obj I ne1 R-Class.3) obj.metodaDeInstanta.3) LLcorect Utilitatea membrilor de cla$a 9$tatici: 'unt folositi pentru a pune la dispozitie valori si metode independente de starea obiectelor dintr%o anumita clasa. 1. 6eclararea con$tantelor class R-Class 6 final double PI I ".1&) LLvariabila finala de instanta 8 MVP 2011-2012 Anca Ion <a fiecare instantiere a clasei R-Class va fi rezervata zona de memorie pentru variabilele finale ale obiectului respectiv! ceea ce este o risipa *ntruc(t aceste constante au aceleasi valori pentru toate instantele clasei. Declararea corecta a constantelor trebuie asadar facuta cu modificatorii $tatic $i +inal! pentru a le rezerva o singura zona de memorie! comuna tuturor obiectelor: class R-Class 6 static final double PI I ".1&) LLvariabila finala de clasa 8 2. Numararea obiectelor unei cla$e class R-Class 6 static long nrInstante I ?) R-Class.3 6 LLconstructorul este apelat la fiecare instantiere nrInstante TT) 8 8 =olosind variabile statice putem controla diversi parametri legati de crearea obiectelor unei clase Initiali7area %ariabilelor de cla$a 'e poate face *n momentul declararii lor : class R-Class 6 static final double PI I ".1&) static long nrInstante I ?) static final double ,P' I ?.?1) 8 sau prin intermediul unui bloc static de initializare: class R-Class 6 static 6 final double PI I ".1&) long nrInstante I ?) final double ,P' I ?.?1) 8 8 "upraFncarcarea $i $uprade+inirea metodelor 'unt doua concepte extrem de utile ale PDD si se refera la: MVP 2011-2012 Anca Ion suprancarcarea (overloading) : in cadrul unei clase pot exista metode cu acelasi nume cu conditia ca semnaturile lor sa fie diferite .lista de argumente primite sa difere fie prin numarul argumentelor! fie prin tipul lor3 astfel *nc(t la apelul functiei cu acel nume sa se poata stabili *n mod unic care dintre ele se executa. =enomenul de supradefinire a metodelor se mai numeste si polimorfism. supradefinirea (overriding): o subclasa a unei clase poate rescrie o metoda a clasei parinte! prin implementarea unei metode cu acelasi nume si aceeasi signatura ca ale superclasei. ,xemplificare: class $ 6 void metoda.3 6 '-stem.out.println.7$: metoda fara parametru73) 8 LLsupraincarcare % polimorfism void metoda.int arg3 6 '-stem.out.println.7$: metoda cu un parametru73) 8 8 class > extends $ 6 LLsupradefinire void metoda.3 6 '-stem.out.println.7>: metoda fara parametru73) 8 8 D metoda supradefinita poate sa: ignore complet codul metodei corespunzatoare din superclasa .cazul de mai sus3 > b I ne1 >.3) b.metoda.3) %\ afiseaza 7>: metoda fara parametru7 sa extinda codul metodei parinte! execut(nd *nainte de codul propriu si functia parinte. class > extends $ 6 LLsupradefinire prin extensie void metoda.3 6 super.metoda.3) '-stem.out.println.7>: metoda fara parametru73) 8 8 . . . > b I ne1 >.3) b.metoda.3) %\ afiseaza : 7$: metoda fara parametru7 MVP 2011-2012 Anca Ion 7>: metoda fara parametru7 #etode +inale D metoda finala nu mai poate fi supradefinita in subclasele clasei in care ea este definita ca fiind finala. $cest lucru este util daca respectiva metoda are o implementare care nu trebuie sc;imbata sub nici o forma in subclasele ei! fiind critica pentru consistenta starii unui obiect. De exemplu studentilor unei universitati trebuie sa li se calculeze media finala in functie de notele obtinute la examene in aceeasi maniera! indiferent de facultatea la care sunt. class 'tudent 6 . . . final float calcRedie.int nr,xamene! float note45! float ponderi453 6 ... 8 . . . 8 class 'tudentInformatica extends 'tudent6 float calcRedie.int nr,xamene! float note45! float ponderi453 6 return 1?.??) 8 8LLeroare la compilareO Cla$e imbricate D clasa imbricata este! prin definitie! o clasa membra a unei alte clase class ClasaDe$coperire6 . . . class ClasaImbricata 6 . . . 8 8 =olosirea claselor imbricate se face atunci cand o alta clasa are nevoie in implementarea ei de o alta clasa si nu exista nici un motiv pentru care clasa imbricata sa fie declarata de sine statatoare .nu mai este folosita nicaieri3. public class Pac;et 6 LLclasa de acoperire class Continut 6 LLclasa imbricata private 'tring marfa) private float cantitate) Continut .'tring marfa! float cantitate3 6 t;is.marfa I marfa) t;is.cantitate I cantitate) 8 8 MVP 2011-2012 Anca Ion class Destinatie 6 LLclasa imbricata private 'tring dest) private int termen) Destinatie.'tring undePleaca! int inCateBile3 6 dest I undePleaca) termen I inCateBile) 8 8 public void trimite.'tring marfa! float cant! 'tring dest! int termen3 6 Continut c I ne1 Continut.marfa! cant3) Destinatie d I ne1 Destinatie.dest! termen3) 8 public static void main.'tring45 args3 6 Pac;et p I ne1 Pac;et.3) p.trimite.7banane7! 1??! 7Eomania7! P3) 8 8 Ca membra a unei clase! o clasa imbricata are un privilegiu special fata de celelalte clase: acces nelimitat la variabilele clasei de acoperire! c;iar daca acestea sunt private. Cla$e interne Ca orice alta clasa o clasa imbricata poate fi declarata statica sau nu. D cla$a imbricata ne$tatica se numeste cla$a interna. class ClasaDe$coperire6 . . . static class ClasaImbricata'tatica 6 . . . 8 class ClasaInterna 6 . . . 8 8 Diferentierea acestor denumiri se face deoarece: o o 7clasa imbricata7 reflecta relatia sintactica a doua clase) codul unei clase apare in interiorul codului altei clase) MVP 2011-2012 Anca Ion o o 7clasa interna7 reflecta relatia dintre instantele a doua clase! *n sensul ca o instanta a unei clase interne nu poate exista dec(t *n cadrul unei instante a clasei de acoperire. $sadar! o clasa interna este o clasa imbricata ale carei instante nu pot exista dec(t *n cadrul instantelor clasei de acoperire si care are acces direct la toti membrii clasei sale de acoperire. Identi+icarea cla$elor imbricate Dupa cum stim orice clasa produce la compilare asa numitele 7unitati de compilare7! care sunt fisiere avand numele clasei respective si extensia .class! si care contin toate informatiile despre clasa respectiva. Pentru clasele imbricate aceste unitati de compilare sunt denumite astfel: numele clasei de acoperire! urmat de simbolul N:N apoi de numele clasei imbricate. class ClasaDe$coperire6 class ClasaInterna1 68 class ClasaInterna2 68 8 Pentru exemplul de mai sus vor fi generate trei fisiere: ClasaDe$coperire.class ClasaDe$coperire:ClasaInterna1.class ClasaDe$coperire:ClasaInterna2.class In cazul in care clasele imbricate au la randul lor alte clase imbricate .situatie mai putin uzuala3 denumirea lor se face dupa aceeasi metoda: adaugarea unui N:N si apoi numele clasei imbricate. Cla$e $i metode ab$tracte Gneori in proiectarea unei aplicatii este necesar sa reprezentam cu ajutorul claselor concepte abstracte care sa nu poata fi instantiate si care sa foloseasca doar la dezvoltarea ulterioara a unor clase ce descriu obiecte concrete. De exemplu in pac;etul java.lang exista clasa abstracta umber care modeleaza conceptul generic de 7numar7. Intr%un program nu avem *nsa nevoie de numere generice ci de numere *ntregi! reale! etc. Clasa umber serveste ca superclasa pentru clase cum ar fi >-te! Double! =loat! Integer! <ong si ';ort ce implementeaza obiecte pentru descrierea numerelor de un anumit tip. $sadar clasa umber reprezinta un concept abstract si nu vom putea instantia obiecte de acest tip: umber numar`eneric I ne1 umber.3) LLeroare MVP 2011-2012 Anca Ion 6eclararea unei cla$e ab$tracte 'e face folosind cuvantul rezervat ab$tract *n declaratia clasei: abstract class Clasa$bstracta 6 . . . 8 Daca vom incerca sa instantiem un obiect al clasei 6lasa<bstracta vom obtine o eroare la compilarea programului de genul:class 6lasa<bstracta is an abstract class. Wt can5t be instantiated. #etode ab$tracte 'pre deosebire de clasele obisnuite care trebuie sa furnizeze implementari pentru toate metodele declarate o clasa abstracta poate contine metode fara nici o implementare. #etodele +ara nici o implementare $e nume$c metode ab$tracte $i pot aparea doar in cla$e ab$tracte. In fata unei metode abstracte trebuie sa apara cuvantul c;eie abstract! altfel va fi furnizata o eroare de compilare. abstract void metoda$bstracta.3) LLcorect void metoda.3) LLincorect .Ret;od metoda reauires a met;od bod-) ot;er1is1 declare it abstract3 In felul acesta o clasa abstracta poate pune la dispozitia subclaselor sale un model complet pe care trebuie sa%l implementeze! furniz(nd c;iar implementarea unor metode comune tuturor claselor sau las(nd explicitarea unor metode fiecarei subclase in parte. III. 6e$+a$urarea laboratorului E.ercitiul '/ 6eclararea2 Initiali7area2 A+i$area %ariabilelor 9e.emplu ': '. Compilarea $i e.ecutia programului Ja%a OutputVariable +olo$ind comen7ile Gja%acG $i Gja%aG (. Compilarea $i e.ecutia programului Ja%a OutputVariable +olo$ind I6E- Eclip$e *. Compilati $i e.ecutati programele Ja%a/ $rit;meticDemo! EelationalDemo! EelationalDemo! #est$D! #estDE! #estD#! ConditionalDperator MVP 2011-2012 Anca Ion Re7ol%are/ E.ecitiul ' 1. 'alvati programele Java in directorul myprograms: C:M\cd Hm1ja%aprogram$ 2. 'crieti clasa 8utputVariable.ja%a folosind un editor text ". Compilati 8utputVariable.ja%a folosind compilatorul ja%ac. In Hindo1s compilatorul se gaseste in IJAVAJ&8#EIHbin. Eezultatul compilarii va fi creat in fisierul 8utputVariable.cla$$ file. C:Mm-javaprograms\ja%ac 8utputVariable.ja%a Problema % eroare c1: C:Mm-javaprograms\javac 0ello.java NjavacN is not recognized as an internal or external command! operable program or batc; file 'olutia ca: $daugati C:M7Program =iles7MJavaMjd_1.F.?91?Mbin .pentru platforma Hindo1s platform3 variabilei de mediu java9;ome. C:Mm-javaprograms\Vjava9;omeVMjavac 0ello.java 'olution cb: 'e poate specifica intreaga cale ca mai jos: C:Mm-javaprograms\C:M7Program =iles7MJavaMjd_1.F.?91?MbinMjavac 0ello.java &. ,xecutati programul 8utputVariable folosind comanda ja%a. $ceasta comanda porneste Java Qirtual Rac;ine si executa programul 8utputVariable. C:Mm-javaprograms\ja%a 8utputVariable 1? #;e value of xI$ I.Crearea de cla$e in Ja%a MVP 2011-2012 Anca Ion Creati in Eclip$e proiectul numit/ #1"tudentRecordE.ample '. Adaugati la proiect cla$a StudentRecord public class StudentRecord {
/** Creates a new instance of StudentRecord */ public StudentRecord() { }
// Declarea variabilelor statice private static int studentCount ! ";
/** * Returnea#a numele studentului */ public String get$ame(){ return name; }
/** * Setea#a numele studentului */ public void set$ame(String temp ){ name !temp; }
/** * Calculea#a media calificativelor la engle#a matematica si stiinte * */ public double get%verage(){ double result !"; result !(get&athrade()'get(nglishrade()'getSciencerade() )/); return result; }
/** * Returneaza numarul de instante ale clasei StudentRecords */ public static int getStudentCount(){ return studentCount; }
/** * Returneaza numarul de instante ale clasei StudentRecords. * Metoda statica. */ MVP 2011-2012 Anca Ion public static void increaseStudentCount(){ studentCount''; } // Metode de instanta public double get&athrade() { return mathrade; } public void set&athrade(double mathrade) { this*mathrade ! mathrade; } public double get(nglishrade() { return englishrade; } public void set(nglishrade(double englishrade) { this*englishrade ! englishrade; } public double getSciencerade() { return sciencerade; } public void setSciencerade(double sciencerade) { this*sciencerade ! sciencerade; } } (. Adaugati la proiect cla$a StudentRecordExample public class StudentRecord(+ample {
public static void main(String,- args) {
// Crearea unei instante a clasei StudentRecord StudentRecord annaRecord !new StudentRecord();
// Incrementarea variabilei studentCount prin invocarea metodei statice StudentRecord*increaseStudentCount();
// Crearea unei instante a clasei StudentRecord. StudentRecord beahRecord !new StudentRecord();
// Incrementarea variabilei studentCount prin invocarea metodei statice. StudentRecord*increaseStudentCount();
// Crearea unei instante a clasei StudentRecord. StudentRecord crisRecord !new StudentRecord();
// Incrementarea variabilei studentCount prin invocarea metodei statice. StudentRecord*increaseStudentCount();
// Setarea numelor studentilor. annaRecord*set$ame(.%nna.); MVP 2011-2012 Anca Ion beahRecord*set$ame(./eah.); crisRecord*set$ame(.Cris.);
// Afisarea numarului de studenti S0stem*out*println(.Student Count ! .'StudentRecord*getStudentCount()); }
} *. E.ecutati proiectul 4. E.ercitiu/ Faceti urmatoarele $c,imbari $i e.ecutati apoi programul &odificati clasa StudentRecordExample.ava astfel1 o Creati un alt obiect numit StudentRecord numit m!"#nRecord o %pelati metoda set$ame() a obiectului m!"#nRecord pasand parametrul .m02wn. ca argument al functiei o %fisati numele obiectului m!"#nRecord o Setati calificativul la matematica al obiectului m!"#nRecord o Setati calificativul la engle#a al obiectului m!"#nRecord o Setati calificativul la stiinte al obiectului m!"#nRecord o %fisati media calificativelor pentru obiectul m!"#nRecord II. Variabile $tatice $i non-$tatice Creati in Eclip$e proiectul numit/ #1"taticVariable$E.ampleProject
'. Adaugati la proiect cla$a Variables public class 3ariables {
// $ariabile statice static int staticintA % &'( static Strin) staticStrin)* %+I am static strin)+(
// $ariabile de instanta int instanceintA % ,'( Strin) instanceStrin)* % +I am instance strin)+( } (. Adaugati la proiect cla$a StaticVariablesExamples public class Static3ariables(+ample {
public static void main(String,- args) {
// Accesarea variabilelor statice // Se observa ca nu trebuie creat un obiect instanta al clasei MVP 2011-2012 Anca Ion S0stem*out*println(.3ariables*staticint% ! . ' 3ariables*staticint%); S0stem*out*println(.3ariables*staticString/ ! . ' 3ariables*staticString/); 3ariables*staticString/ ! .4ife is good5.; S0stem*out*println(.3ariables*staticString/ ! . ' 3ariables*staticString/);
//Accesarea variabilelor de clasa. // Se observa ca trebuie creat un obiect instanta al clasei pentru a avea acces la ele 3ariables ob6ect7nstance8 ! new 3ariables(); 3ariables ob6ect7nstance9 ! new 3ariables(); ob6ect7nstance8*instanceint% ! 8; S0stem*out*println(.ob6ect7nstance8*instanceint% ! . ' ob6ect7nstance8*instanceint%); ob6ect7nstance9*instanceint% ! ); S0stem*out*println(.ob6ect7nstance9*instanceint% ! . ' ob6ect7nstance9*instanceint%);
// $ariabilele statice pot fi accesate si pentru o instanta a unui obiect S0stem*out*println(.ob6ect7nstance8*staticint% ! . ' ob6ect7nstance8*staticint%); ob6ect7nstance8*staticint% ! 99"; S0stem*out*println(.ob6ect7nstance8*staticint% ! . ' ob6ect7nstance8*staticint%); S0stem*out*println(.3ariables*staticint% ! . ' 3ariables*staticint%);
} *. E.ecutati proiectul 4. E.ercitiu/ Rodificati clasa StaticVariablesExample.java pentru a afisa re#ultatul adunarii variabilei statice staticintA cu variabila de instanta instanceintA III. #etode $tatice $i non-$tatice Creati in Eclip$e proiectul numit/ MyStaticMethodsExampleProject
'. Adaugati la proiect cla$a Methods public class ðods {
// Static variable static int a ! ";
// Metode statice static void staticðod(int i) { S0stem*out*println(.staticðod(.' i '.) entered.); }
// Metoda statica anonima. -ot ce este in interiorul metodei statice anonime va fi //executat cand clasa este incarcata static { //bloc static S0stem*out*println(.%non0mous static method entered; a ! . ' a); MVP 2011-2012 Anca Ion a '! 8; // same thing as a ! a ' 8 S0stem*out*println(.%non0mous static method e+iting; a ! . ' a); }
// Metode non.statice void m0$onStaticðods(int i){ S0stem*out*println(.m0$onStaticðod(.' i '.) entered.); } } (. Adaugati la proiect cla$a StaticMethodsExamples public class Staticðods(+ample {
public static void main(String,- args) { // Accesarea variabilei statice a ðods* S0stem*out*println(.ðods*a ! . ' ðods*a);
// Invocarea metodei statice a clasei Met/ods. ðods*staticðod(:);
ðods d ! new ðods(); S0stem*out*println(.d*a ! . ' d*a);
// Metoda statica poate fi invocata si de o instanta a unui obiect d*staticðod(");
// Aceeasi variabila statica poate fi accesata de instante multiple ðods e ! new ðods(); S0stem*out*println(.e*a ! . ' e*a); d*a '! ); S0stem*out*println(.ðods*a ! . ' ðods*a); S0stem*out*println(.d*a ! . ' d*a); S0stem*out*println(.e*a ! . ' e*a);
// eroare de compilare // ðods*m0$onStaticðod()); }
} *. E.ecutati proiectul IV. Con$tructori Creati in Eclip$e proiectul numit/ MyStaticMethodsExampleProject
1. Adaugati la proiect cla$a StudentRecord public class StudentRecord {
// <eclararea variabilelor de instanta private String name; private double mathrade; MVP 2011-2012 Anca Ion private double englishrade; private double sciencerade; private double average;
// <eclararea variabilelor statice private static int studentCount ! ";
// constructor implicit public StudentRecord01 2 3
// Constructor cu un sin)ur parametru public StudentRecord0Strin) name12 t/is.name % name( 3
/** * Returnea#a numele studentului */ public String get$ame(){ return name; }
/** Setea#a numele studentului */ public void set$ame(String temp ){ name !temp; }
/** * Calculea#a media calificativelor la engle#a matematica si stiinte */ public double get%verage(){ double result !"; MVP 2011-2012 Anca Ion result !(get&athrade()'get(nglishrade()'getSciencerade() )/); return result; }
/** * Returneaza numarul de instante ale clasei StudentRecords */ public static int getStudentCount(){ return studentCount; }
/** * Returneaza numarul de instante ale clasei StudentRecords* ** */ public static void increaseStudentCount(){ studentCount''; }
// &etode de instanta public double get&athrade() { return mathrade; }
public void set&athrade(double mathrade) { this*mathrade ! mathrade; }
public double get(nglishrade() { return englishrade; }
public void set(nglishrade(double englishrade) { this*englishrade ! englishrade; }
public double getSciencerade() { return sciencerade; }
public void setSciencerade(double sciencerade) { this*sciencerade ! sciencerade; } } (. Adaugati la proiect cla$a ConstructorExample public class Constructor(+ample {
public static void main(String,- args) {
// Create an obect instance of StudentRecord class. StudentRecord annaRecord ! new StudentRecord(.%nna.);
// Increament t/e studentCount b! invo8in) a static met/od. StudentRecord*increaseStudentCount(); MVP 2011-2012 Anca Ion
// Increament t/e studentCount b! invo8in) a static met/od. StudentRecord*increaseStudentCount();
// 9rint Cris: name and avera)e S0stem*out*println(.$ame ! . ' crisRecord*get$ame() ' . %verage ! . ' crisRecord*get%verage());
// 9rint number of students. S0stem*out*println(.Student Count ! .'StudentRecord*getStudentCount()); }
} *. E.ecutati proiectul 4. E.ercitiu/ modi+icati cla$ele StudentRecord*6ava si Constructor(+ample*6ava1 - creati un con$tructor in cla$a StudentRecord*6ava in care media calificativelor este pasata ca argument - modi+icati cla$a Constructor(+ample*6ava a*i obiectul annaRecord este creat folosind constructorul nou*