1 / 16

Curs 2

Curs 2. Simularea transmiterii functiilor ca parametrii. Delegate Blocuri de inițializare Declararea masivelor Clase Immutable. String Clasele wrapper StringBuilder , StringBuffer Metodele clasei Object Clonarea Exceptii JNI Clase Generice JCF (Java Collection Framework).

jontae
Télécharger la présentation

Curs 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curs 2 Simularea transmiterii functiilor ca parametrii. Delegate Blocuri de inițializare Declarareamasivelor Clase Immutable. String Clasele wrapper StringBuilder, StringBuffer Metodeleclasei Object Clonarea Exceptii JNI ClaseGenerice JCF (Java Collection Framework)

  2. Clasa Object • protected Objectclone() throws CloneNotSupportedException; // returneaza o clona a obiectului curent • public boolean equals(Object obj); // arata daca obiectul current este egal cu cel specificat. Pentru un obiect non-null metoda are proprietatile: reflexivitate, simetrie, tranzitivitate, consistenta si non-egalitate cu null. Implementarea implicita pentru Object: intoarce true daca obiectul current este acelasi cu obj. • protected void finalize() throws Throwable; // metoda invocata de colectorul de reziduuri la disponibilizarea obiectului • public final ClassgetClass(); // furnizeaza instanta de tip Class asociata obiectului curent • public final void notify() ; // scoate din starea de asteptare un fir introdus in asteptare prin obiectul monitor curent (programare concurenta) • public final void notifyAll() ; // idem pentru toate firele • public final void wait() throws InterruptedException ; // trecere in stare de asteptare a firului curent. Metoda este invocata intr-un context concurent • public final void wait(long timeout) throws InterruptedException ; //idem dar se specifica o cuanta de timp exprimata ia milisecunde pentru starea de asteptare • public final void wait(long timeout, int nanos) throws InterruptedException; //idem

  3. public StringtoString() ; // descriere de tip string a obiectului curent Descrierea implicita este: getClass().getName() + '@' + Integer.toHexString(hashCode()) • public int hashCode() ; // Intoarce un cod hash asociat obiectului, cod care sa poata fi utilizat in tabele de dispersie. Regulile de generare a codului hash sunt: • codul unui obiect nu se schimba pe parcursul unei executii • doua obiecte egale in sensul metodei equals, au coduri egale • doua obiecte inegale conform equals nu trebuie sa aiba neaparat coduri distincte Pentru a respecta aceste regului este necesara suprascrierea metodei hashCode atunci cand se suprascrie metoda equals.

  4. Tratarea exceptiilor Erorile se impart in doua tipuri: checked si unchecked dupa cum tratarea lor este obligatorie sau nu (adica trebuie mentionate in clauzele throws ale metodelor/constructorilor si trecute prin blocul try-catch). Ierarhia: Throwable - Superclasa tuturor claselor de erori Error - Erori grave de tip unchecked cauzate de regula de mediu Exception - Exceptii corespunzand unor erori obisnuite de tip checked mai putin cele de tip RuntimeException care sunt de tip unchecked si aruncate de JVM Metode ale clasei Throwable: public StringgetMessage() ; // intoarce mesajul de tip String asociat erorii public StackTraceElement[] getStackTrace(); // intoarce elementele din stiva de executie reprezentand metode aflate in executie la momentul aruncarii exceptiei public StringtoString() ; // intoarce mesajul de eroare si numele clasei public ThrowablegetCause(); // intoarce cauza care a generat eroarea atunci cand eroarea a fost provocata de alta. Instantierea obiectului Throwable trebuie sa se fi facut printr-un constructor care sa primeasca si referinta la eroarea cauza.

  5. try{ // secventa } catch(ClasaExceptii1 e1){secventa1} ... catch(ClasaExceptiiN eN){secventaN} finally{secventaFinal}

  6. Clonarea obiectelor protected Objectclone() throws CloneNotSupportedException public Object clone(){ try { return super.clone(); } catch(CloneNotSupportedException e){ System.out.println("Eroare la clonare!"+e); return this; } }

  7. Java Native Interface Este o interfata Java pentru cod nativ. Avantaje: reutilizare de cod, performante imbunatatite ca timp de executie. Este dezvoltata pentru utilizare cod C++ si C. Etapele construirii unei aplicatii JNI: 1. Scrierea clasei Java care utilizeaza metode native 2. Construirea fisierului header C++ sau C in care sunt descrise functiile prototip corespunzatoare metodelor native. Se foloseste utilitarul javah: javah numeFisierClass Functia prototip va fi: JNIEXPORT tip JNICALL Java_numeClasa_metoda(JNIEnv *env, jobject obj, listaParametrii); unde: tip - tipul functiei; numeClasa - este numele calificat al clasei; metoda - numele metodei; listaParametrii - lista parametriilor metodei native

  8. env - referinta la mediul JNI prin care se asigura accesul la functiile JNI obj - referinta la obiectul Java JNIEXPORT, JNICALL - macrouri utilizate pentru conformitatea codului C++ (conventii de apel, parametrizari pentru compilarea si linkedidarea codului C++) 3. Implementarea functiilor C++/C si construirea bibliotecii cu incarcare dinamica dll. #include <jni.h> #include "numeFisierPrototip.h" JNIEXPORT tip JNICALL Java_numeClasa_metoda(JNIEnv *env, jobject obj, listaParametrii) { .... [return;] } 4. Incarcarea bibliotecii dinamice in aplicatia Java si rularea aplicatiei. System.loadLibrary(numeDll)

  9. Tipuri de date si maparea tipurilor

  10. Identificatori de tipuri

  11. Identificatorii de simboluri

  12. Accesarea campurilor clasei in functiile C++ Accesarea campurilor si metodelor clasei se face prin mediul JNI. Accesarea campurilor presupune: - Obtinere referinta la clasa: jclass thisClass = env->GetObjectClass(obj); - Obtinerea identificatorului de camp: jfieldID fidField = env->GetFieldID(thisClass, "numeCamp", "IdentificatorDeTip"); - Obtinerea valorii campului: tipnume = env->GetTipField(obj, fidField);

  13. Accesarea metodelor clasei in functiile C++ Accesarea metodelor presupune: - Obtinere referinta la clasa: jclass thisClass = env->GetObjectClass(obj); - Obtinerea identificatorului de metoda: jmethodID myMethod = env->GetMethodID(thisClass, "numeMetoda", "IdentificatorDeMetoda"); - Invocarea metodei: env->CallTipMethod(obj, mmyMethod);

  14. Clase generice - Generics • Java Generics este o tehnologie Java prin care a fostintrodus in Java (odata cu distributia 1.5) conceptul de clasegenerice • Conceptulesteasemănător celui de "template" din C++ • Diferentafundamentala: • C++ : expandare la compilarepentrufiecare tip • Java: “eradicarea” tipului la compilare – castulcatretipul de baza, faraexpandareacodului Declaratia de clasa: [public] class NumeClasa<T1, T2, ..., TN> { ... } Metodegenerice: [public/protected/private] [static] <T1, T2, ..., TN> tipnumeMetoda(listaParametrii) [throws E1,...,E2] {...}

  15. Colectii proprii public interface Iterable<T> • Iterator<T> iterator() public interface Iterator<E> • boolean hasNext() • E next() • void remove()

  16. Operatorul wildcard Este utilizat pentru a flexibiliza utilizarea listelor generice, astfel: • <?> • semnifica tip necunoscut • este utilizat cand nu se cunoaste sau nu are importanță tipul de bază • <? extends Tip> • ține locul unui tip de bază (upper-bounded wildcard) • <? super Tip> • ține locul unui tip derivat (Lower-bounded wildcard)

More Related