Sunteți pe pagina 1din 37

MVP 2011-2012 Anca Ion

Fundamente ale limbajului de programare JAVA


-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 de instanta
private String name;
private double mathrade;
private double englishrade;
private double sciencerade;
private double average;

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


S0stem*out*println(.$ame ! . ' annaRecord*get$ame());

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

ob6ect7nstance9*staticint% ! ::";
S0stem*out*println(.ob6ect7nstance8*staticint% ! . ' ob6ect7nstance8*staticint%);
S0stem*out*println(.ob6ect7nstance9*staticint% ! . ' ob6ect7nstance9*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 &ethods {

// Static variable
static int a ! ";

// Metode statice
static void static&ethod(int i) {
S0stem*out*println(.static&ethod(.' 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&ethods(int i){
S0stem*out*println(.m0$onStatic&ethod(.' i '.) entered.);
}
}
(. Adaugati la proiect cla$a StaticMethodsExamples
public class Static&ethods(+ample {

public static void main(String,- args) {
// Accesarea variabilei statice a &ethods*
S0stem*out*println(.&ethods*a ! . ' &ethods*a);

// Invocarea metodei statice a clasei Met/ods.
&ethods*static&ethod(:);

&ethods d ! new &ethods();
S0stem*out*println(.d*a ! . ' d*a);

// Metoda statica poate fi invocata si de o instanta a unui obiect
d*static&ethod(");

// Aceeasi variabila statica poate fi accesata de instante multiple
&ethods e ! new &ethods();
S0stem*out*println(.e*a ! . ' e*a);
d*a '! );
S0stem*out*println(.&ethods*a ! . ' &ethods*a);
S0stem*out*println(.d*a ! . ' d*a);
S0stem*out*println(.e*a ! . ' e*a);

// eroare de compilare
// &ethods*m0$onStatic&ethod());
}

}
*. 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

// Constructor cu , parametri
public StudentRecord0Strin) name4 double m5rade12
t/is.name % name(
mat/5rade % m5rade(
3
// Constructor cu 6 parametri
public StudentRecord0Strin) name4 double m5rade4 double e5rade12
t/is.name % name(
mat/5rade % m5rade(
en)lis/5rade % e5rade(
3
// Constructor cu 7 parametri
public StudentRecord0Strin) name4 double m5rade4 double e5rade4
double s5rade12
t/is.name % name(
mat/5rade % m5rade(
en)lis/5rade % e5rade(
science5rade % s5rade(
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

// Create anot/er obect instance of StudentRecord class.
StudentRecord beahRecord !new StudentRecord(./eah.; =:);

// Increament t/e studentCount b! invo8in) a static met/od.
StudentRecord*increaseStudentCount();

// Create t/e 6rd obect instance of StudentRecord class.
StudentRecord crisRecord !new StudentRecord(.Cris.; 9)*); >?*=:; :>);

// 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*