java lab 1,2

Upload: marica-marian

Post on 07-Apr-2018

277 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 java lab 1,2

    1/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 .java2. Numele fisierului trebuie sa fie acelasi cu al clasei publice. Daca de exemplu, numeleclasei publice este Hello, fisierul trebuie numit Hello.java.3. Toate programele scrise in Java cu exceptia Applet-urilor trebuie sa contine o metodaprincipala4. Trebuie scrise comentarii in cod pentru a explica actiunile unei metode sau unei clase

    c. Compilarea aplicatiei

    1. Se foloseste compilatorul Java, javac

    2. Apelul compilatorului se face pentru fisierul ce contine clasa principala a aplicatiei.

    3.Compilatorul creeaza cte un fisier separat pentru fiecare clasa a programului; acesteaau extensia .class si sunt plasate n acelasi director cu fisierele sursa.

    javac Hello.java

    d. Rularea aplicatiei

  • 8/3/2019 java lab 1,2

    2/37

    MVP 2011-2012 Anca Ion

    Se face cu interpretorul java, apelat pentru unitatea de compilare corespunzatoare claseiprincipale, 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

  • 8/3/2019 java lab 1,2

    3/37

    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

  • 8/3/2019 java lab 1,2

    4/37

    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 exemplua //litera a\t // tab

    Pentru a reprezenta caractere speciale ca ghilimele simple ' sau ghilimele duble ", sefoloseste 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 aceastasectiune

    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 2077 //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 Tipurile de date reale au ca si tip implicit tipul de date double

  • 8/3/2019 java lab 1,2

    5/37

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

    Declarareavariabilelor

    Tip nume_variabila

    Initializarea

    variabilelorTip nume_variabila = valoare

    Declarareaconstantelor

    final Tip nume_variabila

    Conventia de notare a variabilelor in Java este data de urmatoarele criterii:

    1. variabilele finale (constante) se scriu cu majuscule2. 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 cumajuscule, 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 claseirespective si pentru alte clase n functie de nivelul lor de acces (vezi "Declarareavariabilelor membre")

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

    3. Parametri metodelor, vizibili doar n metoda respectiva

  • 8/3/2019 java lab 1,2

    6/37

    MVP 2011-2012 Anca Ion

    4. Parametrii de la tratarea exceptiilor

    Exemplu 1: Declararea si initializarea variabilelor1 public class VariableSamples {

    2 public static void main(String[] args ){3 //declare a data type with variable name

    4 //result and boolean data type

    5 boolean result;

    6

    7 //declare a data type with variable name

    8 //option and char data type

    9 char option;

    10 option = 'C'; //assign 'C' to option

    11

    12 //declare a data type with variable name

    13 //grade, double data type and initialized

    14 //to 0.0

    15 double grade = 0.0;16 }

    17 }

    Afisarea variabilelor Pentru a afisa valoarea variabilelor se folosesc urmatoarele comenzi:

    System.out.println()System.out.print()

    Exemplu:1 public class OutputVariable {

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

    3 int value = 10;

    4 char x;

    5 x = A;

    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 pentruobiectul din acea clasa

    Exemplu

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

  • 8/3/2019 java lab 1,2

    7/37

    MVP 2011-2012 Anca Ion

    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--, --nObservatie: evaluarea expresiilor logice se face prin metodascurtcircuitului (evaluarea seopreste n momentul n care valoarea de adevar a expresiei este sigur determinata)

    operatori logici: &&(and), ||(or), !(not) operatori relationali: > (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

  • 8/3/2019 java lab 1,2

    8/37

    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 = 37j = 42x = 27.475

    y = 7.22Adding...i + j = 79x + y = 34.695Subtracting...i - j = -5x - y = 20.255Multiplying...

  • 8/3/2019 java lab 1,2

    9/37

    MVP 2011-2012 Anca Ion

    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 expresiacount=count + 1;//increment the value of count by 1

    este echivalenta cucount++;

    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

  • 8/3/2019 java lab 1,2

    10/37

    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 //greater than or equal to

    17 System.out.println("Greater than or equal to...");18 System.out.println(" i >= j = "+(i>=j));//false

    19 System.out.println(" j >= i = "+(j>=i));//true

    20 System.out.println(" k >= j = "+(k>=j));//true

    21 //less than

    22 System.out.println("Less than...");

    23 System.out.println(" i < j = "+(i

  • 8/3/2019 java lab 1,2

    11/37

    MVP 2011-2012 Anca Ion

    40 }

    Programul va afisa:

    Variable values...i = 37

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

  • 8/3/2019 java lab 1,2

    12/37

    MVP 2011-2012 Anca Ion

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

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

    010true

  • 8/3/2019 java lab 1,2

    13/37

    MVP 2011-2012 Anca Ion

    011true

    Se observa ca expresia j++ din linia 7 nu este evaluata deoarece expresia (i

  • 8/3/2019 java lab 1,2

    14/37

    MVP 2011-2012 Anca Ion

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

    Precedenta operatorilor

  • 8/3/2019 java lab 1,2

    15/37

    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. InstantiereaSe realizeaza prin intermediul operatorului new si are ca efect crearea efectiva aobiectului cu alocarea spatiului de memorie corespunzator.

    patrat = new Rectangle();

    3. InitializareaSe realizeaza prin intermediul constructorilor clasei respective. Rectangle() este un apelcatre constructorul clasei Rectangle care este responsabil cu initializarea obiectului.Initializarea se poate face si cu anumiti parametri, cu conditia sa existe un constructor alclasei 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-alocatDeclararea 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/3/2019 java lab 1,2

    16/37

    MVP 2011-2012 Anca Ion

    Folosirea obiectelor

    Referirea valorii unei variabile se face prin obiect.variabilaDe exemplu clasa Rectangle are variabilele publice x, y, width, height, origin. Aflarea valoriloracestor 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 leofera 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

    Distrugerea obiectelor

    In Java programatorul nu mai are responsabilitatea distrugerii obiectelor sale ntruct, nmomentul rularii unui program, simultan cu interpretorul Java ruleaza si un proces care se ocupacu distrugerea obiectelor care nu mai sunt folosite. Acest proces pus la dispozitie de platformaJava 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 oreferinta la acesta. Referintele (care sun de fapt variabile) sunt distruse n mod :

    natural, atunci cand variabila respectiva iese din domeniul sau, de exemplu la terminareaunei 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 clasarespectiva (daca nu se specifica un anume pachet, toate clasele din directorul curent sunt

  • 8/3/2019 java lab 1,2

    17/37

    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 carese 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 aredoua scopuri:

    Dupa numele clasei putem specifica, daca este cazul, faptul ca respectiva clasa este subclasa aunei alte clase cu numeleNumeSuperclasa 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 doarmostenirea simpla, asadar o clasa poateavea 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 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() {//implementare}

    In Java:

    class A {

    void metoda(){//implementare

    }}

  • 8/3/2019 java lab 1,2

    18/37

    MVP 2011-2012 Anca Ion

    Constructorii unei clase

    Constructorii unei clase sunt metode speciale care au acelasi nume cu cel al clasei, nu returneazanici o valoare si sunt folositi pentru initializarea obiectelor acelei clase n momentul instantieriilor.

    class Dreptunghi {Dreptunghi() {

    //constructor}

    }O clasa poate avea unul sau mai multi constructori care trebuie insa sa difere prin lista deargumente primite. In felul acesta sunt permise diverse tipuri de initializari ale obiectului lacrearea 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 apelamexplicit constructorul unei clase folosim metoda this(argumente), care apeleaza constructorulcorespunzator (ca argumente) al clasei respective. Aceasta metoda este folosita atunci cand suntimplementati mai multi constructori pentru o clasa pentru a nu repeta secventele de cod scrise laconstructorii 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.

  • 8/3/2019 java lab 1,2

    19/37

    MVP 2011-2012 Anca Ion

    In cazul in care scrieti o clasa care nu are declarat nici un constructor, sistemul ii creeaza automatun constructor implicit care nu primeste nici un argument si care nu face nimic. Deci prezentaconstructorilor in corpul unei clase nu este obligatorie.

    Daca insa ati scris un constructor pentru o clasa care are mai mult de un argument, atunciconstructorul 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. Variabileledeclarate 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

  • 8/3/2019 java lab 1,2

    20/37

    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

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

    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 declarareaunei 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 membrudin subclasele clasei in care a fost declarata variabila depinde si de pachetul n care se gasestesubclasa: daca sunt in acelasi pachet accesul este permis, daca nu sunt n acelasi pachetaccesul nu este permis decat pentru obiecte de tipul subclasei.

  • 8/3/2019 java lab 1,2

    21/37

    MVP 2011-2012 Anca Ion

    Implementarea metodelor

    Metodele sunt responsabile cu descrierea comportamentului unui obiect. Generic, o metoda sedeclara 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

    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 aclasei 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 deinstanta.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 uneivariabile 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();

  • 8/3/2019 java lab 1,2

    22/37

    MVP 2011-2012 Anca Ion

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

    Metode

    Similar ca la variabile, metodele declarate fara modificatorul static sunt metode de instanta iarcele declarate cu static sunt metode de clasa (statice). Diferenta ntre cele doua metode esteurmatoarea:

    metodele de instanta opereaza att pe variabilele de instanta ct si pe cele statice aleclasei

    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 dect unei instante a claseirespective:

    MyClass.metodaDeInstanta(), //incorectMyClass 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

    }

  • 8/3/2019 java lab 1,2

    23/37

    MVP 2011-2012 Anca Ion

    La fiecare instantiere a clasei MyClass va fi rezervata zona de memorie pentru variabilelefinale ale obiectului respectiv, ceea ce este o risipa ntruct aceste constante au aceleasivalori pentru toate instantele clasei. Declararea corecta a constantelor trebuie asadarfacuta 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 obiectelorunei 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;

    }}

  • 8/3/2019 java lab 1,2

    24/37

    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 cuconditia ca semnaturile lor sa fie diferite (lista de argumente primite sa difere fie prinnumarul argumentelor, fie prin tipul lor) astfel nct la apelul functiei cu acel nume sa sepoata stabili n mod unic care dintre ele se executa. Fenomenul de supradefinire ametodelor se mai numeste sipolimorfism.

    supradefinirea (overriding): o subclasa a unei clase poate rescrie o metoda a claseiparinte, prin implementarea unei metode cu acelasi nume si aceeasi signatura ca alesuperclasei.

    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"

    sa extinda codul metodei parinte, executnd nainte de codul propriu si functia parinte.

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

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

    }

  • 8/3/2019 java lab 1,2

    25/37

    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 fiindfinala. Acest lucru este util daca respectiva metoda are o implementare care nu trebuie schimbatasub nici o forma in subclasele ei, fiind critica pentru consistenta starii unui obiect. De exemplustudentilor unei universitati trebuie sa li se calculeze media finala in functie de notele obtinute laexamene 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 oalta 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;

  • 8/3/2019 java lab 1,2

    26/37

    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 nestaticase numeste clasa interna.

    class ClasaDeAcoperire{. . .static class ClasaImbricataStatica {

    . . .}class ClasaInterna {

    . . .}

    }

    Diferentierea acestor denumiri se face deoarece:

  • 8/3/2019 java lab 1,2

    27/37

    MVP 2011-2012 Anca Ion

    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 dect n cadrul unei instante a clasei deacoperire.

    Asadar, o clasa interna este o clasa imbricata ale carei instante nu pot exista dect n cadrulinstantelor 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 suntfisiere avand numele clasei respective si extensia .class, si care contin toate informatiile despreclasa respectiva.Pentru clasele imbricate aceste unitati de compilare sunt denumite astfel: numele clasei deacoperire, 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.

    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 unorclase 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 numeregenerice ci de numere ntregi, reale, etc. Clasa Number serveste ca superclasa pentru clase cum arfi Byte, Double, Float, Integer, Long si Short ce implementeaza obiecte pentru descriereanumerelor de un anumit tip. Asadar clasa Number reprezinta un concept abstract si nu vom puteainstantia obiecte de acest tip:

  • 8/3/2019 java lab 1,2

    28/37

    MVP 2011-2012 Anca Ion

    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 lacompilarea 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 metodeledeclarate o clasa abstracta poate contine metode fara nici o implementare. Metodele fara nici oimplementare 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 oeroare 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 pecare trebuie sa-l implementeze, furniznd chiar implementarea unor metode comune tuturorclaselor 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

  • 8/3/2019 java lab 1,2

    29/37

    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 Windowscompilatorul se gaseste in %JAVA_HOME%\bin. Rezultatul compilarii va fi creat infisierul 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 platformaWindows 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 comandaporneste Java Virtual Machine si executa programul OutputVariable.

    C:\myjavaprograms>java OutputVariable

    10The value of x=A

    I.Crearea de clase in Java

  • 8/3/2019 java lab 1,2

    30/37

    MVP 2011-2012 Anca Ion

    Creati in Eclipse proiectul numit: MyStudentRecordExample

    1. Adaugati la proiect clasaStudentRecord

    public class StudentRecord {

    /** Creates a new instance of StudentRecord */public StudentRecord() {}

    // Declarea variabilelor de instantaprivate String name;private double mathGrade;private double englishGrade;private double scienceGrade;private double average;

    // Declarea variabilelor staticeprivate 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.*/

  • 8/3/2019 java lab 1,2

    31/37

    MVP 2011-2012 Anca Ion

    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 clasaStudentRecordExample

    public class StudentRecordExample {

    public static void main(String[] args) {

    // Crearea unei instante a clasei StudentRecordStudentRecord annaRecord =new StudentRecord();

    // Incrementarea variabilei studentCount prin invocarea metodei staticeStudentRecord.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");

  • 8/3/2019 java lab 1,2

    32/37

    MVP 2011-2012 Anca Ion

    beahRecord.setName("Beah");crisRecord.setName("Cris");

    System.out.println("Name = " + annaRecord.getName());

    // Afisarea numarului de studentiSystem.out.println("Student Count = "+StudentRecord.getStudentCount());

    }}

    3. Executati proiectul

    4. Exercitiu: Faceti urmatoarele schimbari si executati apoi programul Modificati clasa StudentRecordExample.java astfel:

    o Creati un alt obiect numit StudentRecord numit myOwnRecord

    o Apelati metoda setName() a obiectului myOwnRecord pasandparametrul "myOwn" ca argument al functieio 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 staticestatic int staticintA = 10;static String staticStringB ="I am static string";

    // Variabile de instantaint instanceintA = 20;

    String instanceStringB = "I am instance string";

    }

    2. Adaugati la proiect clasaStaticVariablesExamples

    public class StaticVariablesExample {

    public static void main(String[] args) {

    // Accesarea variabilelor statice// Se observa ca nu trebuie creat un obiect instanta al clasei

  • 8/3/2019 java lab 1,2

    33/37

    MVP 2011-2012 Anca Ion

    System.out.println("Variables.staticintA = " + Variables.staticintA);System.out.println("Variables.staticStringB = " + Variables.staticStringB);Variables.staticStringB = "Life is good!";System.out.println("Variables.staticStringB = " + Variables.staticStringB);

    //Accesarea variabilelor de clasa.// Se observa ca trebuie creat un obiect instanta al clasei pentru a avea acces la eleVariables 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 obiectSystem.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 clasaStaticVariablesExample.java pentru a afisa rezultatul adunariivariabilei staticestaticintA cu variabila de instantainstanceintA

    III. Metode statice si non-statice

    Creati in Eclipse proiectul numit:MyStaticMethodsExampleProject

    1. Adaugati la proiect clasaMethods

    public class Methods {

    // Static variablestatic int a = 0;

    // Metode staticestatic 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 incarcatastatic { //bloc static

    System.out.println("Anonymous static method entered, a = " + a);

  • 8/3/2019 java lab 1,2

    34/37

    MVP 2011-2012 Anca Ion

    a += 1; // same thing as a = a + 1System.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 StaticMethodsExamplespublic 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 multipleMethods 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 clasaStudentRecord

    public class StudentRecord {

    // Declararea variabilelor de instantaprivate String name;private double mathGrade;

  • 8/3/2019 java lab 1,2

    35/37

    MVP 2011-2012 Anca Ion

    private double englishGrade;private double scienceGrade;private double average;

    // Declararea variabilelor statice

    private static int studentCount = 0;

    // constructor implicitpublic StudentRecord() {}

    // Constructor cu un singur parametrupublic StudentRecord(String name){

    this.name = name;}

    // Constructor cu 2 parametripublic StudentRecord(String name, double mGrade){

    this.name = name;mathGrade = mGrade;

    }

    // Constructor cu 3 parametripublic StudentRecord(String name, double mGrade, double eGrade){

    this.name = name;mathGrade = mGrade;

    englishGrade = eGrade;}

    // Constructor cu 4 parametripublic 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;

  • 8/3/2019 java lab 1,2

    36/37

    MVP 2011-2012 Anca Ion

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

  • 8/3/2019 java lab 1,2

    37/37

    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 averageSystem.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 mediacalificativelor este pasata ca argument

    - modificati clasa ConstructorExample.java a.i obiectul annaRecord este creatfolosind constructorul nou.