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

c.

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 double float

MVP 2011-2012

Anca Ion

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:

6.5. Tipuri de date primitive reale float si double Tipurile de date reale au ca si tip implicit tipul de date double

MVP 2011-2012

Anca Ion

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 Initializarea variabilelor Declararea constantelor Tip nume_variabila Tip nume_variabila = valoare final Tip nume_variabila

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.

2. 3.

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") Variabile locale, declarate ntr-o metoda sau ntr-un bloc de cod, vizibile doar n metoda/blocul respectiv Parametri metodelor, vizibili doar n metoda respectiva

MVP 2011-2012 4.

Anca Ion

Parametrii de la tratarea exceptiilor


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 }

Exemplu 1: Declararea si initializarea variabilelor

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

MVP 2011-2012

Anca Ion

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

Exemplu 2
1 public class ArithmeticDemo { 2 public static void main(String[] args){ 3 //a few numbers

MVP 2011-2012

Anca Ion

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... i + j = 79 x + y = 34.695 Subtracting... i - j = -5 x - y = 20.255 Multiplying...

MVP 2011-2012

Anca Ion

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 int i = 10; int j = 3; int k = 0; k = j++ + i; //will result to k = 3+10 = 13 Operatori relationali

MVP 2011-2012

Anca Ion

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 32 33 34 35 36 37 38 39 //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 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 }

MVP 2011-2012

Anca Ion

40 }

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 2 3 4 5 6 7 8 9 public class TestAND { public static void main( String[] args ){ int i = 0; int j = 10; boolean test= false; //demonstrate && test = (i > 10) && (j++ > 9); System.out.println(i); System.out.println(j);

MVP 2011-2012

Anca Ion

10 11 12 13 14 15 16 17

System.out.println(test); //demonstrate & test = (i > 10) & (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); } }

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); 16 } 17 }

Programul afiseaza: 0 10 true

MVP 2011-2012

Anca Ion

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 !,

Exemplu:
1 2 3 4

public class TestNOT { public static void main( String[] args ){ boolean val1 = true; boolean val2 = false;

MVP 2011-2012

Anca Ion

5 6 7 8

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

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() 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!

MVP 2011-2012

Anca Ion

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

Declararea claselor [public][abstract][final] class NumeClasa [extends NumeSuperclasa] [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

MVP 2011-2012

Anca Ion

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 { void metoda(){ //implementare } }

MVP 2011-2012

Anca Ion

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; } } Constructorii sunt apelati automat la instantierea unui obiect.

MVP 2011-2012

Anca Ion

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 nivelul de acces la acea variabila de catre alte clase daca este constanta sau nu

MVP 2011-2012

Anca Ion

daca este variabila de instanta sau de clasa

Generic, o variabila se declara astfel: [modificatori] TipDeDate numeVariabila [= valoareInitiala]; unde un modificator poate fi :

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;

Ex:

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 X protected X X** X public X X X X package* X X 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 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.

MVP 2011-2012

Anca Ion

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 } ... MyClass o1 = new MyClass();

MVP 2011-2012

Anca Ion

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 } 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; } }

2.

MVP 2011-2012

Anca Ion

Suprancarcarea si supradefinirea metodelor Sunt doua concepte extrem de utile ale POO si se refera la:

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"); }

MVP 2011-2012

Anca Ion

} ... B b = new B(); b.metoda(); -> afiseaza : "A: metoda fara parametru" "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;

MVP 2011-2012

Anca Ion

Continut (String marfa, float cantitate) { this.marfa = marfa; this.cantitate = cantitate; } } 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:

MVP 2011-2012

Anca Ion

o o

o "clasa imbricata" reflecta relatia sintactica a doua clase; codul unei clase apare in interiorul codului altei clase; 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:

MVP 2011-2012

Anca Ion

Number numarGeneric = new Number(); //eroare 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

Anca Ion

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

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; }

Anca Ion

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

MVP 2011-2012 beahRecord.setName("Beah"); crisRecord.setName("Cris"); System.out.println("Name = " + annaRecord.getName()); // Afisarea numarului de studenti System.out.println("Student Count = "+StudentRecord.getStudentCount());

Anca Ion

} }

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

Anca Ion

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

Anca Ion

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

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;

Anca Ion

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

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.

S-ar putea să vă placă și