Meniu Referate
Romana
Romana1
Romana2
Istorie
Istorie1
Geografie
Geografie1
Diverse
Drept
Economie
Filozofie
Fizica
Informatica
Biologie
Chimie
Italiana
Spaniola
Germana
Franceza
Engleza
Marketing
Matematica
Medicina
Psihologie
Astronomie
Stiinte Politice
Proiecte

C-Java, Gestionarea automata a memoriei, Clase, Functii membre, Mostenirea in Java, Constante, Fisiere

...cu un tip de data int. El nu garanteaza insa dimensiunea fiecarui tip. Java realizeaza acest lucru, fiecare tip avand o dimensiune fixa.Deoarece cele mai multe masini ruleaza pe 32 de biti, dimensiunile pentru tipurile primitive de date au fost gandite sa fie optimizate pentru 32 de biti. Astfel, o data Java de tip int ocupa 32 de biti fata de16 sau 32 de biti, in CC , iar o data de tip long va ocupa 64 de biti fata de 32 sau 64 de biti, in CC .O alta diferenta este ca toate tipurile primare Java sunt cu semn. Astfel, declaratiile unsigned din C nu sunt permise in Java.1.2. ConversiiSi in Java si in C se poate face conversie intre un tip de data si un altul. Dar in Java nu exista conversii implicite. Sa luam urmatoarea secventa de program scrisa in Clong LongNb 32768int IntNbIntNb LongNbCompilatorul CC va face o conversie implicita cast din long in int. Pe o platforma de 16 biti unde long are o lungime de 32 de biti si int are o lungime de 16 biti , in urma conversiei, variabila IntNb va avea valoarea 0. Deci va avea loc o pierdere de precizie, fara ca programatorul sa fie avizat.Java inlatura riscul unor potentiale erori in programare relative la conversii prin faptul ca nu realizeaza conversii automate. Astfel programatorul este nevoit sa faca o conversie explicita de exemplu IntNb intLongNb.1.3. OperatoriSetul de operatori din Java este aproape identic cu cel din CC. Acestia sunt ! negatie, si conditional, sau conditional, conditie. O diferenta este ca in Java acestia opereaza cu valori booleene. Astfel secventa Cint x 4int y 5if x y Isecventa de codS va fi ilegala in Java, pentru ca, asa cum spuneam mai sus, nu se face conversie automata. Conditia va trebui deci scrisa explicit if x!0 y!0.O alta diferenta privind operatorii, si care are o importanta deosebita, este ca in Java operatorii nu pot fi supraincarcati, asa cum pot fi in C. Folosirea acestei trasaturi in C a dus la crearea multor erori. De aceea dezvoltatorii Java au hotarat sa nu pastreze aceasta caracteristica.2. PointeriPointerii reprezinta in C un element care confera programatorului multa flexibilitate. Cu toate acestea, folosirea pointerilor este o importanta sursa de erori. Java nu permite programatorului sa foloseasca pointeri de nici un fel. Cum se face atunci transmiterea variabilelor In C programatorul are libertatea sa transmita variabilele cum considera ca este mai bine folosind operatorii , si -. In Java insa nu exista acesti operatori, dar exista urmatoarea regula tipurile de date primare sunt transmise prin valoare prin copierea efectiva, iar obiectele si masivele sunt transmise prin referinta prin copierea adresei.Sa luam urmatorul exemplu vrem sa cream o functie care sa returneze media unui studentvoid mediaStudent int noteis, double mediaIint suma0forint i0i10isumanoteiismediasuma10SNu putem returna rezultatul ca parametru si anume in variabila media, pentru ca acesta este transmis prin valoare si modificarea sa in interiorul functiei nu are efect asupra variabilei media. In C acest parametru trebuia transmis prin adresa int media sau int media. Prin urmare trebuie cautata o solutie de transmitere a parametrului prin adresa. Acest lucru se poate face prin crearea unei clase care sa contina variabila media. Un obiect al acestei noi clase va fi transmis ca parametru prin adresapublic class definesteStudent Idouble mediaSiar functia de mai sus va avea formavoid mediaStudent int noteis, definesteStudent studIint suma0forint i0i10isumanoteiisstud.mediasuma10 SBineinteles ca returnarea mediei se putea face in cazul de mai sus si ca retur al functieidouble mediaStudent int noteis I...Sdar in cazul in care se doreste returnarea mai multor valori primare, crearea unei clase care sa le contina ramane singura solutie valabila.2.1. Copierea obiectelorDeoarece fiecare obiect este de fapt o referinta, asignarea unui obiect altuia nu copiaza decat adresa catre care acesta refera. Iata un exempluButton butonOK ne ButtonOK Button butonCancel ne ButtonCancelbutonOK butonCancel Obiectul butonOK va fi o referinta catre obiectul referit de butonCancel, iar obiectul initial care era alocat in butonOK se pierde.Pentru a copia efectiv datele dintr-un obiect in altul se foloseste functia clone, disponibila in clasele care implementeaza interfata Cloneable cele mai multe dintre clasele standardbutonOKbutonCancel.clone Acelasi lucru este valabil si pentru masive. Pentru a copia efectiv valorile unui vector de exemplu in alt vector, fie trebuie copiata fiecare valoare in parte, fie trebuie folosita metoda System.arraycopy.2.2. Verificarea egalitatii obiectelorO alta implicare directa a faptului ca obiectele sunt transmise prin referinta este faptul ca operatorul verifica daca doua variabile refera catre acelasi obiect, si nu daca cele doua variabile contin aceleasi valori. Un numar de clase defineste metoda equals in acest scop.ExempluString sir1abcString sir2123ifsir1.equalssir2I...S 2.3. nullValoarea implicita pentru variabilele de tip referinta obiecte si masive este null. Acesta este un cuvant rezervat care inseamna ca aceasta variabila nu refera nici un obiect sau masiv. In Java null este un cuvant rezervat, spre deosebire de NULL din C, care este doar o constanta predefinita cu 0.Distinctia dintre transmiterea prin valoare si transmiterea prin referinta in Java este foarte importanta. Urmatoarele elemente sunt foarte importante pentru intelegerea acestei diferentieri- toate obiectele si masivele arrays sunt transmise prin referinta- toate tipurile primare de date sunt transmise prin valoare- operatorii si considera referinte la obiecte. Functiile clone si equals trebuiesc folosite pentru copierea efectiva sau testarea obiectelor respective- referirea si dereferirea obiectelor si masivelor sunt realizate automat de Java- o referinta nu poate fi convertita intr-un tip primar de data si nici invers- nu exista pointer in Java- null este o valoare speciala care indica absenta unei referinte.Prin eliminarea pointerilor, limbajul Java a fost mult simplificat. Un beneficiu al eliminarii lor este si asigurarea unei securitati mai bune a programelor o caracteristica definitorie a limbajului Java . Astfel, prin eliminarea abilitatii programatorului de a folosi adrese direct din memoria sistemului, limbajul previne intr-o oarecare masura posibilitatea de a putea fi folosit deliberat in scopuri periculoase de gen virusi, buffer overflo, stack overflo. 3. Gestionarea automata a memoriei Aceasta este una dintre trasaturile care face limbajul Java renumit pentru usurinta programarii. Desi operatorul ne aloca memorie pentru un obiect, nu exista un operator corespondent care sa dezaloce memoria alocata anterior prin ne. Colectorul de gunoaie elibereaza un spatiu de memorie imediat ce nu mai exista o referinta catre acesta.Exemplu sa presupunem ca am folosit o culoare pentru desenarea unui backgroundColor background ne Color250,0,0In memorie se aloca un spatiu pentru acest obiect, care are adresa backg...
Download