Sunteți pe pagina 1din 5

Examen Restante:

1. Cuvntul cheie static este folosit n java pentru a defini o


variabil sau o metod care poate fi accesata prin
intermediul numelui clasei, fr a fi nevoie s se
construiasc obiecte de tipul respectiv. n construirea unei
aplicaii orientate pe obiecte utilizarea atributelor sau
metodelor statice trebuie s fie evitat i acestea s fie
folosite doar n cazuri de strict necesitate
2. Design patternul FactoryMethod:
In loc sa se apeleze un constructor in mod direct, pentru crearea
unui obiect se apeleaza o metoda de creere a obiectului dintr-o
clasa Factory. Clasa Factory implementeaza o interfata care

specifica metoda de creere;


Astfel, se poate schimba la runtime o implementare a unei
functionalitati cu alta

3. Inner classes:
Se plaseaza clase in interiorul altor clase;
Inner classes reprezinta un concept diferit de compozitie;
De obicei, clasa exterioara are o metoda care returneaza un obiect din clasa

inner;
Tipul

OuterClass.InnerClass;
Obiectul clasei interioare are un link (referinta) catre obiectul clasei

exterioare care l-a creat;


Obiectul clasei interioare poate accesa membrii obiectului clasei exterioare

obiectului

din

clasa

interioara

se

specifica

precum:

fara ca sa fie nevoie de calificare (dreptul de a accesa este asupra tuturor

obiectelor membre ale clasei exterioare;


Pentru a se obtine referinta la obiectul clasei exterioare (din obiectul clasei

inner) se utilizeaza: OuterType.this ;


Pentru a crea un obiect din clasa inner pornind de la un obiect din clasa outer

se poate utiliza: obiectOuter.new ;


Clasele inner sunt potrivite pentru a implementa interfete: se realizeaza
ascunderea implementarii

4. Obiectul Class:
Java realizeaz RTTI prin intermediul obiectului Class;

Acesta contine informatie referitoare la tip, informatie care poate fi

interogat;
Pentru fiecare clas pe care o avem in program, exist un obiect Class
asociat; La compilarea unei noi clase, acest obiect este creat si salvat in

fisierul .class;
La crearea unui obiect dintr-o clas, JVM utilizeaz un subsistem numit class

loader;
Toate clasele sunt incarcate in mod dinamic de ctre JVM la prima utilizare a

acestora (anume cand se face prima referinta la un membru static al clasei);


La incarcarea unei clase, se verific daca obiectul Class al tipului respectiv
este incarcat, daca nu, se identific fisierul .class pe disc, si octetii acestuia
sunt verificati inainte s fie incarcati

5. Thread
6. Exceptii

Examen sesiune:
1. Classpath
Calea root pentru directorare: variabila sistem CLASSPATH
CLASSPATH poate include directoare sau fisiere .jar
classpath e variabila aia de sistem care o setezi in windows ca sa ti mearga java

2. Polimorfism:
Acelasi nume se poate referi la 2 metode diferite.
Este de 2 feluri:
Overriding metoda cu acceasi semnatura cu o alta din clasa parinte;
Overriding doua sau mai multe metode in acelasi clasa cu acelasi nume, dar
semnaturi diferite.
3. Design patternul Iterator

Sablonul Iterator asigura o cale de accesare secventiala a elementelor


unui obiect agregat, fara a expune reprezentarea lui de baza.
Metodele Iteratorului pot avea nume diferite
Java Iterator: next(), hasNext(), remove()
C# IEnumerator: Current, MoveNext(), Reset()

Exist Iteratori interni i externi


Iteratorul extern este controlat de client, ca n exemplul precedent (cu
metoda next)
Iteratorul intern este controlat de Iteratorul nsui, cruia trebuie s i se
spun ce operaii s efectueze cu elementele pe care le parcurge
ablonul se utilizeaz pentru:
A accesa coninutul unui obiect agregat fr a expune reprezentarea
intern
A asigura suport pentru mai multe traversri ale obiectelor agregate
A furniza o interfa uniform pentru traversarea structurilor agregate
diferite
Pentru a suporta o iteraie polimorfic

Suport variaii n traversarea unui agregat


Obiectele agregate pot fi traversate n mai multe feluri i de mai multe ori
Obiectele Iterator simplific interfaa Agregat
Agregatul are nevoie de o metod unic pentru crearea Iteratorului
Scade cuplarea dintre client i obiectele agregate
Crete coeziunea obiectului agregat prin eliminarea necesitii de a
asigura el nsui traversarea
4. Synchronized si lock
Adaugarea cuvantului rezervat synchronized in fata unei metode face ca in timpul
executiei, la un moment dat, aceasta metoda sa nu poata fi executata pe acelasi
obiect decat de un singur thread. Altfel spus, un singur thread poate executa
aceasta metoda la un moment dat. Este important de notat faptul ca, o
metoda synchronized poate fi apelata in acelasi timp pe doua obiecte diferite,
dar daca o apelam pe acelasi obiect, ea nu se poate executa simultan in doua

threaduri. Datorita modului in care masina virtuala java (JVM) sincronizeaza


metodele. Orice obiect (instanta a unei clase) din cadrul masinii virtuale java are
asociat un "blocaj invizibil" (lock - puteti sa va ganditi la acest lock ca la o variabila
boolean privata a obiectului care ia valoarea true cand obiectul este folosit/blocat si
false cand nu este folosit/deblocat). Cand apelez o metoda a unei clase totdeauna o
apelez pe un anumit obiect. Cand apelez o metoda synchronized intr-un thread,
masina virtuala java incearca intai sa obtina blocajul (lock) pe obiectul pe care este
apelata metoda. Daca acest obiect este blocat deja (de catre alt apel de
metoda synchronized in alt thread), threadul va intra in asteptare pana cand
obiectul va fi deblocat. Daca obiectul nu este blocat, threadul curent va bloca
obiectul, va rula metoda synchronized, iar apoi va debloca obiectul.
Vom face acum cateva observatii relative la mecanismul synchronized.
1. O metoda sincronizata apelata pe doua obiecte diferite, in doua threaduri diferite,
nu va sincroniza cele doua threaduri. Pentru ca blocajele (lock-ul) se va obtine
independent pe doua obiecte diferite.
2. Blocarea se face totdeauna pe obiectul fizic si nu pe referinte la acesta. Astfel ca,
nu este bine sa se modifice obiectul dupa care se sincronizeaza, in interiorul codului
3. Metodele sincronizate se scriu, in general, in afara claselor Thread.
5. Sleep si wait

Metoda wait() face aproximativ acelasi lucru ca si metoda sleep, cu doua diferente
esentiale:
metoda wait elibereaza blocajul (lock-ul) pe obiect, spre deosebire de
metoda sleep() care nu elibereaza blocajul. Practic, prin aceasta eliberare a blocajului pe
care o face wait(), alte threaduri care asteapta dupa blocajul aceluiasi obiect, pot sa intre
in lucru, evitand astfel deadlock-ul. Incercati sa rulati programul cu wait() in loc
de sleep() si veti vedea ca el se va termina cu succes si nu va mai ajunge la deadlock.
metoda wait() se poate "trezi" mai repede decat este specificat in parametrul de
timeout, "dormind" astfel un numar variabil de secunde, spre deosebire de
metoda sleep care "doarme" intotdeauna un numar fix de secunde. Metoda wait() se poate
trezi mai repede decat este specificat prin parametru, daca un alt thread apeleaza
metoda notify() sau notifyAll()
6. Externalize:
extinde interfata Serializable;

La obiectele deserializate cu Externalizable, obiectele sunt construite obisnuit


(cu default constructor) si apoi se apeleaza metoda readExternal;
La obiectele Externalizable, subobiectele componente trebuie serializate
manual (in writeExternal) iar la deserializare, ele trebuie recuperate de pe
disc;
La mostenire dintr-o clasa Externalizable, se apeleaza writeExternal si
readExternal a clasei de baza pentru a se asigura serializare / deserializare
corecta

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