java lab

37
MVP 2011-2012 Anca Ion Fundamente ale limbajului de programare JAVA -timp de lucru 4 ore- I. Partea teoretica In acest laborator se vor studia: Identificarea partilor de baza ale unui program Java Diferentierea dintre literali si tipuri de date primitive Dezvoltarea unui program Java folosind conceptele studiate Clase si obiecte CREAREA UNEI 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 câte 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

Upload: crina-neciu

Post on 21-Jul-2016

12 views

Category:

Documents


0 download

DESCRIPTION

Laborator Java

TRANSCRIPT

MVP 2011-2012 Anca Ion

Fundamente ale limbajului de programare JAVA-timp de lucru 4 ore-

I. Partea teoretica

In acest laborator se vor studia: Identificarea partilor de baza ale unui program Java Diferentierea dintre literali si tipuri de date primitive Dezvoltarea unui program Java folosind conceptele studiate Clase si obiecte

CREAREA UNEI 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 screenSystem.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 principala4. Trebuie scrise comentarii in cod pentru a explica actiunile unei metode sau unei clase

c. Compilarea aplicatiei

1. Se foloseste compilatorul Java, javac2. Apelul compilatorului se face pentru fisierul ce contine clasa principala a aplicatiei. 3.Compilatorul creeaza câte un fisier separat pentru fiecare clasa a programului; acestea au extensia .class si sunt plasate în acelasi director cu fisierele sursa.

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

MVP 2011-2012 Anca Ion

– float6.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 octala0xBACC //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

MVP 2011-2012 Anca Ion

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 //double6.02E23 //valoare mare de tip double2.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 variabilelor

Tip nume_variabila = valoare

Declararea constantelor

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

2. Variabile locale, declarate într-o metoda sau într-un bloc de cod, vizibile doar în metoda/blocul respectiv

MVP 2011-2012 Anca Ion

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 name4 //result and boolean data type5 boolean result;67 //declare a data type with variable name8 //option and char data type9 char option;10 option = 'C'; //assign 'C' to option1112 //declare a data type with variable name13 //grade, double data type and initialized14 //to 0.015 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’;67 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

MVP 2011-2012 Anca Ion

Exemplu● Presupunem ca avem 2 variabile cu tipurile de date int si String.

int num = 10; // tip primitivString 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 {

MVP 2011-2012 Anca Ion

2 public static void main(String[] args){3 //a few numbers4 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 numbers16 System.out.println("Subtracting...");17 System.out.println(" i - j = " + (i – j));18 System.out.println(" x - y = " + (x – y));1920 //multiplying numbers21 System.out.println("Multiplying...");22 System.out.println(" i * j = " + (i * j));23 System.out.println(" x * y = " + (x * y));2425 //dividing numbers26 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 dividing30 // numbers31 System.out.println("Computing the remainder...");32 System.out.println(" i % j = " + (i % j));33 System.out.println(" x % y = " + (x % y));3435 //mixing types36 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 = 37j = 42x = 27.475y = 7.22Adding...i + j = 79x + y = 34.695Subtracting...i - j = -5

MVP 2011-2012 Anca Ion

x - y = 20.255Multiplying...i * j = 1554x * y = 198.37Dividing...i / j = 0x / y = 3.8054 Computingthe remainder...i % j = 37x % y = 5.815Mixing types...j + y = 49.22i * 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 1este 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

MVP 2011-2012 Anca Ion

Operatori relationali

Exemplu 3:1 public class RelationalDemo{2 public static void main(String[] args){3 //a few numbers4 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 than12 System.out.println("Greater than...");13 System.out.println(" i > j = "+(i>j));//false14 System.out.println(" j > i = "+(j>i));//true15 System.out.println(" k > j = "+(k>j));//false

16 //greater than or equal to17 System.out.println("Greater than or equal to...");18 System.out.println(" i >= j = "+(i>=j));//false19 System.out.println(" j >= i = "+(j>=i));//true20 System.out.println(" k >= j = "+(k>=j));//true21 //less than22 System.out.println("Less than...");23 System.out.println(" i < j = "+(i<j));//true24 System.out.println(" j < i = "+(j<i));//false25 System.out.println(" k < j = "+(k<j));//false26 //less than or equal to27 System.out.println("Less than or equal to...");28 System.out.println(" i <= j = "+(i<=j));//true29 System.out.println(" j <= i = "+(j<=i));//false30 System.out.println(" k <= j = "+(k<=j));//true31 //equal to32 System.out.println("Equal to...");33 System.out.println(" i == j = " + (i==j));//false34 System.out.println(" k == j = " + (k==j));//true35 //not equal to36 System.out.println("Not equal to...");

MVP 2011-2012 Anca Ion

37 System.out.println(" i != j = " + (i!=j));//true38 System.out.println(" k != j = " + (k!=j));//false39 }40 }

Programul va afisa:Variable values...i = 37j = 42k = 42Greater than...i > j = falsej > i = truek > j = falseGreater than or equal to...i >= j = falsej >= i = truek >= j = trueLess than...i < j = truej < i = falsek < j = falseLess than or equal to...i <= j = truej <= i = falsek <= j = trueEqual to...i == j = falsek == j = trueNot equal to...i != j = truek != 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 {2 public static void main( String[] args ){3 int i = 0;4 int j = 10;5 boolean test= false;6 //demonstrate &&

MVP 2011-2012 Anca Ion

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:010false011false

● 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

MVP 2011-2012 Anca Ion

10true011true

● 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:falsetruefalsetrue

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

MVP 2011-2012 Anca Ion

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

● Programul afiseaza,falsetrue

Operatori logici: Operatorul conditional (?:)● este un operator ternar-aceasta inseamna ca primeste 3 argumente care impreuna formeaza o expresie.–Structura expresiei este: exp1?exp2:exp3in care,

exp1 –este o expresie booleana al carei rezultat poate fi true sau false – Rezultat:Daca exp1 este true, exp2 este valoarea returnataDaca 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 student6 status = (grade >= 60)?"Passed":"Fail";7 //print status8 System.out.println( status );9 }10 }

● Programul va afisaPassed

Precedenta operatorilor

MVP 2011-2012 Anca Ion

7. Crearea obiectelorIn Java obiectele sunt create prin instantierea unei clase.Crearea unui obiect presupune trei lucruri:

1. Declararea obiectului : NumeClasa numeObiect;

Exemplu: Rectangle patrat;

2. InstantiereaSe realizeaza prin intermediul operatorului new si are ca efect crearea efectiva a obiectului cu alocarea spatiului de memorie corespunzator.

patrat = new Rectangle();

3. InitializareaSe 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)

MVP 2011-2012 Anca Ion

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!

8. Folosirea obiectelorReferirea valorii unei variabile se face prin obiect.variabilaDe 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 100patrat.x = 10;patrat.y = 20; //schimba origineapatrat.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 origineapatrat.setSize(200, 300); //schimba dimensiunea

9. Distrugerea obiectelorIn Java programatorul nu mai are responsabilitatea distrugerii obiectelor sale întrucât, în momentul rularii unui program, simultan cu interpretorul Java ruleaza si un proces care se ocupa cu distrugerea obiectelor care nu mai sunt folosite. 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 când 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.

MVP 2011-2012 Anca Ion

10. 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 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 oricâti mostenitori (subclase). Extinderea unei clase se realizeaza deci astfel:

class B extends A {...} //A este superclasa clasei B

Corpul unei claseUrmeaza 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() {

MVP 2011-2012 Anca Ion

//implementare}

In Java:class A {

void metoda(){//implementare

}}

Constructorii unei claseConstructorii 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 implicitathis(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;

MVP 2011-2012 Anca Ion

Patrat(double x0, double y0, double s0) {//se apeleaza constructorul superclaseisuper(x0, y0, s0, s0); size = s0;

}}

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 membreVariabilele se delara de obicei inaintea metodelor, desi acest lucru nu este impus de compilator.

class NumeClasa {//declararea variabilelor//declararea metodelor

}

MVP 2011-2012 Anca Ion

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

Ex: 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 membriiunei 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();

MVP 2011-2012 Anca Ion

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.

Implementarea metodelorMetodele 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 clasaO 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

VariabileCand 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 100System.out.println(o2.x) ; //-> afiseaza 200

Asadar, fiecare obiect nou creat va putea memora valori diferite pentru variabilele sale de instanta.

MVP 2011-2012 Anca Ion

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 instantastatic long n; //variabila de clasa

}. . .MyClass o1 = new MyClass();MyClass o2 = new MyClass();o1.n = 100;System.out.println(o2.n) -> afiseaza 100o2.n = 200;System.out.println(o1.n) -> afiseaza 200

MetodeSimilar 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 atât pe variabilele de instanta cât si pe cele statice ale clasei

metodele de clasa opereaza doar pe variabilele statice ale clasei

class MyClass {int x ; //variabila de instantastatic long n; //variabila de clasavoid metodaDeInstanta() {

n ++; //corectx --; //corect

static void metodaStatica() {n ++; //corectx --; //incorect

}

Intruct metodele de clasa nu depind de starea obiectelor clasei respective, apelul lor se poate face astfel:

MyClass.metodaStatica(); //corect, echivalent cuMyClass obj = new MyClass();obj.metodaStatica(); //corect

spre deosebire de metodele de instanta care nu pot fi apelate decât unei instante a clasei respective:

MyClass.metodaDeInstanta(), //incorectMyClass obj = new MyClass();obj.metodaDeInstanta(); //corect

MVP 2011-2012 Anca Ion

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

}

La fiecare instantiere a clasei MyClass va fi rezervata zona de memorie pentru variabilele finale ale obiectului respectiv, ceea ce este o risipa întrucât aceste constante au aceleasi valori pentru toate instantele clasei. Declararea corecta a constantelor trebuie asadar facuta cu modificatorii 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 instantierenrInstante ++;

}}

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;

}

MVP 2011-2012 Anca Ion

sau prin intermediul unui bloc static de initializare:

class MyClass {static {

final double PI = 3.14;long nrInstante = 0;final double EPS = 0.01;

}}

Supraîncarcarea si supradefinirea metodelorSunt doua concepte extrem de utile ale POO si se refera la:

supraîncarcarea (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 încât 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 - polimorfismvoid metoda(int arg) {

System.out.println("A: metoda cu un parametru");}

}

class B extends A {//supradefinirevoid 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"

MVP 2011-2012 Anca Ion

sa extinda codul metodei parinte, executând înainte de codul propriu si functia parinte.

class B extends A {//supradefinire prin extensievoid metoda() {

super.metoda();System.out.println("B: metoda fara parametru");

}}. . . B b = new B();b.metoda(); -> afiseaza :"A: metoda fara parametru""B: metoda fara parametru"

Metode finaleO 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 {

. . .}

}

MVP 2011-2012 Anca Ion

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 acoperireclass Continut { //clasa imbricata

private String marfa;private float cantitate;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, 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 nestaticase numeste clasa interna.

class ClasaDeAcoperire{. . .static class ClasaImbricataStatica {

. . .

MVP 2011-2012 Anca Ion

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

o o "clasa interna" reflecta relatia dintre instantele a doua clase, în sensul ca o instanta a unei clase interne nu poate exista decât în cadrul unei instante a clasei de acoperire.

Asadar, o clasa interna este o clasa imbricata ale carei instante nu pot exista decât în cadrul instantelor clasei de acoperire si care are acces direct la toti membrii clasei sale de acoperire.

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.classClasaDeAcoperire$ClasaInterna1.classClasaDeAcoperire$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.

MVP 2011-2012 Anca Ion

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 Numbercare 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(); //eroareDeclararea 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(); //corectvoid 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, furnizând chiar implementarea unor metode comune tuturor claselor sau lasând explicitarea unor metode fiecarei subclase in parte.

III. Desfasurarea laboratorului

Exercitiul 1: Declararea, Initializarea, Afisarea variabilelor (exemplu 1)

MVP 2011-2012 Anca Ion

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

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.

MVP 2011-2012 Anca Ion

C:\myjavaprograms>java OutputVariable10The value of x=A

I.Crearea de clase in Java

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

MVP 2011-2012 Anca Ion

* Returneaza numarul de instante ale clasei StudentRecords */ public static int getStudentCount(){ return studentCount; } /** * Returneaza numarul de instante ale clasei StudentRecords. * Metoda statica. */ 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.

MVP 2011-2012 Anca Ion

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"); 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 myOwnRecordo 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 myOwnRecordo Setati calificativul la engleza al obiectului myOwnRecordo Setati calificativul la stiinte al obiectului myOwnRecordo 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";

MVP 2011-2012 Anca Ion

}

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

MVP 2011-2012 Anca Ion

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

MVP 2011-2012 Anca Ion

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

MVP 2011-2012 Anca Ion

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

MVP 2011-2012 Anca Ion

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