Sunteți pe pagina 1din 6

I.

Notiuni generale (obiecte, clase, tipuri de date, transmiterea parametrilor)


 Obiectul :
 orice obiect este de un anumit tip (clasa) ;
 se creeaza cu « NEW »
 contine o adresa;
 are un inceput si un sfarsit in timp ;
 Clasa :
 este alcatuita din date membre si functii ;
Denumirile de date membre si functii incep cu litere mici. (Practica recomandata)

Exista doua tipuri de date :


 Clase : Variabila de tip « clasa » este un obiect.
 Prmitive : (boolean, char, int, short, long, float, double, etc)
 se creeaza la momentul definirii ;
 contine o valoare (variabila) nu o adresa ;

Transmiterea paramentrilor

Argumentele si valorile returnate se transmit prin copiere : pentru PRIMITIVE se transmite(copiaza)


valoarea, iar in cazul OBIECTELOR se transmite(copiaza) o adresa.
O functie are o memorie locala creata la inceputul executiei si stearsa la sfarsit.

II. Constructori
 Are aceeasi denumire ca si clasa ;
 Nu intoarce nici o valoare ;
 Are ca rezultat alocarea unei adrese ;
 Are ca scop creearea obiectelor si initializarea datelor member(eventual alte operatii);
 Daca nu se creeaza un constructor implicit, creeaza programul unul explicit;

Supraincarcarea :
- se poate face pe constructor si pe metode ;
- in toate variantele de supraincarcare ale unei metode se pastreaza aceeasi denumire a functiei;
- fiecare metoda(constructor) supraincarcata trebuie sa aiba o lista unica de argumente(ca numar
si/sau tipuri si/sau ordine de aparitie) ;

Cuvantul cheie « THIS »


 Contine o referinta catre obiectul curent ;
 Se poate folosi si pe post de constructor : Poate exista doar o singura data in prima linie a altui
constructor ;
 Nu poate aparea in metode statice ;
 Se uitilizeaza pentru a scrie cod cat mai putin si cat mai clar. Ex : this.imaginar=imaginar ;

III. Cuvantul cheie « STATIC »


 Ex : PI – este data membre statica a clasei Math ; cos, sin – sunt functii (metode) statice ale
clasei Math
 Functiile statice si datele membre statice pot fi apelate/accesate utilizand direct denumirea
clasei sau un obiect ;
 Datele membre statice sunt commune tuturor obiectelor de acelasi tip.
 Functiile statice nu pot modifica(accesa) datele member ne-statice;

IV. Vectori
 O variabila de tip vector contine o referinta (este un obiect); afirmatie valabila si cand este
vorba de vectori de primitive.
 Alocarea lor de face explicit (de programator) cu « NEW » , sau implicit (in program)
mentionand componentele continute ;
 Orice obiect de tip « vector » contine o data membra « length » care contine lungimea
vectorului ;
 indexul fiind de la 0 la length-1.

Ex. NumeClasa[] v=new NumeClasa[3];


V[0]=new NumeClasa(1, b, “tata”) …

V. Librarii
 Libraria este un set de fisiere organizate intr-o structura ierarhica de directoare;
 Utilizarea librariilor se face cu « import » Ex. import java.util.*
 Reguli de creare :
 Nume global – domeniul de internet ( asa se asigura unicitatea) ;
 Nume specializat – nume proiect
Ex. package com.ibm.jdom

VI. Specificatori de acces


 Public
 Package
 Protected
 Private

Specificatorii pot fi utilizati pentru clase, date membre si functii.

O clasa « normala » pot avea 2 specificatori : public sau « niciunul » ->package


Intr-un fisier poate exista o singura calsa cu specific « public », iar acesta trebuie sa aiba numele
identic cu numele fisierului.
Ex. In fisierul titi.java exista o clasa cu numele public class titi

Public – clasa poate fi folosita de oriunde : din interiorul sau din exteriorul librariei.
Package (este specificator implicit)– are doua semnificatii :
 Pentru exteriorul librariei este lafel ca « Private »
 Pentru interiorul librariei este lafel ca « Public »

Pentru functii sau date membre sunt 4 tipuri de specificatori :


Protected – « un fel de » Package cu o extensie pentru mostenire dar NU « PUBLIC »
Private – data membra sau functia nu pot fi accesate din exteriorul clasei
Public – o data sau o functie poate fi accesata de oriunde

Daca o data membra sau o functie este de tip “package”, atunci pentru alte clase din aceeasi librarie
este ca si cum ar fi “public”, iar pentru alte clase din exteriorul librariei este ca si cum ar fi “private”.

VII. Upcasting, polimorfism

Moştenirea: “extends”
Sintaxă:
class NumeClasaDerivata extends NumeClasaDeBaza {
// codul clasei derivate
Moştenire:
− în clasa derivată vor exista implicit datele membre şi metodele definite în clasa de bază (drepturile
de folosire a datelor / metodelor clasei de bază în clasa derivată sunt funcţie de specificatori)

Suprascriere – rescrierea unei metode din clasa de baza in clasa derivata.


!!! Denumirea functiei trebuie sa fie aceeasi, iar prototipul identic (numar, tip si ordinea parametrilor)!!!

Cuvantul cheie “super”

− dacă clasa de bază nu are constructor fără parametri în constructorul clasei derivate trebuie făcut un
apel explicit către constructorul clasei de bază
− apelul din constructorul clasei derivate către constructorul cu parametri al clasei de bază se face
folosind “super”
− apelul din constructorul clasei derivate către constructorul cu parametri al clasei de bază trebuie sa
fie în prima linie (de cod) a constructorului clasei derivate

Cuvantul cheie “final”

− aplicabil pentru date membre / metode / clase


− primitive / obiecte – valoare constanta nemodificabila / referinta nemodificabila (nu poate fi
realocat)
− metode – nu pot fi suprascrise; metode “private” sunt implicit “final”
− clase – nu pot fi folosite ca si clase de baza;
− primitive / obiecte – valoare constanta nemodificabila /referinta nemodificabila (nu poate fi
realocat)
− valoarea nu trebuie neaparat cunoscuta la momentul compilarii (cazul generarilor aleatoare)
− variabile statice / nonstatice – nemodificabile per clasa / obiect
Polimorfism – presupune detectarea tipului obiectului continut intr-o variabila de tipul unei clase de
baza; daca se apeleaza o metoda pe variabila mentinuta mai intai se detecteaza tipul de obiect, iar apoi
apelarea metodei se face pe acel obiect.

Upcasting si Polimorfism ajuta la implementarea de programe generale.

VIII. Metode abstracte, Clase abstracte

Metode abstracte:
- nu au decat prototip
- numele metodei este precedat de cuvantul cheie “abstract”
- casele derivate dintr-o clasa ce contine metode abstracte trebuie sa suprascrie obligatoriu acele
metode

Clase abstracte
- sunt precedate de cuvantul cheie “abstract”
- clasele care contin metode abstracte trebuie declarate abstracte
- clasele abstracte nu pot creea obiecte
- o clasa poate fi declarata abstracta chiar daca nu contine metode abstracte (scopul este de a creea
obiecte)

IX. Interfete

- sunt un fel de clase abstracte care contin doar metode abstracte


- pentru a creea o interfata se utilizeaza cuvantul cheie “interface” in loc de “class”
- pentru mostenire se folosesc cuvintele cheie “extends”/”implements”
- poate fi cu acces “Public” sau “Package”
- datele member sunt automat “public static final”
- metodele sunt automat publice
Scopul : mostenirea multipla

X. Mostenire multipla

O clasa poate mosteni o singura clasa si/sau mai multe interfete.

XI. Tratarea erorilor

Exceptiile reprezinta unica modalitate de raportare a erorilor (la executie).


Operatii in cazul aparitiei unei erori:
- se creeaza un obiect de tip exceptie (cu NEW);
- se opreste calea curenta de executie;
- se trateaza exceptia.
Aruncarea explicita a unei exceptii
- In clauza “throw” poate fi transmis orice obiect de tip “Throwable”(clasa de baza a ierarhiei de exceptii);
- Clasa de baza pentru utilizatori: Exception este Throwable.

Prinderea si tratarea exceptiilor

try{//cod ce poate genera exceptii


catch(TipExceptie id1){
}
}
Daca in metoda exista cod care poate genera exceptii pentru care nu este scris un bloc
prindere/tratare, atunci exceptia trebuie declarata in clauza “throws”.

Etapele prindere/tratare:

- Este cautata prima potrivire, primul bloc “catch” pentru care tipul exceptiei se potriveste cu tipul
obiectului exceptie aruncat;
- Este executat setul de intructiuni corespunzator blocului “catch” selectat (intructiunile corespunzatoare
celorlalte blocuri nu sunt executate).

Crearea exceptiilor:

Class ExceptieSimpla extends Exception{}

Clauza “throws”:

void f() throws ExceptieSimpla{//.....}

Rearuncarea unei exceptii:

void f() throws ExceptieSimpla{ catch(Exception e){


print (“Exceptia a fost prinsa!”);
throw e;
}
}

- Blocurile “catch” de pe acelasi nivel cu blocurile in care se face rearuncarea sunt ignorate.
- Tratarea exceptiei rearuncate trebuie facuta la un nivel superior.
Clauza “finally”:

try{//.....
catch(Exceptie1 id1){......}
.......
finally{......} //intrunctiuni care se executa mereu
}

Clauza “finally” poate exista si fara blocuri “catch”


Instructiunile sunt executate mereu (chiara daca exceptia a fost sau nu tratata, chiar daca exceptia a
fost sau nu prinsa, etc).

XII. Generice

public class Box<T>{


private T t; //”T” este tipul
public void add(T t){
this.t=t;
}
public T get(){
returnt;
}
}

Scopuri:
- Cresterea fiabilitatii;
- Cresterea vitezei de executie;
- Eliminarea erorilor la executie;
- Detectarea erorilor la compilare.

- <U extends NUmeClasa> are semnificatia de extindere sau implementare.


- se pot specifica interfeţe adiţionale. Exemplu: <U extends Number & MyInterface>

Alocarea vectorilor de generice:

ListaDeNumere<Double> l = new ListaDeNumere<Double> (Double.class, 10);

! Când se alocă un vector este necesară cunoaşterea de informaţii referitoare la tipul elementelor !

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