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

III.

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 ;

Cuvantul cheie STATIC

IV.

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;

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

Motenirea: extends
Sintax:
class NumeClasaDerivata extends NumeClasaDeBaza {
// codul clasei derivate
Motenire:
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 funcie 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 fr parametri n constructorul clasei derivate trebuie fcut un
apel explicit ctre constructorul clasei de baz
apelul din constructorul clasei derivate ctre constructorul cu parametri al clasei de baz se face
folosind super
apelul din constructorul clasei derivate ctre 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 interfee adiionale. Exemplu: <U extends Number & MyInterface>

Alocarea vectorilor de generice:


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

! Cnd se aloc un vector este necesar cunoaterea de informaii referitoare la tipul elementelor !