Sunteți pe pagina 1din 37

MVP 2011-2012

Anca Ion

Fundamente ale limbajului de programare JAVA


-timp de lucru 4 oreI. 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 APLICATII SIMPLE
a. Scrierea codului sursa
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.

Salvarea codului sursa


1.Programele Java trebuie sa aiba totdeauna extensia .java
2. Numele fisierului trebuie sa fie acelasi cu al clasei publice. Daca de exemplu, numele
clasei publice este Hello, fisierul trebuie numit Hello.java.
3. Toate programele scrise in Java cu exceptia Applet-urilor trebuie sa contine o metoda
principala
4. Trebuie scrise comentarii in cod pentru a explica actiunile unei metode sau unei clase

c.

Compilarea aplicatiei
1. Se foloseste compilatorul Java, javac
2. Apelul compilatorului se face pentru fisierul ce contine clasa principala a aplicatiei.
3.Compilatorul creeaza cte un fisier separat pentru fiecare clasa a programului; acestea
au extensia .class si sunt plasate n acelasi director cu fisierele sursa.
javac Hello.java

d.

Rularea aplicatiei

MVP 2011-2012

Anca Ion

Se face cu interpretorul java, apelat pentru unitatea de compilare corespunzatoare clasei


principale, fiind nsa omisa extensia .class asociata acesteia
java Hello
1. Java Statements
una sau mai multe linii de cod terminate cu punct si virgula.
Exemplu: System.out.println(Hello world);
2. Blocuri Java
blocul este format din:
una sau mai multe declaratii incadrate in acolade
blocurile pot fi imbricate
Exemplu:
public static void main( String[] args ){
System.out.println("Hello");
System.out.println("world);
}
3. Identificatori Java
Sunt atomi care reprezinta numele variabilelor, metodelor, claselor, etc.
Exemple de identificatori: Hello, main, System, out.
Identificatorii Java sunt case-sensitive.
Aceasta inseamna ca identificatorul Hello nu este acelasi cu hello.
Identificatorii trebuie sa inceapa cu ori cu o litera, underscore _, sau semnul dolar $.
Identificatorii nu pot folosi cuvintele cheie Java cum ar fi: class, public, void, etc.
4. Cuvinte cheie Java
Cuvintele cheie sunt identificatori predefiniti rezervati de Java pentru diverse scopuri
Acestea nu se pot folosi ca nume de variabile, clase, metode, etc
Cuvinte cheie in Java

5. Literali in Java
Literalii sunt atomi care nu se schimba raman constanti
Tipurile de literali in Java sunt:
Integer

MVP 2011-2012

Anca Ion

Floating-Point
Boolean
Character
String
Literali Java de tip Integer
Literalii de tip Integer sunt in diferite formate:
decimal (baza 10)
hexadecimal (baza 16)
octal (baza 8).
Exemple de literali Java de tip Integer
Notatii speciale pentru literali de tip intreg:
Zecimal
Exemplu: 12
Hexazecimal
Precedat de 0x sau 0X
Exemplu: 0xC
Octal
Precedat de 0
Exemple: 014
Literali Java: Floating Point
Reprezinta numere zecimale cu parte fractionala
Exemplu: 3.1416
Pot fi scrisi in notatie standard sau notatie stiintifica
Exemple: 583.45 (standard), 5.8345e2 (stiintifica)
Literali Java: Boolean
Literalii de tip Boolean au valorile: true sau false.
Literali Java: Character
Literalii de tip Character reprezinta caractere Unicode.
caracter Unicode
reprezinta un set de caractere pe 16-bit care inlocuieste setul de caractere 8-bit ASCII
Unicode ul permite includerea de simboluri si caractere speciale din alte limbi
Literali Java: String
Literalii de tip String reprezinta caractere multiple si sunt inchise in ghilimele duble
Exemplu de literal string: Hello World.
6. Tipuri de date primitive
Limbajul de programare Java defineste 8 tipuri de date primitive:
boolean
char
byte
short
int
long

MVP 2011-2012

Anca Ion

double
float
6.1.Tipul primitiv de date boolean
Tipul de date Boolean reprezinta 2 stari: true si false.
Exemplu:
boolean result = true;
6.2. Tipul primitiv de date: char
Tipul de date char reprezinta caracterele unicod

Literalii acestui tip se reprezinta intre ghilimele simple ( ).


De exemplu
a //litera a
\t // tab
Pentru a reprezenta caractere speciale ca ghilimele simple ' sau ghilimele duble ", se
foloseste caracterul character \. De exemplu,
'\'' //pentru ghilimele simple
'\"' //pentru ghilimele duble
6.3. Tipul primitiv de date: String
Desi String nu este un tip de date primitiv ci o clasa, totusi va fi prezentat in aceasta
sectiune
String reprezinta un tip de date care contine caractere multiple.
Literalii acestui tip se reprezinta intre ghilimele duble().
De exemplu,
String message=Hello world!;
6.4. Tipuri de date primitive intregi: byte, short, int & long
Tipul de date intreg in Java foloseste 3 forme zecimal, octal sau hexazecimal.
Exemple:
2 //valoarea zecimala a lui 2
077 //valoarea octala
0xBACC //0x valoare hexazecimala
Tipurile de date intregi au ca si tip de date implicit int
Valoarea de tip long se poate defini prin adaugarea literei l sau L
De exemplu: 10L
Tipul de date intreg are urmatoarele ranguri:

MVP 2011-2012

Anca Ion

6.5. Tipuri de date primitive reale float si double


Tipurile de date reale au ca si tip implicit tipul de date double
Literalii de tip real se reprezinta folosind punctul zecimal sau una dintre notatiile:
E sau e //(adaugarea unei valori exponentiale)
F sau f //(float)
D sau d //(double)
Exemple:
3.14 //double
6.02E23 //valoare mare de tip double
2.718F //valoare de tip float
Tipurile de date reale au urmatoare ranguri:

7. Variabile
Variabilele pot avea ca tip fie un tip primitiv de data, fie o referinta la un obiect.
Declararea variabilelor Tip nume_variabila
Initializarea
Tip nume_variabila = valoare
variabilelor
Declararea
final Tip nume_variabila
constantelor
Conventia de notare a variabilelor in Java este data de urmatoarele criterii:
1. variabilele finale (constante) 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:
3. final double PI = 3.14;
4. int valoare = 100;
5. long numarElemente = 12345678L;
6. String bauturaMeaPreferata = "apa";
In functie de locul in care sunt declarate variabile se impart in urmatoatele categorii:
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 "Declararea
variabilelor membre")

MVP 2011-2012

Anca Ion

2. Variabile locale, declarate ntr-o metoda sau ntr-un bloc de cod, vizibile doar n
metoda/blocul respectiv
3. Parametri metodelor, vizibili doar n metoda respectiva
4. Parametrii de la tratarea exceptiilor
Exemplu 1: Declararea si initializarea variabilelor

1 public class VariableSamples {


2 public static void main(String[] args ){
3 //declare a data type with variable name
4 //result and boolean data type
5 boolean result;
6
7 //declare a data type with variable name
8 //option and char data type
9 char option;
10 option = 'C'; //assign 'C' to option
11
12 //declare a data type with variable name
13 //grade, double data type and initialized
14 //to 0.0
15 double grade = 0.0;
16 }
17 }

Afisarea variabilelor
Pentru a afisa valoarea variabilelor se folosesc urmatoarele comenzi:
System.out.println()
System.out.print()
Exemplu:
1 public class OutputVariable {
2 public static void main( String[] args ){
3 int value = 10;
4 char x;
5 x = A;
6
7 System.out.println( value );
8 System.out.println( The value of x= + x );
9 }
10 }

Variabile referinta vs. variabile primitive


Exista 2 tipuri de variabile in Java:
Variabile primitive
Variabile de referinta
Variabile primitive
sunt variabile cu tipuri de date primitive cum ar fi int sau long.
stocheaza datele in locatia de memorie curenta in care este stocata variabila
Variabile de referinta
variabile care stocheaza adresa unei locatii de memorie

MVP 2011-2012

Anca Ion

cand se declara o variabila de tip clasa, de fapt se declara o variabila de referinta pentru
obiectul din acea clasa
Exemplu
Presupunem ca avem 2 variabile cu tipurile de date int si String.
int num = 10; // tip primitiv
String name = "Hello"; // tip referinta
Exemplu
In figura de mai jos, este aratat modul de stocare al variabilelor referinta si primitive.

Operatori

atribuirea: =
operatori matematici: +, -, *, /, %
Este permisa notatia prescurtata de forma lval op= rval (ex: n += 2)
Exista operatorii pentru autoincrementare si autodecrementare (post si pre)
ex: x++, ++x, n--, --n
Observatie: evaluarea expresiilor logice se face prin metoda scurtcircuitului (evaluarea se
opreste n momentul n care valoarea de adevar a expresiei este sigur determinata)
operatori logici: &&(and), ||(or), !(not)
operatori relationali: <, <=, >, <=, ==, !=
operatori pe biti: & (and), |(or), ^(xor), ~(not)
operatori de translatie <<, >>, >>> (shift la dreapta fara semn)
operatorul if-else: expresie_logica ? val_pt_true : val_pt_false ;
operatorul , (virgula) folosit pentru evaluarea secventiala a operatiilor int x=0, y=1, z=2;
operatorul + pentru concatenarea sirurilor:
String s="abcd"
int x=100;
System.out.println(s + " - " + x);
operatori pentru conversii (cast) : (tip_de_data)
int i = 200;
long l = (long)i; //widening conversion - conversie prin extensie
long l2 = (long)200;
int i2 = (int)l2; //narrowing conversion - conversie prin contractie

MVP 2011-2012

Exemplu 2
1 public class ArithmeticDemo {
2 public static void main(String[] args){
3 //a few numbers
4 int i = 37;
5 int j = 42;
6 double x = 27.475;
7 double y = 7.22;
8 System.out.println("Variable values...");
9 System.out.println(" i = " + i);
10 System.out.println(" j = " + j);
11 System.out.println(" x = " + x);
12 System.out.println(" y = " + y);
System.out.println("Adding...");
13 System.out.println(" i + j = " + (i + j));
14 System.out.println(" x + y = " + (x + y));
15 //subtracting numbers
16 System.out.println("Subtracting...");
17 System.out.println(" i - j = " + (i j));
18 System.out.println(" x - y = " + (x y));
19
20 //multiplying numbers
21 System.out.println("Multiplying...");
22 System.out.println(" i * j = " + (i * j));
23 System.out.println(" x * y = " + (x * y));
24
25 //dividing numbers
26 System.out.println("Dividing...");
27 System.out.println(" i / j = " + (i / j));
28 System.out.println(" x / y = " + (x / y));
29 //computing the remainder resulting from dividing
30 // numbers
31 System.out.println("Computing the remainder...");
32 System.out.println(" i % j = " + (i % j));
33 System.out.println(" x % y = " + (x % y));
34
35 //mixing types
36 System.out.println("Mixing types...");
37 System.out.println(" j + y = " + (j + y));
38 System.out.println(" i * x = " + (i * x));
39 }
40}

Programul afiseaza:
Variable values...
i = 37
j = 42
x = 27.475
y = 7.22
Adding...

Anca Ion

MVP 2011-2012

Anca Ion

i + j = 79
x + y = 34.695
Subtracting...
i - j = -5
x - y = 20.255
Multiplying...
i * j = 1554
x * y = 198.37
Dividing...
i/j=0
x / y = 3.8054 Computing
the remainder...
i % j = 37
x % y = 5.815
Mixing types...
j + y = 49.22
i * x = 1016.58
Operatorii Increment si Decrement
operatorul unar increment (++)
operatorul unar decrement (--)
Operatorii increment si decrement cresc si descresc valoarea stocata intr-o variabila cu 1.
De exemplu expresia
count=count + 1;//increment the value of count by 1
este echivalenta cu
count++;

De exemplu,
int i = 10;
int j = 3;
int k = 0;
k = ++j + i; //va rezulta k = 4+10 = 14

MVP 2011-2012

int i = 10;
int j = 3;
int k = 0;
k = j++ + i; //will result to k = 3+10 = 13
Operatori relationali

Exemplu 3:
1 public class RelationalDemo{
2 public static void main(String[] args){
3 //a few numbers
4 int i = 37;
5 int j = 42;
6 int k = 42;
7 System.out.println("Variable values...");
8 System.out.println(" i = " +i);
9 System.out.println(" j = " +j);
10 System.out.println(" k = " +k);
11 //greater than
12 System.out.println("Greater than...");
13 System.out.println(" i > j = "+(i>j));//false
14 System.out.println(" j > i = "+(j>i));//true
15 System.out.println(" k > j = "+(k>j));//false
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

//greater than or equal to


System.out.println("Greater than or equal to...");
System.out.println(" i >= j = "+(i>=j));//false
System.out.println(" j >= i = "+(j>=i));//true
System.out.println(" k >= j = "+(k>=j));//true
//less than
System.out.println("Less than...");
System.out.println(" i < j = "+(i<j));//true
System.out.println(" j < i = "+(j<i));//false
System.out.println(" k < j = "+(k<j));//false
//less than or equal to
System.out.println("Less than or equal to...");
System.out.println(" i <= j = "+(i<=j));//true
System.out.println(" j <= i = "+(j<=i));//false
System.out.println(" k <= j = "+(k<=j));//true
//equal to

Anca Ion

MVP 2011-2012

32
33
34
35
36
37
38
39
40

Anca Ion

System.out.println("Equal to...");
System.out.println(" i == j = " + (i==j));//false
System.out.println(" k == j = " + (k==j));//true
//not equal to
System.out.println("Not equal to...");
System.out.println(" i != j = " + (i!=j));//true
System.out.println(" k != j = " + (k!=j));//false
}
}

Programul va afisa:
Variable values...
i = 37
j = 42
k = 42
Greater than...
i > j = false
j > i = true
k > j = false
Greater than or equal to...
i >= j = false
j >= i = true
k >= j = true
Less than...
i < j = true
j < i = false
k < j = false
Less than or equal to...
i <= j = true
j <= i = false
k <= j = true
Equal to...
i == j = false
k == j = true
Not equal to...
i != j = true
k != j = false
Operatori logici
Operatorii logici au unul sau mai multi operanzi booleeni si produc rezultat de tip boolean
&& (AND logic)
& (AND boolean logical)
|| (logical OR)
| (boolean logical inclusive OR)
^ (boolean logical exclusive OR)
! (logical NOT)
Operatori logici: &&(SI logic) si &(SI boolean logic)
1 public class TestAND {

MVP 2011-2012

Anca Ion

2 public static void main( String[] args ){


3 int i = 0;
4 int j = 10;
5 boolean test= false;
6 //demonstrate &&
7 test = (i > 10) && (j++ > 9);
8 System.out.println(i);
9 System.out.println(j);
10 System.out.println(test);
11 //demonstrate &
12 test = (i > 10) & (j++ > 9);
13 System.out.println(i);
14 System.out.println(j);
15 System.out.println(test);
16 }
17 }

Programul afiseaza:
0
10
false
0
11
false
Se observa ca expresia j++ (linia 7)nu este evaluata deoarece prima expresie (i>10) este deja
falsa.
Operatori Logici: || (SAU logic) si | (SAU boolean logic)
|| va evalua expresia exp1, si va returna imediat valoarea true daca exp1 este true
In contrast, operatorul | va evalua intotdeauna ambele expresii exp1 si exp2 inainte de a returna
un rezultat
Exemplu:
public class TestOR {
2 public static void main( String[] args ){
3 int i = 0;
4 int j = 10;
5 boolean test= false;
6 //demonstrate ||
7 test = (i < 10) || (j++ > 9);
8 System.out.println(i);
9 System.out.println(j);
10 System.out.println(test);
11 //demonstrate |
12 test = (i < 10) | (j++ > 9);
13 System.out.println(i);
14 System.out.println(j);
15 System.out.println(test);

MVP 2011-2012

Anca Ion

16 }
17 }

Programul afiseaza:
0
10
true
0
11
true
Se observa ca expresia j++ din linia 7 nu este evaluata deoarece expresia (i<10) este deja true
Operatori logici: ^ (OR exclusiv boolean logic)
Tabela de adevar : ^,

Exemplu:

1 public class TestXOR {


2 public static void main( String[] args ){
3 boolean val1 = true;
4 boolean val2 = true;
5 System.out.println(val1 ^ val2);
6 val1 = false; val2 = true;
7 System.out.println(val1 ^ val2);
8 val1 = false; val2 = false;
9 System.out.println(val1 ^ val2);
10 val1 = true; val2 = false;
11 System.out.println(val1 ^ val2);
12 }
13 }

Programul afiseaza:
false
true
false
true
Operatorul logic: ! (NOT logic)
Operatorul logic NOT primeste un singur argument, care poate sa fie expresie, variabila sau
constanta
Tabela de adevar pentru !,

MVP 2011-2012

Anca Ion

Exemplu:
1
2
3
4
5
6
7
8

public class TestNOT {


public static void main( String[] args ){
boolean val1 = true;
boolean val2 = false;
System.out.println(!val1);
System.out.println(!val2);
}
}

Programul afiseaza,
false
true
Operatori logici: Operatorul conditional (?:)
este un operator ternar-aceasta inseamna ca primeste 3 argumente care impreuna formeaza o
expresie.
Structura expresiei este: exp1?exp2:exp3
in care,
exp1 este o expresie booleana al carei rezultat poate fi true sau false
Rezultat:
Daca exp1 este true, exp2 este valoarea returnata
Daca exp1 este falsa atunci exp3 este valoarea returnata
Exemplu:
1 public class ConditionalOperator {
2 public static void main( String[] args ){
3 String status = "";
4 int grade = 80;
5 //get status of the student
6 status = (grade >= 60)?"Passed":"Fail";
7 //print status
8 System.out.println( status );
9 }
10 }

Programul va afisa
Passed
Precedenta operatorilor

MVP 2011-2012

Anca Ion

7.
Crearea obiectelor
In Java obiectele sunt create prin instantierea unei clase.
Crearea unui obiect presupune trei lucruri:
1. Declararea obiectului : NumeClasa numeObiect;
Exemplu: Rectangle patrat;
2. Instantierea
Se realizeaza prin intermediul operatorului new si are ca efect crearea efectiva a
obiectului cu alocarea spatiului de memorie corespunzator.
patrat = new Rectangle();
3. Initializarea
Se realizeaza prin intermediul constructorilor clasei respective. Rectangle() este un apel
catre constructorul clasei Rectangle 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 = new Rectangle(0, 0, 100, 200);
Fiecare clasa are un set de constructori care se ocupa cu initializare obiectelor nou create.
De exemplu clasa Rectangle are urmatorii constructori:
public Rectangle(Point p)
public Rectangle(int w, int h)
public Rectangle(Point p, int w, int h)
public Rectangle()

MVP 2011-2012

Anca Ion

Exemplu: Rectangle patrat = new Rectangle(0, 0, 100, 200);


Atentie !!!
Spatiul de memorie nu este pre-alocat
Declararea unui obiect nu implica alocarea de spatiu de memorie pentru acel obiect.
Alocarea memoriei se face doar la apelul instructiunii new !
Rectangle patrat;
patrat.x = 10;
//EROARE!
8.
Folosirea obiectelor
Referirea valorii unei variabile se face prin obiect.variabila
De exemplu clasa Rectangle are variabilele publice x, y, width, height, origin. Aflarea valorilor
acestor variabile sau schimbarea lor se face prin constructii de genul:
Rectangle patrat = new Rectangle(0, 0, 100, 200);
System.out.println(patrat.width);
//afiseaza 100
patrat.x = 10;
patrat.y = 20;
//schimba originea
patrat.origin = new Point(10, 20);
//schimba originea
Obs: Accesul la variabilele unui obiect se face n conformitate cu drepturile de acces pe care le
ofera variabilele respective celorlalte clase.
Apelul unei metode se face prin obiect.metoda([parametri])
Rectangle patrat = new Rectangle(0, 0, 100, 200);
patrat.setLocation(10, 20); //schimba originea
patrat.setSize(200, 300);
//schimba dimensiunea
9.
Distrugerea obiectelor
In Java programatorul nu mai are responsabilitatea distrugerii obiectelor sale ntruct, n
momentul rularii unui program, simultan cu interpretorul Java ruleaza si un proces care se ocupa
cu distrugerea obiectelor care nu mai sunt folosite. Acest proces pus la dispozitie de platforma
Java de lucru se numeste garbage collector (colector de gunoi), prescurtat gc.
Un obiect este elimnat din memorie de procesul de colectare atunci cnd nu mai exista nici o
referinta la acesta. Referintele (care sun de fapt variabile) 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.

10.

Declararea claselor

[public][abstract][final] class NumeClasa


[extends NumeSuperclasa]

MVP 2011-2012

Anca Ion

[implements Interfata1 [, Interfata2 ... ]]


{
//corpul clasei
}

public- Implicit, o clasa poate fi folosita doar de clasele aflate n acelasi pachet cu clasa
respectiva (daca nu se specifica un anume pachet, toate clasele din directorul curent sunt
considerate a fi n acelasi pachet).
O clasa declarata cu public poate fi folosita de orice clasa, indiferent de pachetul n care
se gaseste.
abstract - Declara o clasa abstracta (sablon). O clasa abstracta nu poate fi instantiata,
fiind folosita doar pentru a crea un model comun pentru o serie de subclase
final -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 sau/si ca implementeaza una sau mai multe interfete,
ale caror nume trebuie separate prin virgula.
Se observa ca, spre deosebire de C++, Java permite doar mostenirea simpla, asadar o clasa poate
avea un singur un singur parinte (superclasa). Evident o clasa poate avea oricti mostenitori
(subclase). Extinderea unei clase se realizeaza deci astfel:
class B extends A {...}
//A este superclasa clasei B
Corpul unei clase
Urmeaza declararea clasei si este cuprins ntre acolade. Contine:
declararea variabilelor de instanta si de clasa (cunoscute impreuna ca variabile membre)
declararea si implementarea metodelor de instanta si de clasa (cunoscute mpreuna ca
metode membre)
In C++:
class A {
void metoda1();
int metoda2() {
//implementare
}
}
A::metoda1() {
//implementare
}
In Java:
class A {

MVP 2011-2012

Anca Ion

void metoda(){
//implementare
}
}
Constructorii unei clase
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 Dreptunghi {
Dreptunghi() {
//constructor
}
}
O 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 Dreptunghi {
double x, y, w, h;
Dreptunghi(double x0, double y0, double wo, double h0) {
x=x0; y=y0; w=w0; h=h0;
}
Dreptunghi(double x0, double y0) {
this(x0, y0, 0, 0);
}
Dreptunghi() {
//initializare implicita
this(0, 0, 100, 100);
}
}
Constructorii sunt apelati automat la instantierea unui obiect. In cazul in care dorim sa apelam
explicit constructorul unei clase folosim metoda this(argumente), care apeleaza constructorul
corespunzator (ca argumente) al clasei respective. Aceasta 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 super(argumente).
class Patrat extends Dreptunghi {
double size;
Patrat(double x0, double y0, double s0) {
//se apeleaza constructorul superclasei
super(x0, y0, s0, s0);
size = s0;
}

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 argument) nu va mai fi furnizat implicit de catre sistem.
class Dreptunghi {
//nici un constructor
}
...
Dreptunghi d;
d=new Dreptunghi(); -> OK (a fost generat constructorul implicit)

class Dreptunghi {
double x, y, w, h;
Dreptunghi(double x0, double y0, double wo, double h0) {
x=x0; y=y0; w=w0; h=h0;
}
}
...
Dreptunghi d;
d=new Dreptunghi(); -> Eroare la compilare
Constructorii unei clase pot avea urmatorii specificatori de acces:

private-Nici o alta clasa nu poate instantia obiecte ale acestei clase.


protected-Doar subclasele pot crea obiecte de tipul clasei respective
public-Orice clasa poate crea instante ale clasei respective

Declararea variabilelor membre


Variabilele se delara de obicei inaintea metodelor, desi acest lucru nu este impus de compilator.
class NumeClasa {
//declararea variabilelor
//declararea metodelor
}
Variabilele unei clase se declara in corpul clasei dar nu n corpul unei metode. Variabilele
declarate n cadrul unei metode sunt locale metodei respective.
Declararea unei variabile presupune specificarea urmatoarelor lucruri:
numele variabilei
tipul de date

MVP 2011-2012

Anca Ion

nivelul de acces la acea variabila de catre alte clase


daca este constanta sau nu
daca este variabila de instanta sau de clasa

Generic, o variabila se declara astfel:


[modificatori] TipDeDate numeVariabila [= valoareInitiala];
unde un modificator poate fi :

Ex:

un specificator de acces : public, protected, private


unul din cuvintele rezervate: static, final, transient, volatile
double x;
protected static int n;
public String s = "abcd";
private Point p = new Point(10, 10);
final long MAX = 100000L;

Specificatorii de acces sunt cuvinte rezervate ce controleaza accesul celorlate clase la membrii
unei clasei. Specificatorii de acces pentru variabilele si metodele unei clase sunt: public,
protected, private si cel implicit (package), iar nivelul lor de acces este dat n tabelul de mai jos:
Specificator Clasa Subclasa Pachet Toti
private

protected

X**

public

package*

Exemple de declaratii:
private int secretPersonal;
proteceted String secretDeFamilie;
public Vector elemente;
long doarIntrePrieteni ;
-> package
private void metodaInterna();
public double calculeazaRezultat();
Obs1(*): Daca nu este specificat nici un modificator de acces, implicit nivelul de acces este la
nivelul pachetului (package). Asadar, modificatorul "package" nu apare explicit n declararea
unei variabile/metode (n cazul n care apare, compilatorul va furniza o eroare).
Obs2(**): In cazul in care declaram un membru "protected" atunci accesul la acel membru
din subclasele clasei in care a fost declarata variabila depinde si de pachetul n care se gaseste

MVP 2011-2012

Anca Ion

subclasa: daca sunt in acelasi pachet accesul este permis, daca nu sunt n acelasi pachet
accesul nu este permis decat pentru obiecte de tipul subclasei.
Implementarea metodelor
Metodele sunt responsabile cu descrierea comportamentului unui obiect. Generic, o metoda se
declara astfel:
[modificatori] TipReturnat numeMetoda ( [argumente] )
[throws TipExceptie]
{
//corpul metodei
}
unde un modificator poate fi :
un specificator de acces : public, protected, private

unul din cuvintele rezervate: static, abstract, final, native, synchronized

Membri de instanta si membri de clasa


O clasa Java poate contine doua tipuri de variabile si metode :
de instanta: declarate fara 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 MyClass {
int x ; //variabila de instanta
}
se declara de fapt o variabila de instanta, cee ce nsemna ca la fiecare creare a unei instante a
clasei MyClass sistemul aloca o zona de memorie separata pentru memorarea valorii lui x.
MyClass o1 = new MyClass();
o1.x = 100;
MyClass o2 = new MyClass();
o2.x = 200;
System.out.println(o1.x); // -> afiseaza 100
System.out.println(o2.x) ; //-> afiseaza 200
Asadar, fiecare obiect nou creat va putea memora valori diferite pentru variabilele sale de
instanta.
Pentru variabilele de clasa (statice) 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 MyClass {
int x ; //variabila de instanta
static long n;
//variabila de clasa
}
...

MVP 2011-2012

Anca Ion

MyClass o1 = new MyClass();


MyClass o2 = new MyClass();
o1.n = 100;
System.out.println(o2.n) -> afiseaza 100
o2.n = 200;
System.out.println(o1.n) -> afiseaza 200
Metode
Similar ca la variabile, metodele declarate fara modificatorul static sunt metode de instanta iar
cele declarate cu static sunt metode de clasa (statice). Diferenta ntre cele doua metode este
urmatoarea:
metodele de instanta opereaza att pe variabilele de instanta ct si pe cele statice ale
clasei
metodele de clasa opereaza doar pe variabilele statice ale clasei
class MyClass {
int x ; //variabila de instanta
static long n;
//variabila de clasa
void metodaDeInstanta() {
n ++;
//corect
x --;
//corect
static void metodaStatica() {
n ++;
//corect
x --;
//incorect
}
Intruct metodele de clasa nu depind de starea obiectelor clasei respective, apelul lor se poate face
astfel:
MyClass.metodaStatica(); //corect, echivalent cu
MyClass obj = new MyClass();
obj.metodaStatica();
//corect
spre deosebire de metodele de instanta care nu pot fi apelate dect unei instante a clasei
respective:
MyClass.metodaDeInstanta(),
//incorect
MyClass obj = new MyClass();
obj.metodaDeInstanta();
//corect
Utilitatea membrilor de clasa (statici)
Sunt folositi pentru a pune la dispozitie valori si metode independente de starea obiectelor dintr-o
anumita clasa.
1. Declararea constantelor
class MyClass {
final double PI = 3.14; //variabila finala de instanta
}

MVP 2011-2012

Anca Ion

La fiecare instantiere a clasei MyClass va fi rezervata zona de memorie pentru variabilele


finale ale obiectului respectiv, ceea ce este o risipa ntruct aceste constante au aceleasi
valori pentru toate instantele clasei. Declararea corecta a constantelor trebuie asadar
facuta cu modificatorii static si final, pentru a le rezerva o singura zona de memorie,
comuna tuturor obiectelor:
class MyClass {
static final double PI = 3.14; //variabila finala de clasa
}
2. Numararea obiectelor unei clase
class MyClass {
static long nrInstante = 0;
MyClass()
{ //constructorul este apelat la fiecare instantiere
nrInstante ++;
}
}
Folosind variabile statice putem controla diversi parametri legati de crearea obiectelor
unei clase
Initializarea variabilelor de clasa
Se poate face n momentul declararii lor :
class MyClass {
static final double PI = 3.14;
static long nrInstante = 0;
static final double EPS = 0.01;
}
sau prin intermediul unui bloc static de initializare:
class MyClass {
static {
final double PI = 3.14;
long nrInstante = 0;
final double EPS = 0.01;
}
}
Suprancarcarea si supradefinirea metodelor
Sunt doua concepte extrem de utile ale POO 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 lor) astfel nct la apelul functiei cu acel nume sa se
poata stabili n mod unic care dintre ele se executa. Fenomenul 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.

Exemplificare:
class A {
void metoda() {
System.out.println("A: metoda fara parametru");
}
//supraincarcare - polimorfism
void metoda(int arg) {
System.out.println("A: metoda cu un parametru");
}
}
class B extends A {
//supradefinire
void metoda() {
System.out.println("B: metoda fara parametru");
}
}
O metoda supradefinita poate sa:
ignore complet codul metodei corespunzatoare din superclasa (cazul de mai sus)
B b = new B();
b.metoda();

-> afiseaza "B: metoda fara parametru"

sa extinda codul metodei parinte, executnd nainte de codul propriu si functia parinte.
class B extends A {
//supradefinire prin extensie
void metoda() {
super.metoda();
System.out.println("B: metoda fara parametru");
}
}
...
B b = new B();
b.metoda();
-> afiseaza :
"A: metoda fara parametru"

MVP 2011-2012

Anca Ion

"B: metoda fara parametru"


Metode finale
O metoda finala nu mai poate fi supradefinita in subclasele clasei in care ea este definita ca fiind
finala. Acest lucru este util daca respectiva metoda are o implementare care nu trebuie schimbata
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 Student {
...
final float calcMedie(int nrExamene, float note[], float ponderi[]) {
...
}
...
}
class StudentInformatica extends Student{
float calcMedie(int nrExamene, float note[], float ponderi[]) {
return 10.00;
}
}//eroare la compilare!
Clase imbricate
O clasa imbricata este, prin definitie, o clasa membra a unei alte clase
class ClasaDeAcoperire{
...
class ClasaImbricata {
...
}
}
Folosirea 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 nicaieri).
public class Pachet {
//clasa de acoperire
class Continut { //clasa imbricata
private String marfa;
private float cantitate;
Continut (String marfa, float cantitate) {
this.marfa = marfa;
this.cantitate = cantitate;
}
}

MVP 2011-2012

Anca Ion

class Destinatie { //clasa imbricata


private String dest;
private int termen;
Destinatie(String undePleaca, int inCateZile) {
dest = undePleaca;
termen = inCateZile;
}
}
public void trimite(String marfa, float cant, String dest,
int termen) {
Continut c = new Continut(marfa, cant);
Destinatie d = new Destinatie(dest, termen);
}
public static void main(String[] args) {
Pachet p = new Pachet();
p.trimite("banane", 100, "Romania", 7);
}
}
Ca membra a unei clase, o clasa imbricata are un privilegiu special fata de celelalte clase:
acces nelimitat la variabilele clasei de acoperire, chiar daca acestea sunt private.
Clase interne
Ca orice alta clasa o clasa imbricata poate fi declarata statica sau nu. O clasa imbricata nestatica
se numeste clasa interna.
class ClasaDeAcoperire{
...
static class ClasaImbricataStatica {
...
}
class ClasaInterna {
...
}
}
Diferentierea acestor denumiri se face deoarece:
o

o "clasa imbricata" reflecta relatia sintactica a doua clase; codul unei clase apare in
interiorul codului altei clase;

MVP 2011-2012

Anca Ion

o "clasa interna" reflecta relatia dintre instantele a doua clase, n sensul ca o


instanta a unei clase interne nu poate exista dect n cadrul unei instante a clasei de
acoperire.

Asadar, o clasa interna este o clasa imbricata ale carei instante nu pot exista dect n cadrul
instantelor clasei de acoperire si care are acces direct la toti membrii clasei sale de acoperire.
Identificarea claselor imbricate
Dupa cum stim orice clasa produce la compilare asa numitele "unitati de compilare", 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 '$' apoi de numele clasei imbricate.
class ClasaDeAcoperire{
class ClasaInterna1 {}
class ClasaInterna2 {}
}
Pentru exemplul de mai sus vor fi generate trei fisiere:
ClasaDeAcoperire.class
ClasaDeAcoperire$ClasaInterna1.class
ClasaDeAcoperire$ClasaInterna2.class
In cazul in care clasele imbricate au la randul lor alte clase imbricate (situatie mai putin uzuala)
denumirea lor se face dupa aceeasi metoda: adaugarea unui '$' si apoi numele clasei imbricate.

Clase si metode abstracte


Uneori 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 pachetul java.lang exista clasa abstracta Number
care modeleaza conceptul generic de "numar". Intr-un program nu avem nsa nevoie de numere
generice ci de numere ntregi, reale, etc. Clasa Number serveste ca superclasa pentru clase cum ar
fi Byte, Double, Float, Integer, Long si Short ce implementeaza obiecte pentru descrierea
numerelor de un anumit tip. Asadar clasa Number reprezinta un concept abstract si nu vom putea
instantia obiecte de acest tip:
Number numarGeneric = new Number(); //eroare

MVP 2011-2012

Anca Ion

Declararea unei clase abstracte


Se face folosind cuvantul rezervat abstract n declaratia clasei:
abstract class ClasaAbstracta {
...
}
Daca vom incerca sa instantiem un obiect al clasei ClasaAbstracta vom obtine o eroare la
compilarea programului de genul:class ClasaAbstracta is an abstract class. It can't be instantiated.
Metode abstracte
Spre deosebire de clasele obisnuite care trebuie sa furnizeze implementari pentru toate metodele
declarate o clasa abstracta poate contine metode fara nici o implementare. Metodele fara nici o
implementare se numesc metode abstracte si pot aparea doar in clase abstracte.
In fata unei metode abstracte trebuie sa apara cuvantul cheie abstract, altfel va fi furnizata o
eroare de compilare.
abstract void metodaAbstracta();
//corect
void metoda();
//incorect
(Method metoda requires a method body; otherwisw declare it abstract)
In felul acesta o clasa abstracta poate pune la dispozitia subclaselor sale un model complet pe
care trebuie sa-l implementeze, furniznd chiar implementarea unor metode comune tuturor
claselor sau lasnd explicitarea unor metode fiecarei subclase in parte.
III. Desfasurarea laboratorului
Exercitiul 1: Declararea, Initializarea, Afisarea variabilelor (exemplu 1)
1. Compilarea si executia programului Java OutputVariable folosind comenzile
"javac" si "java"
2. Compilarea si executia programului Java OutputVariable folosind IDE- Eclipse
3. Compilati si executati programele Java: ArithmeticDemo, RelationalDemo,
RelationalDemo, TestAND, TestOR, TestNOT, ConditionalOperator

MVP 2011-2012

Anca Ion

Rezolvare:
Execitiul 1
1. Salvati programele Java in directorul myprograms:
C:\>cd \myjavaprograms
2. Scrieti clasa OutputVariable.java folosind un editor text
3. Compilati OutputVariable.java folosind compilatorul javac. In Windows
compilatorul se gaseste in %JAVA_HOME%\bin. Rezultatul compilarii va fi creat in
fisierul OutputVariable.class file.
C:\myjavaprograms>javac OutputVariable.java
Problema - eroare #1:
C:\myjavaprograms>javac Hello.java
'javac' is not recognized as an internal or external command, operable program
or batch file
Solutia #a: Adaugati C:\"Program Files"\Java\jdk1.5.0_10\bin (pentru platforma
Windows platform) variabilei de mediu java_home.
C:\myjavaprograms>%java_home%\javac Hello.java
Solution #b: Se poate specifica intreaga cale ca mai jos:
C:\myjavaprograms>C:\"Program Files"\Java\jdk1.5.0_10\bin\javac Hello.java
4. Executati programul OutputVariable folosind comanda java. Aceasta comanda
porneste Java Virtual Machine si executa programul OutputVariable.
C:\myjavaprograms>java OutputVariable
10
The value of x=A

I.Crearea de clase in Java

MVP 2011-2012

Creati in Eclipse proiectul numit: MyStudentRecordExample

1. Adaugati la proiect clasa StudentRecord


public class StudentRecord {
/** Creates a new instance of StudentRecord */
public StudentRecord() {
}
// Declarea variabilelor de instanta
private String name;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
// Declarea variabilelor statice
private static int studentCount = 0;
/**
* Returneaza numele studentului
*/
public String getName(){
return name;
}
/**
* Seteaza numele studentului
*/
public void setName(String temp ){
name =temp;
}
/**
* Calculeaza media calificativelor la engleza matematica si stiinte
*
*/
public double getAverage(){
double result =0;
result =(getMathGrade()+getEnglishGrade()+getScienceGrade() )/3;
return result;
}
/**
* Returneaza numarul de instante ale clasei StudentRecords
*/
public static int getStudentCount(){
return studentCount;
}
/**
* Returneaza numarul de instante ale clasei StudentRecords.
* Metoda statica.
*/

Anca Ion

MVP 2011-2012
public static void increaseStudentCount(){
studentCount++;
}
// Metode de instanta
public double getMathGrade() {
return mathGrade;
}
public void setMathGrade(double mathGrade) {
this.mathGrade = mathGrade;
}
public double getEnglishGrade() {
return englishGrade;
}
public void setEnglishGrade(double englishGrade) {
this.englishGrade = englishGrade;
}
public double getScienceGrade() {
return scienceGrade;
}

public void setScienceGrade(double scienceGrade) {


this.scienceGrade = scienceGrade;
}

2. Adaugati la proiect clasa StudentRecordExample


public class StudentRecordExample {
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.setName("Anna");

Anca Ion

MVP 2011-2012

Anca Ion

beahRecord.setName("Beah");
crisRecord.setName("Cris");
System.out.println("Name = " + annaRecord.getName());

// Afisarea numarului de studenti


System.out.println("Student Count = "+StudentRecord.getStudentCount());

3. Executati proiectul
4. Exercitiu: Faceti urmatoarele schimbari si executati apoi programul

Modificati clasa StudentRecordExample.java astfel:


o Creati un alt obiect numit StudentRecord numit myOwnRecord
o Apelati metoda setName() a obiectului myOwnRecord pasand parametrul
"myOwn" ca argument al functiei
o Afisati numele obiectului myOwnRecord
o Setati calificativul la matematica al obiectului myOwnRecord
o Setati calificativul la engleza al obiectului myOwnRecord
o Setati calificativul la stiinte al obiectului myOwnRecord
o Afisati media calificativelor pentru obiectul myOwnRecord

II. Variabile statice si non-statice


Creati in Eclipse proiectul numit: MyStaticVariablesExampleProject
1. Adaugati la proiect clasa Variables
public class Variables {
// Variabile statice
static int staticintA = 10;
static String staticStringB ="I am static string";
// Variabile de instanta
int instanceintA = 20;
String instanceStringB = "I am instance string";
}

2. Adaugati la proiect clasa StaticVariablesExamples


public class StaticVariablesExample {
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

System.out.println("Variables.staticintA = " + Variables.staticintA);


System.out.println("Variables.staticStringB = " + Variables.staticStringB);
Variables.staticStringB = "Life is good!";
System.out.println("Variables.staticStringB = " + Variables.staticStringB);
//Accesarea variabilelor de clasa.
// Se observa ca trebuie creat un obiect instanta al clasei pentru a avea acces la ele
Variables objectInstance1 = new Variables();
Variables objectInstance2 = new Variables();
objectInstance1.instanceintA = 1;
System.out.println("objectInstance1.instanceintA = " + objectInstance1.instanceintA);
objectInstance2.instanceintA = 3;
System.out.println("objectInstance2.instanceintA = " + objectInstance2.instanceintA);
// Variabilele statice pot fi accesate si pentru o instanta a unui obiect
System.out.println("objectInstance1.staticintA = " + objectInstance1.staticintA);
objectInstance1.staticintA = 220;
System.out.println("objectInstance1.staticintA = " + objectInstance1.staticintA);
System.out.println("Variables.staticintA = " + Variables.staticintA);

objectInstance2.staticintA = 550;
System.out.println("objectInstance1.staticintA = " + objectInstance1.staticintA);
System.out.println("objectInstance2.staticintA = " + objectInstance2.staticintA);
System.out.println("Variables.staticintA = " + Variables.staticintA);

3. Executati proiectul
4. Exercitiu: Modificati clasa StaticVariablesExample.java pentru a afisa rezultatul adunarii
variabilei statice staticintA cu variabila de instanta instanceintA

III. Metode statice si non-statice


Creati in Eclipse proiectul numit: MyStaticMethodsExampleProject
1. Adaugati la proiect clasa Methods
public class Methods {
// Static variable
static int a = 0;
// Metode statice
static void staticMethod(int i) {
System.out.println("staticMethod("+ i +") entered");
}
// Metoda statica anonima. Tot ce este in interiorul metodei statice anonime va fi
//executat cand clasa este incarcata
static { //bloc static
System.out.println("Anonymous static method entered, a = " + a);

MVP 2011-2012

a += 1; // same thing as a = a + 1
System.out.println("Anonymous static method exiting, a = " + a);

// Metode non-statice
void myNonStaticMethods(int i){
System.out.println("myNonStaticMethod("+ i +") entered");
}

2. Adaugati la proiect clasa StaticMethodsExamples


public class StaticMethodsExample {
public static void main(String[] args) {
// Accesarea variabilei statice a Methods.
System.out.println("Methods.a = " + Methods.a);
// Invocarea metodei statice a clasei Methods.
Methods.staticMethod(5);
Methods d = new Methods();
System.out.println("d.a = " + d.a);
// Metoda statica poate fi invocata si de o instanta a unui obiect
d.staticMethod(0);
// Aceeasi variabila statica poate fi accesata de instante multiple
Methods e = new Methods();
System.out.println("e.a = " + e.a);
d.a += 3;
System.out.println("Methods.a = " + Methods.a);
System.out.println("d.a = " + d.a);
System.out.println("e.a = " + e.a);
// eroare de compilare
// Methods.myNonStaticMethod(3);
}
}

3. Executati proiectul
IV. Constructori
Creati in Eclipse proiectul numit: MyStaticMethodsExampleProject
1. Adaugati la proiect clasa StudentRecord
public class StudentRecord {
// Declararea variabilelor de instanta
private String name;
private double mathGrade;

Anca Ion

MVP 2011-2012
private double englishGrade;
private double scienceGrade;
private double average;
// Declararea variabilelor statice
private static int studentCount = 0;
// constructor implicit
public StudentRecord() {
}
// Constructor cu un singur parametru
public StudentRecord(String name){
this.name = name;
}
// Constructor cu 2 parametri
public StudentRecord(String name, double mGrade){
this.name = name;
mathGrade = mGrade;
}
// Constructor cu 3 parametri
public StudentRecord(String name, double mGrade, double eGrade){
this.name = name;
mathGrade = mGrade;
englishGrade = eGrade;
}
// Constructor cu 4 parametri
public StudentRecord(String name, double mGrade, double eGrade,
double sGrade){
this.name = name;
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
/**
* Returneaza numele studentului
*/
public String getName(){
return name;
}
/**
Seteaza numele studentului
*/
public void setName(String temp ){
name =temp;
}
/**
* Calculeaza media calificativelor la engleza matematica si stiinte
*/
public double getAverage(){
double result =0;

Anca Ion

MVP 2011-2012

result =(getMathGrade()+getEnglishGrade()+getScienceGrade() )/3;


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++;
}
// Metode de instanta
public double getMathGrade() {
return mathGrade;
}
public void setMathGrade(double mathGrade) {
this.mathGrade = mathGrade;
}
public double getEnglishGrade() {
return englishGrade;
}
public void setEnglishGrade(double englishGrade) {
this.englishGrade = englishGrade;
}
public double getScienceGrade() {
return scienceGrade;
}
public void setScienceGrade(double scienceGrade) {
this.scienceGrade = scienceGrade;
}
}

2. Adaugati la proiect clasa ConstructorExample


public class ConstructorExample {
public static void main(String[] args) {
// Create an object instance of StudentRecord class.
StudentRecord annaRecord = new StudentRecord("Anna");
// Increament the studentCount by invoking a static method.
StudentRecord.increaseStudentCount();

Anca Ion

MVP 2011-2012

Anca Ion

// Create another object instance of StudentRecord class.


StudentRecord beahRecord =new StudentRecord("Beah", 45);
// Increament the studentCount by invoking a static method.
StudentRecord.increaseStudentCount();
// Create the 3rd object instance of StudentRecord class.
StudentRecord crisRecord =new StudentRecord("Cris", 23.3, 67.45, 56);
// Increament the studentCount by invoking a static method.
StudentRecord.increaseStudentCount();
// Print Cris' name and average
System.out.println("Name = " + crisRecord.getName() + " Average = " +
crisRecord.getAverage());
// Print number of students.
System.out.println("Student Count = "+StudentRecord.getStudentCount());
}
}

3. Executati proiectul
4. Exercitiu: modificati clasele StudentRecord.java si ConstructorExample.java:
- creati un constructor in clasa StudentRecord.java in care media
-

calificativelor este pasata ca argument


modificati clasa ConstructorExample.java a.i obiectul annaRecord este creat
folosind constructorul nou.