Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


CASTINGUL SI CONVERSIA OBIECTELOR SI TIPURILOR PRIMITIVE

java



+ Font mai mare | - Font mai mic



CASTINGUL SI CONVERSIA OBIECTELOR SI TIPURILOR PRIMITIVE

Atunci cand transmitem argumente metodelor sau cand folosim variabile in expresii, trebuie sa folosim variabile cu tipuri de date corespunzatoare.Daca metoda creata necesita un int, compilatorul Java raspunde cu eroare daca incercam sa transmitem o valoare float.La fel, daca incercam sa setam o variabila cu valoarea alteia, ele trebuie sa fie de acelasi tip.

Uneori obtinem intr-un program Java o valoare care nu este de tipul necesar.Poate fi dintr-o alta clasa sau dintr-un tip de data necorespunzator - cum ar fi float cand avem nevoie de un int.



Pentru a inlatura acest neajuns trebuie sa folosim casting-ul.

Casting-ul reprezinta procesul de generare a unei valori de un alt tip decat sursa.

Atunci cand efectuam un cast valoarea variabilei nu se schimba ; de fapt se creaza o noua variabila de tipul dorit.

Chiar daca conceptul de casting este relativ simplu, folosirea sa este destul de complicata de faptul ca Java poseda atat tipuri primitive (int, float, boolean, etc) cat si tipuri obiect (String, ZipFile, Point, etc.).Exista trei tipuri de cast si de conversie despre care vom vorbi:

-         castingul intre tipuri primitive (int - float, float-double, etc.)

-         castingul intre o instanta a unei clase si o instanta a altei clase

-         conversia tipurilor primitive in obiecte si apoi extragerea valorilor primitive din aceste obiecte.

CASTINGUL INTRE TIPURI PRIMITIVE

Cea mai des intalnita situatie este in cazul tipurilor numerice.Exista un tip de date primitiv care nu poate fi niciodata folosit pentru cast ; variabilele booleene sunt fie true fie false si nu pot fi folosite intr-o operatie de cast.

In multe operatii de cast intre tipuri primitive destinatia poate stoca valori mai mari decat sursa, astfel incat valoarea sa fie convertita cu usurinta.Un exemplu ar fi castingul unui byte la int.Deoarece byte-ul stocheaza informatii intre -128 si 127 iar un int informatii intre -2.1 milioane si 2.1 milioane este loc mai mult decat suficient pentru a face cast de la byte la int.

De multe ori putem folosi automat un byte sau un char drept un int ; putem folosi un int drept un long, un int drept un float sau orice drept un double.In majoritatea cazurilor, deoarece tipul de dimensiuni mai mari ofera mai multa precizie decat cel cu dimensiuni mai mici, nu apare nici o pierdere de informatie.Exceptia apare atunci cand facem un cast de la intregi la valori in virgula mobila - castingul unui int sau al unui long intr-un float sau al unui long intr-un double poate duce la pierderi ale preciziei.

Trebuie sa folosim un cast explicit pentru a converti o valoare mai mare intr-una mai mica, deoarece conversia valorii poate duce la o pierdere de precizie.Cast-urile explicite au sintaza:

(numetip)valoare

numetip este numele tipului de data catre care facem conversia ; valoare reprezinta o expresie care are ca rezultat valoarea tipului sursa.

Deoarece precedenta castingului este mai mare decat a operatiilor aritmetice trebuie sa folosim paranteze - altfel putand apare probleme.

CASTINGUL OBIECTELOR

Instantelor claselor li se poate aplica operatia de cast catre instante ale altor clase, cu o restrictie ; clasele sursa si destinatie trebuie sa fie inrudite prin mostenire.O clasa trebuie sa fie subclasa a alteia.

Asemanator conversiei unei valori primitive catre un tip de dimensiuni mai mari, unele obiecte nu au nevoie de cast explicit.In particular, deoarece subclasele contin toate informatiile superclasei lor putem folosi o instanta a unei subclase oriunde se asteapta folosirea unei superclase.

De exemplu, sa luam o metoda care preia doua argumente:unul de tip Object si altul de tip Window.Putem transmite o instanta a oricarei clase drept argument Object (pentru ca toate clasele Java sunt subclase ale clasei Object) ; pentru argumentul Window putem transmite si instante ale subclaselor sale (cum ar fi Dialog, FileDialog sau Frame).

Reciproca este si ea adevarata ; putem folosi o superclasa acolo unde se asteapta o subclasa.Exista totusi in acest caz o problema - deoarece subclasele au un comportament mai complex decat suprclasele lor exista o pierdere de precizie.Acele obiecte superclasa s-ar putea sa nu posede intregul comportament necesar pentru a putea actiona in locul obiectului subclasa.De exemplu, daca avem o operatie care apeleaza metode din obiectele apartinand clasei Integer, folosirea unui obiect din clasa Number (generica) nu va dispune de multe metode dintre cele definite in clasa Integer.

Pentru a folosi obiecte superclasa acolo unde se asteapta obiecte subclasa, trebuie sa facem cast explicit.Nu vom pierde nici o informatie prin cast, dar vom castiga toate metodele si variabilele pe care le defineste subclasa.Pentru a face cast pentru un obiect dintr-o alta clasa folosim aceeasi operatie ca si in cazul tipurilor primitive:

(numeclasa)obiect

numeclasa este numele clasei destinatie, iar obiect este o referinta catre obiectul sursa.Retinem ca operatia de cast creaza o referinta catre vechiul obiect, de tip numeclasa ; vechiul obiect continua sa existe ca si inainte.

In exemplul de mai jos putem vedea un cast de la o instanta a clasei VicePresedinte catre o instanta a clasei Angajat ; VicePresedinte este o subclasa a clasei Angajat, cu informatii suplimentare care definesc faptul ca VicePresedinte are anumite drepturi suplimentare:

Angajat ang=new Angajat();

VicePresedinte vip=new VicePresedinte();

ang=vip; //nu este nevoie de cast de jos in sus

vip=(VicePresedinte)ang; // e nevoie de cast explicit

In afara de castingul obiectelor catre clase putem de asemenea face castingul obiectelor catre interfete - insa numai daca clasa obiectului respectiv sau una dintre superclasele sale implementeaza de fapt interfata.Castingul unui obiect catre o interfata inseamna ca putem apela una dintre metodele interfetei, chiar daca clasa obiectului nu implementeaza de fapt interfata.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1059
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved