Sunteți pe pagina 1din 15

10G JAVA DE LA 0 LA EXPERT

expresiei este de acelaşi tip primitiv. Daca tipul expresiei este un tip referință, atunci instrucțiuni (sau expresii) ca parte a structurii lor. Instrucțiunile Java sunt: instruc¡iunea
clasa și valoarea obiectului referențiat nu se cunosc la momentul compilării, ci al vida, etichetele, expresiile, i f, s w i t ch , wh i l e, do, fo r, b re a k, con t i nu e, re t a ria,

execuției. Pentru a da definiția formală a expresiei, mai întâi definim noțiunea de t.h roz, synch r o n i z ed, rt y. Spre deoseb ire de alte lim6aje de pi‘ogranaare, în Java nu

cx presie primară. Expresii primare sunt literalii, accesul la campuri și tablouri, apeluri dc există instrucțiunea qot o. Cele 18 exeiiiple itle acestei secțiuni pun în evidență aceste
metode, expresii parantetizate. Un operator cu n argumente este o funcție cu ri argumente instrucțiuni.
care se mai numesc și operanzi. Utilizand o manieră recursivă de descriere, o ex presie
com pHSă (sau simplu, cx presie) poate fi expresie primară, o expresie care foloseşte
operatori unari, binari și ternari sau o expresie de conversie. Prin cele 31 de exemple, 2.11. Test grilă
secțiunea 5 prezintă expresiile și operatorii referitori la tipurile primitive de date, cele de
tip referință urmind a fi prezentare în Capitolul 3. Întrebarea 2.11.1. fie urmatoarea secven¡ă de cod Java:
Secțiunea 6 prezintă no¡iunea de variabilâ în Java. Aceasta este o locație de 1) f1oat a = 2;
memorie care are un tip asociat (tip verificat la compilare). O variabilă conține o valoare 2) float b = 1.3;
care este compatibila cu tipul variabilei. Valoarea unei variabile se poate schimba in Care afirmație este adevărată?
urma unei asignări sau a operatorilor ++ ți - -. Compatibilitatea valorilor implicite și a) Instrucțiunile 1 Ji 2 sunt corecte.
toate asignările unei variabile sunt verificate in timpul compilării, cu exceptia tablou b) Instrucțiunea 1 este corectă, instrucyiunea 2 este incorectă.
lui, cand verificarea se realizează în timpul execuției programului Java. Exemplul 2.6.3 c) Instrucțiunile l și 2 sunt incorecte.
pune in evidență o mare parte de tipuri de variabile, cele de tip instanță și de tip tablou
urmind a fi prezentate în Capitolul 3.
Sec¡iunea 7 se referă la decla rații și ini țializâri. Fiecare instrucțiune de declarare a
unei variabile locale este conținută intr-un bloc. Instrucțiunile de declarare a variabi-
lelor locale pot fi intercalate printre alte instrucțiuni ale blocului. O declarare de
variabilă locală poate apărea și într-o instrucțiune for, caz în care se execută la fel ca o
instrucțiune de declarare a unei variabile locale. O instrucțiune de declarare a unei
variabile locale este o instrucțiune executabilă. La execuție, declaratorii sunt procesați
de la stinga la dreapta. Dacă un declarator are o expresie de inițializare, atunci expresia
este evaluată și valoarea se asignează variabilei. Dacă declaratorul nu are o expresie de
inițializare, atunci compilatorulJava verifică dacă fiecare referință către variabilă este
precedată de execiiția unei asigniiri a variabilei. Dacă nu este așa, atunci se semnalează
o eroare la' compilare. Fiecare inițializare (cu exceptia primei) este executată dacă Intrebarea 2.11.2. Fie urmatoarea declarație Java:
precedenta expresie de inițializare se evaluează normal. Execuția unei declarații a unei public private int h;
variabile locale se termină normal dacă evaluarea ultimei expresii de inițializare se face
normal. Evident, dacă declarația unei variabile locale nu conține expresii de inițializare, Care afirmație este adevărată?
atunci execuția acesteia se termină întotdeauna normal. a) Variabila h va fi accesată în mod publ i c, deoarece se ia în considerare primul
Secțiunea 8 prezintă noțiunea de conversie. Aceasta are rolul de a modifica tipul unei modificator de acces.
expresii intr-un anume context. In fiecare context, sunt permise doar cateva conversii b) Variabila h va fi accesată în mod pr i va t e, deoarece se ia in considerare ultimul
specifice: conversii identice, conversii primitive implicite (,de la mic la mare", eng. modificator de acces.
midening conversions}, conversii primitive esplicite (,de la mare la mic”, eng. narroming c) Va fi eroare la compilare, deoarece o variabilă nu poate fi în acelaşi timp
conversions), conversii de {â implicite, conversii de referință accesată pub1 i c și pr i v at.e.
exp/icite, conx•ersii la 5 tr 1 nq. Cele 11 exemple prezentate În secțiunea 8 se referă la
conversiile identice, cele primitive (implicite și explicite) și conversii la S fi r i n g. In
Capitolul 4 vor fi prezentate conversiile de referin ță.
Secțiunea 9 prezintă noțiunea de sttucturi dc con/ro/ (in strucțiuni). Acestea au rolul
de a controla execuția unui program Java prin efectul lor și nu pentru faptul că întorc
valori (cum era cazul expresiilor, Secțiunea 2.5). Anumite instrucțiuni conțin alte
Intrebarea 2.11.3. Fie următorul subprogram Java: ‘
int x = 0; ,
if (Double.isInfinite(2 / x)) System.out.println("infinit");
else
System.out.print1n("2 / 0");
Ce puteți spune despre acesta?
a) Eroare la compilare din cauza împăryirii la zero.
b) Eroare la execuție din cauza Împărțirii la zero (se aruncă o excepție Ar i t hme t ie
Exception).
c) Programul este corect și va afișa: i n f i n i U.
d) Programul este corect și va afișa: N aN .

Întrebarea 2.11.4. La ce valoare se a evalua următoarea ex prest e:


2 f < 3d?+ 0 . 0 : 5< 7 ? 0 . 3 : 21
108 JAYA DE LA 0 LA EXP EST

a) Expresia conține erori sintactice.


b) Unele conversii trebuie realizare explicit.
c) Se va evalua la 0 . 0.
d) Se va evalua la 0 . 3.

Intrebarea 2.11.7. Fie următorul program Java:


public class Asignare (
publiC static void main(String args{]) {
Intrebarea 2.11.5. Fie următorul subprogram Java: iot a = 3;
String sl = "anul" + 200 + 2, s2 = 200 + 2 + "anul"; int b = (a = 2) * a;
System.out.println(”s1 = " + Sl + ", s2 = " + s2); int c = b * (b = 5);
System.out.println("a - " • a + ", b = ” b * ”, C = “ C):
Ce va afi¡a la execuția sa?
a) s 1 = anu12 02, s2 = 2 0 2anu1
b) s 1 - anul 2002, s 2 = 20 2anu l
c) sl - anul2 02, s 2 = 20 0 2anu l
d) sl - ann12 002, s2 = 2 0 02ann l
e) Eroare la execuție: este necesară o conversie explicită!

Intrebarea 2. t1.6. Fie următorul subprogram Java:


int as = 3, bs = 2, cS = 4;
System.out.print(((as < bs++) & (CS*+ < bs)) + ” "):
System.out.println(as + " " + bs + " " * CS);
System.out.print(((as < bs*+) && (cs++ < bs+*)) + " "):
System.out.print1n(as + " " t bS + " " CS);
Ce se poate spune despre acesta?
a) Eroare la compilare: nu se poate aduna o valoare booleană cu uri S C r i nq;
b) Subprogramul se compilează }i la execu¡ie afi}ează:
false 3 3 5
false 3 4 4
) Subpro am d secompieazaș iaexecuiefișeu a:
false 3 3 5 '
false 3 4 5
d) Subprogramul se compilează Ji la execuție afi}ează:
J°a1s e 3 3 5
false 3 5 6
1G9 Intrebarea 11. Fie următoriil Jirogram Java:
public class Apel (
Ce va afișa acesta la execu\ ie? static int f(short a) ( return a * 2; )
a = 2, b = 4, c - public static void main(String ] args) (
20 b) a - 2, b - 5, c System.out.println(f(3));
= 20 ’
c) a - 2, b - 5, c - 25
d) a = 3, b = 6, c = 30
Ce se poate spune despre acesta?
a) Eroare la compilare: nu există o definiție a metodei f ( ) cu parametrul i n t.

I ntrebarea 2. t1.8. Fie urm ătorul subprogram Java:


System.out.println((l<2)°5:(3‹4)) + ” ");
Ce se poate spune despre acesta?
a) Eroare la compilare: nu se poate converti o valoare booleană la uri i nC.
b) Subprogramul se compilează și la execuție afi}ează 5.
c) Siibprogramul se compilează și la execuție afișează 37.
d) Subprogramul se compilează și la execuție afișează C r ue.

Intrebarea 2.1t.9. Fie următorul subprogram Java:


double d =
2.95; int i =
4;
' System.out.println( +d>i°d:i);
Ce se poate spune despre acesta?
a) Eroare la compilare: nu putem converti o valoare do ub1e la i n t.
b) Subprogramul se compileaza 5i la execuție afișeaz/a 3 . 9 5.

d) Subprogramul se compilează și la execuție afișează 4 . O.

Întrebarea 2.11.10. Fie următorul apel Java:

l System.out.println(1 < 2 < 31 ;


Ce se poate spune despre acesta?
a) Eroare la compilare.
b) Eroare la execuție.
c) Apelul se compilează și la execuție afișează t rue.
d) Apelul se compilează și la execu¡ie afișează f al se.
110 JAVA DE LA 0 LA EXPERT

b) Eroare la compilare: metoda f ( ) nu întoarce o valoare de tip s ho rfi. System.out.println((int) (char)min + ” " + (int)(char)rax);
c) Programul se compilează și la execuție afișează 6.

Întrebarea 2.1t.12. Fie următorul subprogram Java: Ce se poate spune despre acesta?
byte b = -7 >>> 1; a) Eroare la compilare: conversii imposibile.

System.out.println(b); a) Eroare la compilare: variabila x este declarată de două ori.


Ce se poate spune despre acesta? b) Programul se compilează și la execuție afișează x = 6, x = 3.
c) Programul se compilează și la execuție afișează x = 6, x = 9.
a) Eroare la compilare.
b) Eroare la execuție. d) Programul se compilează și la execuție afișează x = 6, x = 1 8.
c) Subprogramul se compilează și la execuție afișează — 3.
I ntrebarea 2.11.15. Fie urmatorul program Java:
d) Subprogramul se compilează și la execuție afișează - 4.
public class Program
(

public static void


iain(Stringl] args) ( float
min =
Intrebarea 2.11.13. Fie următorul subprogram Java: Float.1EGATIVE_INFINITY;
float max - Float.POSITIVE
byte b = 7 >>> 1; INFINITY;
System.out.print1n(b);
Ce se poate spune despre acesta?
a) Eroare la compilare.
b) Eroare la execuție.
c) Subprogramul se compilează și la execuție afișează 3.
d) Subprogramul se compilează și la execuție afișează - 3.

Întrei›area 2. 11. 14. 1- ie următorui program java:


public class Program (
static int x - 6;
public static void main(String tl args) (
System.out.print("x = " + x);
int x = (x = 3) ’ x;
System.out.print(", x = " + x);
)

Ce se poate spune despre acesta?


b) Programul se compilează și la execuție afișează 0 2 5 5. public static void main(String{] args) (
c) Programul se compilează și la execuție afișează 0 6 b 535. for (int i = 0; i < 6; i++)
d) Programul se compilează ¡i la execuție afișează 0 — 1. f(i);
)

Ce se poate spune despre acesta?


a) Eroare la compilare.
b) Programul se coinpileaza și la execuție afișează i 1 2 3 2 3 4 5 4 5.
c) Programul se compilează 5i la execu¡ie afișează i 1 2 3 4 5.
d) Programul se compilează ¡i la execu¡ie afișează i 1 2 3 2 3 4 b 4 5 i .

Întrebarea 2.11.16. Fie următorul subprogram Java: i n t a = 3 i


if (a++ < 4) if (++a < 4)
System.out.print1n(a); else
System.out.println(a),
Ce se poate spune despre acesta?
a) Eroare la compilare.
b) Subprogramul se compileaz.ă și la execupe afiyeazâ .
c) Subprogramul se compilează }i la execuție afișeaza 5.
d) Subprogramul se compileaz.ă }i la execu¡ie nu afi ează nimic.

Întrebarea 2.11.17. Fie următorul program Java:


public class Program ( static void
f(int k) (
switch (k) {
default: System.out.print("i "); break, case 1:
System.out.print("l "); break:
case 2: case 3: System.out.print("23 "); break; case 4: case
5: System.out.print(”45 ");
FUNDANtENTELL LI h40AJ ULUI JAVA
112 JAVA DE LA 0 LA EXI°E RT

Întrebarea 2.11.18. Fie următorul subprogram Java:


int i = 1, suma = 0;
2.12. Exerciții propuse spre iniplementare
for ( ; ; ) (
, Exercițiul 2.12.1. Scrieți un program yava care să converteasca mile terestre în km (și
suma *= i+*;
if (i > 5) break; invers). Formula de transformare este 1mil.a = 1.6 km.

Exercițiul 2.12.2. Scrieți uri program Java care să împaclieteze o dată calendaristică
System.out.print(sumal;
într-o variabilă de tip i n t. Furnizați și o funcție de despachetare. De exemplu, 20
Ce se poate spune despre acesta? februarie 2002 se reprezintă ca un intreg astfel: primii 5 biți rezervați pentru zi,
a) Eroare la compilare: lipsesc părțile componente ale lui fo r. următorii 4 bi¡i pentru lună }i ultimii pentru an.
b) Subprogramul se compilează }i la execuție a(ișează 0.
c) Subprogramul se compilează și la execuție afișează 10. Exereițiul 2.12.3. Scrieți o clasă Java care generează numere pseudoaleatoare din
d) Subprogramul se compilează și la execuție afișează 1 5. domeniul 0. 6 5 535. Presupunand că avem o valoare inițială (sâmanță, eng. Jeed) z „
pentru generarea următorului număr aleator din domeniul 0. 6 5535 utilizăm formula
r„„ - ( ( r„„ * 2 517 3 ) + 13 8 4 9 ) 6 5536.

Exercițiul 2. t2.4. Scrieți un program Java care primeşte la intrare un număr de


secunde i întoarce numărul maxim de ore, de minute, de secunde care este echi merit
ca timp cu numărul inițial de secunde. De exemplu, 7354 secunde este echivalent cu 2
ore, 3 minute și 4 secunde.

Exercițiul 2. t2.5. Folosind o buclă wh i 1e și fără a folosi tablouri, scrieyi uri program
ja“Ji Gare Ca!Cii!Oaza teî riieîiul al n-Îea Sin șirui i’oi Fikoniiacci. Șirui iui FiSonnacci este
Intrebarea 2.11.19. Fie următorul program Java: dat dc recurența liniară de ordin 2:
public class Program ( a, = a = l;
public static void main(String argsl]) (
int v() - (2, 4, -2, 8, -2}, i 0, suma = 0;
Generalizare la recurențe liniare de ordin k, k 4 1, cu coeficienyi ărbitrari.
for (i = 0; i < 10; ++L) (
if (vfil < 0) continue;
suma += v[il;

8vstem.out.println("5Uma = " + sumal:

Ce se poate spune despre acesta?


a) Eroare la cortipilare.
b) Programul se compilează și la execuție afișează 0.

c) Programul se compilează la execuție afișează 14.


d) Programul se cornpilează la execuție afișează - 4.
Exercițiul 2. t2.6. ’Scrieți un calculeze mare divizor comun dintre a și b (notat cu (a, b)), unde a, b sunt numere întregi, folosind
program Java care să cel mai algoritmul
Intrebarea 2.11.20. Fie următorul program yava: lui Euclid. De exemplu, (12, 8) - 4, deoarece se pot aplica Împărțiri succesive astfel: 12
- 8 * 1 + 4, 8 = 4 * 2 + 0.
public class Subiecte (
public static void main(String args[]) ( Exercițiul 2.12.Z. Să se scrie uri program Java care să calculeze n! (n! = 1 * 2 * .. * n),
float f = 4.50; unde 0 < n < 13 este un număr natural. Determinați n! }i pentru n ? 13.
System.out.println(f);
Exercițiul 2. t2.8. Folosind structura fo r, scrieți un program Java care calculează
următoarele formula logice (sub forma unei tabele de adevăr): b1 | b3 | b5 și b1& b2
b4 & b5, unde b1, b2, b3, b4, b5 sunt variabile logice (cu valori dat s e, t rc e).
Ce se poate spune despre acesta?
a) Eroare la compilare: nu se poate converti implicit 4 . 5 0 iz float. Exercițiul 2.12.9. Să se scrie o metodă Java care să returneze minimul a trei numere de
b) Programul se compilează și la execuție afișează 4 . 5.
acelaşi tip primitiv (folosind operatorul condițional ? : sau insti-ucțiunca i). Folosind
c) Programul se coinpilează și la execuție afișează 4 . 50.
această metodă, scriem o metodă Java care să rerurneze nlinimul a patru numere.
d) Programul se compilează și la execuție afișează 4 . 0 0 0 0 0 0.

4.5
FUNDAMENTELE LIMB AJULUI JAVA 115
114 JA\'A DE LA 0 LA EXPE RT

Exercițiul 2.12.10. Fie func¡ia lui Co//otz: f(n) = n/2 dacă n este par, și f(n) - 3 " n Generalizare: Scrieți toate combinațiile posibile de adunat e a două numere priine
+ 1 dacă n este impar. S.a se scrie un program Java care determină k natural ininim astfel egale cu un număr dat.
incat f (f ( ... f(n)...)) - 1, unde parantezele (,) apar de k ori. De exemplu, pentru n = 6
Proiectul 2.13.3. tjocul „hârtie, pumn, foarfece") Presupunem că avem doi jucători care
avem: f(6) = 3, f(3) - 10, f(10) - 5, f(5) - 16, f(16) - 8, f(8) - 4, f(4) - 2, f(2)
folosesc mana dreaptă pentru reprezentarea a trei obiecte: hârtie înseamnă palma
= 1, deci k natural minim este 8.
întinsă, pumn înseamnă mana stransă sub formă de pumn }i %nr/ece "înseamnă două
Exercițiul 2.12.11. Scrieți un program Java care calculează suma divizorilor naturali ai unui degete depărtate (semnul victoriei). Ei își arată simultan mina dreaptă in una din aceste
număr natural n. Un numL este perfect, dacă este egal cu suma divizorilor proprii pozitivi configurații (de mai multe ori). Dacă ei arată acelaşi lucru, este remiză (nu ciștigă
(de exemplu: 28 = 1 + 2 + 4 + Z + 14). Să se genereze primele 4 numere perfecte. nimeni). Dacă nu, se aplică una dintre următoarele trei reguli:
- Hartia acoperă pumnul (deci palma întinsă caștigă față de pumn).
Exercițiul 2.12.12. Presupunem că depunem o sumă (depozit la termen) Într-o bancă - Pumnul sparge foadecele.
care oferă o dobindă de 25 % (de exemplu) pe an. Să se calculeze suma finală dupa uri Foarfecele taie hartia.
anumit număr de ani (se va face capitalizarea contului, adică se va ține cont de Să se simuleze acest joc, făcind un număr arbitrar de evenimente și precizand
,dobanda la dobandă”). scorul final. Se cere să se joace persoană-calculator și, varianta a doua, calculator-
-calculator.
Exercițiul 2.12.13. Folosind operatori pe biți, scrieți metode Java care:
a) testează dacă uri număr de tip s h or tai n t /l onq este divizibil cu 2, 4, 8. Proiectul 2.13.4. O ruletâ este o maşină care selectează la intimplare un număr între 0
Generalizare (divizibilitate cu 2“n); și 35. Jucatorul poate paria pe un număr par/impar sau poate paria pe un nunl ar oarecare.
b) testează dacă un număr este pozitiv sau negativ; Ci}tigul unui pariu par/impar se prerniază cu 2/1 euro respectiv, cu exceptia cazurilor
c) calculează pentru un n dat, multiplii de 2, 4, ... Generalizare; în care ruleta alege 0. Dacă jucătorul ghiceşte numărul selectat de ruleta, atunci este
d) calculează pentru un n dat, [n/ *1. [n/4], ... Generalizare. plătit cu 35/1 euro. Să se simuleze acest joc, ¡tiind că jucăm pariuri de 1 euro }i avand
o sumă ini¡ială de n euro.

2. i3. lrroiecie propuse spre impiementare


Proiectul 2.13.1. (}ocu1 cap-pa jură, folosind o simulare Monte-Carlo) Presupunem că
dispunem dc o monedă ideală (nemăsluită). Doi jucători aruncă cu moneda după
următoarele reguli:
a) Se fac un număr total de' n aruncări.
b) Primul jucător aruncă moneda și celălalt spune cap sau p tyorâ.
c) Dacă acesta ghiceşte care parte a monedei va pica, atunci se inversează jucătorii.
(adică aruncă a1 doilea și primul încearcă să ghicească).
d) La sfarșit, trebuie afișat scorul (și procentul dc caștig al fiecăruia).

Proiectul 2.13.2. (Conjectura lui Goldbach} Orice număr par mai mare decit 2 se poate
scrie ca sumă a două numere prime. Scrieți uri program Java care verifica această
conjecmră pentru numere situate intre și n. De exemplu, dacă m-7 0 0 și n=110 0, atunci
trebuie afișat:
700 = 17 + 683
702 = 11 + 691
704 = 3 + 701

1098 = 5 + 1093
11 0 0 = 3 + 1 0 97
3. Clase, interfe{e
çi tablouri

3.1. Cuvinte cheie


- clase, atributo, metode, constructori, modificatori de ncces
- interfe¡e, metode abstracte, clase abstracte
t blouri
coriversii ele tipiilui referin¡a
CLASE, INTERFETE ȘI TABLOURI 1 t9
g JAVA DE LV 0 LA EXPERT

Fie clarsa Ce c:

class Cerc (
3.2. Clase // date member
In Java este obligatorie int rasa, x, y;
Clasa este entitatea de bază a unui limbaj orientul spre obiecte. // constructor fara parametri
unei instan¡e (unui
definirea a cel putin unei clase. Nu este însă obligatorie crearea Cerc()(
care se vor utiliza date i metode statice.
obiect) a acelei clase, caz în raza = l;
O declarație de clasă în limbajul Java are sintaxa generală:
x = 20;
> (extends <NumeClasa›]
y = 20;
[implemen ts
[<DeclaratiiCOEpClaSa>) // constructor cu parametri
Cerc(int r, int a, int b) {
raza = r;
unde: potG:public,abstract, fina1(celm ult o sngura x = a;
- <ModificatoriClasa› y = b;
apariție ¡i, de preferat, în această ordine)¡
- <Identificator> reprezintă numele clasei;
(denumită clasă de bază Satl SH erclasâ)i // metoda publica
- <N umeC1 as a> este numele unei alte clase public void setRaza(int r) ( raza = r

< L i s fi a1 nC= r fe t.e> este o listă de nume de interfe¡e de forma:


In-erfatal>, <NumeInterfat a2>, , <Numef nterfataN>; ) // terminarea clasei Cerc

- <De c l a rad i iCo rpC t asa> este o listă de declara¡ii de forma: Aceasta confine trei date membre de tip i mt: ra za, x §i y, doi constructori, unul
randul ei poate fi < De c 1 arat ie
• <Decia ratiiMembr uCIasa> care Îa cu parametri Ji unul fàrà parametri ;i e rr.elora puii!ica se VRa za l l .
Atribut>Sau <Dec1aratieMetoda> ;
<InitîalîzatOrS tatrC>; 3.2.1. Domeniul de vizibilitate al numelui unei clase

<Declar atiiConstruc tor>.
• atunci numele complet
Daca o clasă este declarată într-un pachet numit Pa c he t, , Domeniul de vizibilitate al numelui unei clase este intreg pachetul din care aceasta
consulta Exemplul
(calificaJ) a1 clasei este Pa chet . ‹IdentifiCator> (se poae face pane.
2.2.1). In caz contrar› dacă definim clasa intr-uri pachet fără riurne, atunci numele
> (se pot consulta Exemplele 2.4.8, 2.4.9 etc.). Exemplul 3.2.L Programul de mai jos intitulat DV . j ava face parte din pachetul cu

elase este o metodă care are numele respectivei clase. numele Pa che L. Constructorul clasei DV va crea două obiecte din clasele C1, respectiv

nu au tip, nici măcaf voi d. Constructorii SUilt c 2. Spre deosebire de exemplele precedente, clasa C1 conține un obiect din clasa C 2 și
unui obiect din clasa respectivă șÎ suflt UtiliZați invers. Deoarece domeniul de vizibilitate a unei clase este pachetul in care se află, rezultă
apela¡i autOffiat 1f1 momentul creării
pentru irlițializarea datelor membre. că putem referi un obiect din clasa Cl in clasa C2 (și reciproc). Dacă nu ar fi

Dacă pentru o clasă nu declarăm nici un construCtOr, atunci la compilare se fost conținute in acelaşi pachet, am fi obtinut eroare la compilare.

este public, nu are nici uri parametru și package Pachet;


creează automat uri constructor imp t * e
execuția sa n u are nici un efect. nu se confunda cons tructorul implicit (cel general
Dacă declarăm uri
automat) cu cel fără rllCl FII Qarametru (scris de programatOr). public class DV (
D la distrugerea unui obiect.
constructor, atunci nu se mai generează constructorul implicit.
estr
uct orul este metoda care se apelează automat
Destruc- p
u
b
l
i
c
D
V
(
i
n
t
k
)
(
/
/
c
o
n
s
t
r
u
c
t
o
r
C
2
c
D
o
i
=
n
e
w
C
2
(
k
)
;
ramare C + +, mai ales pentru eliberarea distrugerea obiectul ui.
torii sunt extrem de utiliza¡i îJ1 limbajul dle prog
lucrurile stau altfel datorita colectoru lui
resurselor ocupate de respectivul obiect. l n Java
de gunoaie, care are drept sarcină eliberarea automata a memoriei la care aplicația nu mal
suprascrierea metodei finalize 1) din CiaSa O bjso t, pfO-
are nici o referin¡ă. Prin
care 'or ft executate o dată cu
gramatorul poate specifica o m ultime de acțiuni,
System.out.print1n(cDoi),
C1 cUru = new C1(cDoi);
System.out.println(cUnu);
CLASE, INTER> TE ȘI TABLOU RI 1 21
izo JAVA DE LA 0 LA EXPERT’

c la ss C1 l
3.2.2. Modificatorii unei clase
/* date membre */ In definiția clasei, modificatorii unei clase, care sunt notați cu <Mo di f i cal or i Cia s a>,
int x;
pot fi: pub 1 i c, abs t ra c L, f in a1 (de preferat, în această ordine). Aceştia pot avea cel
C2 c2; mult o singură apariție, în caz contrar apare o eroare la compilare.
/* constructor */
Dacă o clasa este declarată pub 1 i c, atunci aceasta poate fi accesată de orice cod
c1(C2 c2) ( nava care poate accesa pacheml În care este definită această c(asă. Dacă o clasă nu este
this.x - c2.x; declarată pub l i c, atunci aceasta poate fi accesată doar din pachetul în care este declarată.
this.c2 = c2;
O clasă este absirocia dacă aceasta este incomplet definită (conține o metodă
neimplementată). Doar clasele abstracte pot avea metode abstracte (neimplementate).
/* definirea unei metode */
Dacă o clasă conține o metodă abstractă și nu este declarată ab s t£ act, atunci se
public String tOString() (
obține o eroare la compilare. O clasă C are metode abstracte în unul din cazurile:
return x = + x " c2 = " + c2;
1. Clasa C conține o declarație a unei metode abstracte;
2. Clasa C moștenește o metodă abstractă de la o altă clasă;
3. Cind există o interfață care implementează clasa C și care declară sau moște- ne¡te
o metodă (care este clar că este abstractă, deoarece o interfață nu are metodele
/* date membre*/ definite) și clasa C nu declară și nici nu mo}tenește o metodă care o
implementează.
int x;
C1 cl;

/* constructor */
Exemplul 3.2.2. In. con.tin.u*r.• prezentăm a-- Java care Sefine§te o cÎasă
C2(int x) (
derivată dintr-o clasă abstractă și o interfață.
this.cl = new Cl(thiS); // definirea unei clase abstracte
abstract class C1 (
/* definirea unei metode ’/ // declararea datelor membre
public String tostring() ( t

return "x l " + #r ’ /n declal ârea unei metode ' '

In urma execuției programului de mai sus se obține:


) x = 5 c2 = x = 5
care va
De exemplu, putem scrie uri program de tip aplicație de sine stătătoare
apela clasa Dv (declarată pub l i C, deci accesibilă):
import Pachet.*:

publiC Class DomeniuVizibili tate (


public statiC VOid main(String args[l) (
Dv obiect = new DV(4);
void
f(int
x) (
this.x
+= x;

// declararea unei'metode abstracte


abstract void g(lnt y);

// definirea unei inteifete


interface Il (
public void h();

/* definirea unei metode care deriveaza


clasa C1 si implementează irterfata Il
*/

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