Documente Academic
Documente Profesional
Documente Cultură
65 mil. locuitori)
1
robustee, elimin sursele frecvente de erori ce apar n programare prin
eliminarea pointerilor, administrarea automat a memoriei i eliminarea
fisurilor de memorie printr-o procedur de colectare a 'gunoiului' care
ruleaz n fundal. Un program Java care a trecut de compilare are
proprietatea c la execuia sa nu "crap sistemul".
complet orientat pe obiecte - elimin complet stilul de programare
procedural; se bazeaz pe ncapsulare, motenire, polimorfism
uurin n ceea ce privete programarea n reea
securitate, este cel mai sigur limbaj de programare disponibil n acest
moment, asigurnd mecanisme stricte de securitate a programelor
concretizate prin: verificarea dinamic a codului pentru detectarea
secvenelor periculoase, impunerea unor reguli stricte pentru rularea
programelor lansate pe calculatoare aflate la distanta, etc
este neutru din punct de vedere arhitectural
portabilitate, cu alte cuvinte Java este un limbaj independent de
platforma de lucru, aceeai aplicaie rulnd, fr nici o modificare, pe
sisteme diferite cum ar fi Windows, UNIX sau Macintosh, lucru care aduce
economii substaniale firmelor care dezvolt aplicaii pentru Internet.
Sloganul de baz este: Write once, run anywhere
compilat i interpretat
asigur o performan ridicat a codului de octei
conine o librrie de clase i interfee pentru domenii specifice cum ar fi
programarea interfeelor utilizator (JFC, AWT, Swing), programare
distribuit (comunicare TCP/IP, CORBA, RMI etc.)
permite programarea cu fire de execuie (multithreaded)
dinamicitate
este modelat dup C i C++, trecerea de la C / C++ la Java fcndu-se
foarte uor.
face diferena ntre literele mici i mari (este case sensitive)
permite dezvoltarea aplicaiilor pentru Internet crearea unor
documente Web mbuntite cu animaie i multimedia.
Java Development Kit (JDK) este disponibil gratis
2
1.3. Java : un limbaj compilat i interpretat
1993: devine disponibil primul browser WWW (World Wide Web) Mosaic;
dezvoltarea unui web-browser (Webrunner), capabil s ncarce i s execute
programe mici scrise n Oak;
3
ianuarie 1996 : apare JDK 1.0 (soft gratuit);
4
Toate aplicaiile Java conin o clas principal n care trebuie s se gseasc
metoda main(). Clasele aplicaiei se pot gsi fie ntr-un singur fiier, fie n mai
multe.
3. Compilarea aplicaiei
Se folosete compilatorul Java, javac. Apelul compilatorului se face pentru
fiierul ce conine clasa principal a aplicaiei. Compilatorul creeaz cte un fiier
separat pentru fiecare clas a programului; acestea au extensia .class i sunt
plasate n acelai director cu fiierele surs. Rezultatul comenzii
javac Salut.java
este fiierul Salut.class
4. Rularea aplicaiei
Se face cu interpretorul java, apelat pentru unitatea de compilare
corespunztoare clasei principale, fiind ns omis extensia .class asociat
acesteia.
java Salut
Rularea unei aplicaii care nu folosete interfa grafic, se va face ntr-o fereastr
sistem.
5
g.drawString("Salut",50,50);
}
}
2. Salvarea fiierelor surs
Salvarea se va face n fiierul Salut.java
3. Compilarea applet-ului
javac Salut.java
n urma compilrii rezult fiierul Salut.class
4. Rularea applet-ului
Applet-urile nu ruleaz independent. Ele pot fi rulate doar prin intermediul unui
browser: Internet Explorer, Netscape sau printr-un program special cum ar fi
appletviewer-ul din setul JDK.
Crearea unui fiier HTML pentru miniaplicaie (exemplu.html)
<html>
<head>
<title>Primul Applet Java</title>
</head>
<body>
<applet code=Salut.class width=400 height=400>
</applet>
</body>
</html>
5. Vizualizarea applet-tlui
appletviewer exemplu.html
6
2. Programarea Orientat pe Obiecte i Java
Programarea Orientat pe Obiecte (OOP) este una dintre cele mai mari idei de
programare aprut n anii 1990. Ideea central a OOP este: organizarea
programelor astfel nct ele s reprezinte un ecou al modului n care lucrurile sunt
puse mpreun n lumea real.
Exemplu:
Pentru cine nu s-a jucat niciodat cu Lego, acesta const n diferite buci de
plastic, de diferite culori i dimensiuni. Ele sunt dotate cu crescturi i adncituri prin
intermediul crora piesele pot fi conectate ntre ele. Cu diferite componente Lego se
poate forma aproape orice: maini, oameni, castele, case, etc. n funcie de
imaginaia fiecruia. Fiecare pies de Lego este un mic obiect care mpreun cu
altele ajut la crearea altor obiecte mai mari. Exact aa stau lucrurile i n
programarea orientat pe obiecte: obiecte mici puse mpreun formeaz obiecte
mari.
Programarea orientat pe obiecte este gndit dup modelul lumii reale
obiectele sunt adesea formate din mai multe tipuri de obiecte mici.
Cnd scriem programe ntr-un limbaj orientat pe obiecte, nu definim obiecte ci
clase de obiecte, unde o clas reprezint un ablon pentru mai multe obiecte cu
caracteristici similare. Clasele ntrupeaz toate caracteristicile unei mulimi
particulare de obiecte. De exemplu, ne putem gndi la clasa Copac care descrie
caracteristicile tuturor copacilor (au rdcini, trunchi i frunze, cresc, produc clorofil,
i schimb frunzele, etc). Clasa Copac reprezint un model abstract pentru
conceptul de copac pentru a planta un copac, a-l atinge, a-i rupe o frunz sau a-l
tia avem nevoie de un copac concret, altfel spus de o instan a copacului.
Bineneles c, odat ce avem clasa copac, putem crea oricte instane diferite ale
copacului respectiv copaci concrei. Acetia pot avea caracteristici diferite (unii
sunt nali, alii pitici, unii i pierd frunzele toamna, alii nu, etc)
7
O alt noiune specific OOP este cea de obiect. Obiect sau instan a clasei
reprezint acelai lucru. Clasa este reprezentarea general a unui obiect iar
instana /obiectul este reprezentarea concret a clasei.
2.2.1. Atribute
Atributele difereniaz obiectele ntre ele i determin aparena, starea sau alte
caliti ale obiectului n cauz. Dac ne gndim s crem o clas Main, ea ar
trebui s includ urmtoarele atribute: culoare, stil, marc.
Atributele sunt definite n clase ca variabile. Tipul i numele variabilelor
sunt definite n clase i fiecare obiect are valori proprii pentru fiecare atribut.
Deoarece fiecare instan a clasei poate avea valori diferite pentru variabilele sale,
aceste variabile se mai numesc i variabile instan.
8
Exemplu: O instan a clasei main, MainaMea ar putea avea urmtoarele
valori pentru atribute:
culoare = alb
stil = elegant
marc = Mercedes
Exist, de asemenea, i un alt tip de variabile numite variabile clas.
Diferena dintre cele dou tipuri de variabile este aceea c valorile variabilelor
instan sunt pstrate n instane i se schimb pentru fiecare instan iar valorile
variabilelor clas sunt pstrate n clas i nu se schimb pentru fiecare instan.
Asupra diferenei dintre cele dou tipuri de variabile o s revin ntr-un capitol
urmtor.
2.2.2. Comportament
Obiectul este o variabil care are o structura i o stare. Fiecare obiect dispune
de operaii prin intermediul crora i se poate manipula starea.
9
Obiectul trebuie privit ca o unitate atomic pe care utilizatorul nu ar trebui s o
disece. De exemplu, cnd lucrm cu numere ntregi, nu ne punem problema
reprezentrii lor. Utilizatorul nu are acces direct la prile constituente ale unui obiect
sau la implementarea sa; acestea vor putea fi accesate doar prin intermediul
metodelor care au fost furnizate mpreun cu obiectul. Gruparea datelor i a
operaiilor care pot fi efectuate asupra acestor date, avnd grij ca detaliile de
implementare s fie ascunse, poarta numele de ncapsulare.
Unul din principalele scopuri ale OOP este refolosirea codului. Limbajele de
programare orientate pe obiecte furnizeaz mai multe mecanisme n acest scop.
1. Folosirea codului generic dac implementarea este identic, i difer
doar tipul de baz al obiectului, nu este necesar rescrierea complet a
codului se scrie un cod generic care funcioneaz pentru orice tip. De
exemplu, se poate scrie o metod care s ordoneze un ir de numere ntregi,
caractere, iruri de caractere.
2. Motenirea este un mecanism care permite extinderea funcionalitii unei
clase. Se pot crea noi tipuri de date care s extind (sau s restricioneze)
proprietile tipului de date original.
3. Polimorfismul Un tip referin polimorfic poate s refere obiecte de mai
multe tipuri. Atunci cnd se apeleaz o metod a tipului polimorfic, se va
selecta automat metoda care corespunde tipului referit n acel moment.
10
3. Elementele de baz ale limbajului de
programare Java
3.1.3. Identificatori
3.1.4. Constante
11
Sunt acceptate 3 baze de numeraie : baza 10, baza 16 (ncep cu
caracterele 0x) i baza 8 (ncep cu cifra 0) i pot fi de dou tipuri:
normale, (se reprezint pe 4 octei - 32 bii)
lungi (8 octei - 64 bii): se termin cu caracterul L (sau l).
2. constante reale
Pentru ca o constant s fie considerat real ea trebuie s aib cel puin
o zecimal dup virgul, s fie n notaie exponenial sau s aib sufixul F sau f
pentru valorile normale (reprezentate pe 32 bii), respectiv D sau d pentru valorile
lungi (reprezentate pe 64 bii).
3. constante logice
true : valoarea boolean de adevr
false : valoarea boolean de fals
Observaie: spre deosebire de C++, constantele ntregi 1 i 0 nu mai au rolul
de adevrat i fals.
4. constante caracter
O constant de tip caracter este utilizat pentru a exprima caracterele
codului Unicode. Reprezentarea se face fie folosind o liter, fie o secven
escape scris ntre apostrofuri. Secvenele escape permit reprezentarea
caracterelor care nu au reprezentare grafic i reprezentarea unor caractere
speciale precum backslash, apostrof, etc. Secvene escape predefinite n Java:
12
5. constante iruri de caractere
Un ir de caractere este format din zero sau mai multe caractere cuprinse
ntre ghilimele. Caracterele care formeaz irul de caractere pot fi caractere
grafice sau secvene escape. Dac irul este prea lung el poate fi scris ca o
concatenare de subiruri de dimensiune mai mic. Concatenarea irurilor se face
cu operatorul + ("Ana " + " are " + " mere "). irul vid este "". Dup
cum vom vedea, orice ir este de fapt, o instan a clasei String, definit n
pachetul java.lang.
3.1.5. Separatori
3.1.6. Operatori
13
b) int x=5,y=7;
x++; // x primeste valoarea 6
y--; // y primeste valoarea 6
c) int x=5,y=7;
++x; // x primeste valoarea 6
--y; // y primeste valoarea 6
d) int x=5,y;
y=x++; // y primeste valoarea 5, x primeste
valoarea 6
e) int x=5,y;
y=x--; // y primeste valoarea 5, x primeste
valoarea 4
f) int x=5,y;
y=++x; // x primeste valoarea 6, y primeste
valoarea 6
g) int x=5,y;
y=--x; // x primeste valoarea 4, y primeste
valoarea 4
14
8. operatorul condiional: ? : . Are forma:
expresie_logica ? expresie1 : expresie2
15
Rezultatul afiat este:
2 3 5
3 2 5
4 3 6
2 6 6
1 5 7
2 2 2
16
3.1.7. Comentarii
17
2. tipuri reale
Tip de date Dimensiune n octei Domeniu
float 4 -1046 .. 1038
double 8 -10324 .. 10308
3.3. Variabile
Variabilele pot avea ca tip fie un tip primitiv de dat, fie o referin la un obiect.
Declararea variabilelor se face prin:
tip_de_date nume_variabila
18
Exemple:
int a; a=5;
final double PI = 3.14;
int valoare = 100;
long numarElemente = 12345678L;
String floare = "frezie";
19
public class Nume_Clasa
{
...
declararea variabilelor membru
public void Metoda (parametrii metodei)
}
}
3.4. Instruciuni
20
else
instruciuni2
instruciuni
21
acest operator nu ar fi fost folosit, mprirea ar fi fost efectuat ntre doi operanzi
ntregi i, prin urmare, rezultatul ar fi fost numr ntreg.
22
15. case '*':
16. r=a*b; break;
17. case '/':
18. r=a/b; break;
19. default:
20. System.out.println("Operator invalid");
21. System.exit(1);
22. }
23. System.out.println(a+" "+oper+" "+b+" = "+r);
24. }
25. }
Exemplu 6: S se spun dac un numr dat mai mic dect 10 este par sau impar.
1. public class ParImpar{
2. public static void main(String args[]){
3. int x=2;
4. switch (x) {
5. case 0:
6. case 2:
7. case 4:
8. case 6:
9. case 8:
10. System.out.println(x+" este numar par");break;
11. default:
12. System.out.println(x+" este numar impar");
13. }
14. }
15. }
23
1. Instruciunea for repet un bloc de instruciuni ct timp o condiie este
adevrat. n general, se cunoate de la nceput de cte ori urmeaz s se
execute blocul de instruciuni. Are forma general:
for (iniializare; test; incrementare)
instruciuni
unde:
iniializare este o expresie care iniializeaz variabila de control a
instruciunii for
test este o expresie boolean evaluat naintea fiecrei reluri a buclei; ct
timp valoarea ei este true blocul de instruciuni se execut. Cnd valoarea
ei este false, se prsete instruciunea for.
incrementare este o expresie care modific variabila de control a
instruciunii for.
Oricare dintre cele trei pri constituente ale instruciunii for poate s
lipseasc.
for ( ; ; )
n acest caz se obine o bucl infinit. Pentru a evita acest lucru este necesar
ca n cadrul blocului de instruciuni s existe o condiie de oprire.
De asemenea, blocul de instruciuni poate s lipseasc, el fiind nlocuit de
instruciunea vid. Exemplul 8 de mai jos ilustreaz aceast situaie.
24
6. ;
7. System.out.println(n+"!="+f);
8. }
9. }
Exemplu 9:
1. public class Factorial{
2. public static void main(String args[]){
3. long f, LimSup;
4. int n=10,i;
5. LimSup=(long)Math.pow(2,63);
6. for(i=2,f=1; i<=n && f<=LimSup/i; f*=i,i++)
7. ;
8. if (i==n+1)
9. System.out.println(n+"!="+f);
10. else
11. System.out.println(n+"!=este prea mare pentru puterile mele");
12. }
13. }
25
4. int s=0;
5. while(x>0){
6. s+=x%10;
7. x/=10;
8. }
9. System.out.println("Suma cifrelor numarului "+xInit+"
este: "+s);
10. }
11. }
Exemplu 11: S se calculeze cel mai mare divizor comun a dou numere a i b.
1. public class Cmmdc{
2. public static void main(String args[]){
3. long a=54,b=68,r;
4. System.out.print("Cmmdc-ul numerelor "+a+" si "+b+"
este: ");
5. do{
6. r=a%b;
7. a=b;
8. b=r;
9. }while(r>0);
10. System.out.println(a);
11. }
12. }
26
13. Instruciunea break
break
Este folosit pentru prsirea forat a corpurilor instruciunilor repetitive (for,
while, do-while).
n linia 5 se genereaz aleator un numr ntreg mai mic dect b. Dac numrul
este cuprins n intervalul [a,b] se prsete instruciunea while.
Dac instruciunea break este plasat n cadrul mai multor instruciuni
repetitive imbricate, ea are ca efect prsirea doar a instruciuni care o conine.
Exemplu:
1. for(...){
2. ...
3. for(...){
4. ...
5. break;
6. ...
7. }
8. ...
9. }
27
Exemplu 13: Urmtorul cod afieaz toate caracterele citite cu excepia cifrelor de la
0 la 9.
1. public class ExContinue{
2. public static void main(String args[]){
3. for(int i=0; i<=10; i++){
4. char c=' ';
5. try{
6. c=(char)System.in.read();
7. }
8. catch(Exception e){}
9. if ( ('0'<=c) && (c<='9') )
10. continue;
11. System.out.print(c+" ");
12. }
13. }
14. }
Exemple:
int[] v;
String adrese[];
28
Instanierea unui vector se realizeaz cu operatorul new i are ca efect
alocarea memoriei necesare pentru memorarea elementelor vectorului, mai precis
specificarea numrului maxim de elemente pe care l va avea vectorul. Instanierea
unui vector se face astfel:
numeVector = new TipElement[dimensiune];
Exemple:
v = new int[10]; //se aloc spaiu pentru 10 ntregi
adrese = new String[100]; //se aloc spaiu pentru 100 de String-uri
Exemple:
int [] v = new int[10];
Dup declararea unui vector, acesta poate fi iniializat, adic elementele sale
pot primi valori. n acest caz instanierea lipsete, alocarea memoriei fcndu-se
automat n funcie de numrul de elemente cu care se iniializeaz vectorul.
Exemple:
String culori[] = {"Rosu", "Galben", "Verde"};
int []v = {2, 4, 6, 8, 10, 12};
Observaii:
Primul indice al unui vector este 0, deci poziiile unui vector cu n elemente vor
fi cuprinse ntre 0 i n-1.
Nu sunt permise construcii de genul:
TipElement numeVector[dimensiune]
alocarea memoriei fcndu-se doar prin intermediul operatorului new sau prin
iniializare.
Exemple:
int v[10]; //incorect
int v[] = new int[10]; //corect
29
Accesul la elementul unui vector se face prin:
numeVector[indice]
Exemplu 1:
int v[]=new int[10];
for(i=0; i<10; i++)
v[i]=i;
Exemplu 2:
int v[]={1,2,3,4,5};
for(i=0; i<5; i++)
System.out.println(v[i]+ );
n Java tablourile cu mai multe dimensiuni sunt de fapt vectori de vectori. Prin
urmare, declararea, instanierea i iniializarea se fac la fel ca n cazul vectorilor
unidimensionali.
TipElement numeVector[][] = new TipElement[dim1][dim2]
sau
TipElement[][] numeVector = new[dim1][dim2] TipElement
sau parantezele pot fi de o parte i de alta a lui numeVector.
Exemplu:
int m[][]; //declararea unei matrice
m = new int[5][10]; //cu 5 linii, 10 coloane
Observaie:
m[0], m[1], ..., m[4] sunt vectori de ntregi cu 10 elemente
30
atunci:
m.length are valoarea 5 i reprezint numrul de linii al matricei
m[0].length are valoarea 10 i reprezint numrul de elemente al
primei linii a matricei,
m[1].length are valoarea 10 i reprezint numrul de elemente al
celei de-a doua linii a matricei, etc.
31
26. }
27. }
32
Concatenarea irurilor de caractere se face prin intermediul operatorului +.
String str1 = "abc" + "xyz";
String str2 = "123";
String str3 = str1 + str2;
33
4. Clase i obiecte n Java
4.1. Referine
Dup cum am artat n capitolul 2, o clas este un ablon pentru mai multe
obiecte cu caracteristici asemntoare. Un obiect este o colecie de variabile
(atribute) i metode asociate descrise n clas.
Clasa poate fi asemnat cu un tip de date iar obiectul cu o variabil. Dac se
declar o variabil folosind numele unei clase ca i tip, aceast variabil conine o
referin ctre un obiect al clasei respective. Cu alte cuvinte, variabila nu va conine
obiectul actual ci o referin ctre un obiect / o instan a clasei. Deoarece folosind
numele unei clase ca i tip se declar o referin ctre un obiect, aceste tipuri poart
numele de tipuri referin.
Se disting dou caracteristici principale ale obiectelor n Java:
obiectele sunt ntotdeauna alocate dinamic. Durata de via a unui
obiect este determinat de logica programului. Ea ncepe atunci cnd
obiectul este creat i se termin n momentul n care obiectul nu mai
este folosit, el fiind distrus de un mecanism de curenie oferit de
limbajul Java garbage collector (colectorul de gunoaie).
obiectele nu sunt coninute de ctre variabile. O variabil pstreaz o
referin ctre un obiect. o referin este similar cu ceea ce se
numete pointer n alte limbaje de programare cum ar fi C++. Dac
exist dou variabile de acelai tip referin i o variabil este atribuit
celeilalte, ambele vor referi acelai obiect. Dac informaia din obiect se
modific, schimbarea este vizibil n ambele variabile.
O variabil referin poate conine i o referin ctre nimic. Valoarea unei
asemenea variabile referin este null.
n Java nu se permite tipurilor referin s fie convertite ctre tipuri primitive
sau invers.
n capitolul 2 am vzut cum se poate lucra cu tablouri (iruri) fr s ne punem
problema cu ce tip de date lucrm primitiv sau referin. n Java, irurile nu sunt
tipuri primitive ci referin. Ele se comport ca nite obiecte.
34
4.2. Obiecte
n Java obiectele sunt create prin instanierea unei clase, cu alte cuvinte prin
crearea unei instane a unei clase.
Declararea obiectului se face prin:
NumeClasa numeObiect;
Exemplu:
String s;
Complex c;
35
Exemplu:
Complex c = new Complex();
c.re = 2;
c.im = 3;
System.out.println("Re=" +c.re+ " Im="+c.im);
n cazul n care operatorul = este folosit mpreun cu date de tip primitiv, are
loc o atribuire de valori.
Exemplu:
int x = 12, y = 10;
x = y;
36
Exemplu:
1. class Nimic{
2. int x;
3. }
4. class Test{
5. public static void main(String args[]){
6. Nimic a1=new Nimic(),a2;
7. a1.x=10;
8. a2=a1;
9. System.out.println(a1.x+" "+a2.x);
10. a1.x=5;
11. System.out.println(a1.x+" "+a2.x);
12. }
13. }
Rezultatul este:
23456
23456
37
4.2.3. Operatorul de egalitate ==
n cazul n care operatorul == este folosit mpreun cu date de tip primitiv, are
loc o testare a egalitii valorilor celor dou variabile.
Exemplu:
int x = 12, y = 10, z = 12;
x == y are valoarea false; x i y au valori diferite
x == z are valoarea true; x i z au valori egale
n cazul n care operatorul = este folosit mpreun cu date de tip referin, se
verific dac cele dou variabile refer acelai obiect.
Exemplu:
1. class Nimic{
2. int x;
3. Nimic(int x){
4. this.x=x;
5. }
6. }
7. class Test{
8. public static void main(String args[]){
9. Nimic a1=new Nimic(1),a2=new Nimic(1);
10. if(a1==a2)
11. System.out.println("Sunt egale");
12. else
13. System.out.println("Nu sunt egale");
14. a2=a1;
15. if(a1==a2)
16. System.out.println("Sunt egale");
17. else
18. System.out.println("Nu sunt egale");
19. }
20. }
n linia 9 se creeaz dou obiecte cu aceeai valoare. Totui testul din linia 10
are ca rezultat valoarea false. Dup linia 14 cele dou variabile refer acelai
obiect i, prin urmare, testul din linia 15 are ca rezultat valoarea true.
38
4.3. Clase
39
urmare trebuie extins de o alt clas care s le implementeze. Dar, dac ar fi i
final, nu ar putea fi extins.
Dup numele clasei se pot specifica, dac este cazul, clasele motenite i
interfeele implementate. O clas poate moteni o singur clas, prin urmare dac
apare clauza extends ea este urmat doar de numele unei clase. ns, o clas
poate implementa mai multe interfee, ale cror nume apar dup clauza
implements i trebuie separate prin virgul. Asupra motenirii i interfeelor se
gsesc mai multe detalii n subcapitolele Motenire respectiv Interfee.
Corpul unei clase urmeaz dup antetul clasei i este cuprins ntre acolade.
Conine:
declararea variabilelor instan i clas care mpreun formeaz
variabilele membru;
definirea metodelor instan i clas care mpreun formeaz metodele
membru.
Observaie: variabilele unei clase pot avea acelai nume cu metodele clasei.
40
[modificatori] TipDeDate numeVariabila [ = valoareInitiala ] ;
unde un modificator poate fi :
un specificator de acces: public, protected, private;
unul din cuvintele rezervate: static, final, transient, volatile.
Exemple:
double x;
protected static int n;
public String s = "abcd";
private Point p = new Point(10, 10);
final long MAX = 100000L;
Exemplu: se declar o variabil final (linia 2). n linia 4 se iniializeaz iar n linia 5
se dorete modificarea valorii ei.
1. class Test {
2. final int MAX;
3. Test() {
4. MAX = 100; // legal
5. MAX = 200; // ilegal -> eroare la compilare
6. }
7. }
41
transient este folosit la serializarea obiectelor, pentru a specifica ce
variabile membru ale unui obiect nu participa la serializare.
volatile este folosit pentru a semnala compilatorului s nu execute
anumite optimizri asupra membrilor unei clase. Este o facilitate avansat
a limbajului Java.
4.3.3. Metode
42
final este folosit pentru a specifica faptul c acea metod nu mai poate fi
supradefinit n subclasele clasei n care ea este definit ca fiind final.
Acest lucru este util dac respectiva metod are o implementare care nu
trebuie schimbat n subclasele ei.
native este folosit pentru refolosirea unor funcii scrise n alt limbaj de
programare dect Java (C de exemplu).
synchronized este folosit n cazul n care se lucreaz cu mai multe fire de
execuie iar metoda respectiv se ocup cu partajarea unei resurse
comune. Are ca efect construirea unui semafor care nu permite executarea
metodei la un moment dat dect unui singur fir de execuie.
Dac valoarea returnat este o referin la un obiect al unei clase, atunci clasa
obiectului returnat trebuie s coincid sau s fie o subclas a clasei specificate la
declararea metodei.
43
4.3.3.4 Parametrii unei metode
Dup cum am vzut, numele clasei este urmat de lista parametrilor
(argumentelor), list care este opional (o metod poate s nu aib parametrii).
Parametrii sunt specificai prin numele i tipul lor, fiind desprii unul de altul prin
virgul.
NumeMetoda([tip1 argument1], [tip2 argument2]
... )
Tipul de date al unui argument poate fi orice tip valid al limbajului, att tip
primitiv de date ct i referin la un obiect.
Exemplu:
void adaugarePersoana(String nume, int varsta, float
salariu){
...
}
unde String este tip referin, int i float sunt tipuri primitive.
n Java o metod nu poate primi un numr variabil de argumente, ceea ce
nseamn c apelul unei metode trebuie s se fac cu specificarea exact a
numrului i tipurilor argumentelor.
Nu este permis gruparea parametrilor dup tipul lor.
Exemplu:
public int max(int a,b){...} //este greit
public int max(int a, int b){ ...} //este corect
44
Asta nsemn c metoda recepioneaz doar valorile variabilelor primite ca
parametri. Cnd argumentul are tip primitiv de date metoda nu-i poate schimba
valoarea dect local (n cadrul metodei); la revenirea din metod variabila are
aceeai valoare ca la apelul iniial al metodei (modificrile fcute n cadrul metodei
sunt pierdute). Cnd argumentul este de tip referin metoda nu poate schimba
referina obiectului ns poate schimba variabilele membru ale respectivului obiect.
Prin urmare, dac dorim ca o metod s schimbe starea (valoarea) unui argument
primit, atunci el trebuie s fie neaprat de tip referin (trebuie s fie un obiect!).
Constructorii unei clase sunt metode speciale care au acelai nume cu cel al
clasei, nu returneaz nici o valoare i sunt folosii pentru iniializarea obiectelor
acelei clase n momentul instanierii lor. Constructorii controleaz modul n care un
obiect este creat i iniializat.
Class COMPLEX {
COMPLEX() {
//constructor
}
}
O clas poate avea unul sau mai muli constructori care trebuie ns s difere
prin lista de parametri primii. Astfel sunt permise diferite tipuri de iniializri ale
obiectului la crearea sa, n funcie de numrul parametrilor cu care este apelat
constructorul.
Exemplu: Clasa COMPLEX are trei constructori: unul fr parametrii definit n liniile
3-5, altul cu doi parametrii definit n liniile 6-8, altul cu un parametru definit n liniile 9-
11.
1. class COMPLEX {
2. double re, im;
3. COMPLEX () {
4. re=im=0;
5. }
6. COMPLEX (double r, double i ) {
7. re=r; im=i;
8. }
9. COMPLEX (double r) {
10. re=r; im=0;
45
11. }
12. }
Exemplu: n clasa COMPLEX a fost definit constructorul cu doi parametrii. Ceilali doi
constructori fac apel la constructorul cu doi parametrii n liniile 4 i 10.
1. class COMPLEX {
2. double re, im;
3. COMPLEX () {
4. this(0,0);
5. }
6. COMPLEX (double r, double i ) {
7. re=r; im=i;
8. }
9. COMPLEX (double r) {
10. this(r,0);
11. }
12. }
46
Exemplu: n clasa COMPLEX au fost definii doi constructori: cu un parametru i cu
doi parametrii. n linia 11 se apeleaz constructorul fr parametrii. Aceast linie
genereaz o eroare deoarece nu exist constructor fr parametrii el nu a fost
creat implicit.
1. class COMPLEX {
2. double re, im;
3. COMPLEX (double r, double i ) {
4. re=r; im=i;
5. }
6. COMPLEX (double r) {
7. this(r,0);
8. }
9. }
10. ...
11. COMPLEX c= new Complex(); //eroare
47
4. this.re = re;
5. this.im = im;
6. }
7. }
48
14. ...
15. ContBancar c=new ContBancar(100);
16. c.transfer(c);
49
14. m=max(a,b,c);
15. System.out.println("Max. dintre "+a+", "+b+" si
"+c+" este: "+m);
16. }
17. }
.
supradefinirea (overriding): o subclas a unei clase poate rescrie o metod
a clasei printe, prin implementarea unei metode cu acelai antet ca al
superclasei.
50
Exemple:
private int re,im;
protected String secret;
public float[] elemente;
long x;
private void metodaInterna();
public void setRe(int re);
51
iniializeaz variabilele instan i incrementeaz variabila clas. Cu alte cuvinte,
variabila nr_puncte va contoriza cte puncte (instane ale clasei Punct) se
creeaz. n clasa TestPunct se creeaz trei obiecte de tipul Punct i se afieaz
valoarea variabilei clas nr_puncte. Trebuie remarcat c variabila nr_puncte
este accesat prin intermediul numelui clasei.
1. class Punct{
2. int x, y;
3. static int nr_puncte=0;
9. class TestPunct{
10. public static void main(String args[]){
11. Punct p1=newPunct(10, 10);
12. Punct p2=newPunct(20, 20);
13. Punct p3=newPunct(30, 30);
14. System.out.println(Punct.nr_puncte);
15. }
16. }
Exemplu: n clasa Cerc sunt definite: o metod instan n liniile 6-11 care
returneaz cercul cu raza cea mai mare i o metod clas n liniile 12-18 care
returneaz cercul cu raza cea mai mare dintre cele dou cercuri primite ca
parametru. n liniile 21, 22 sunt create dou cercuri a i b cu raze diferite. n linia 23
este apelat metoda maimare a obiectului a. n linia 24 este apelat metoda
maimare a clasei Cerc.
52
1. class Cerc{
2. double x,y,r;
6. Cerc maimare(Cerc c) {
7. if(c.r>r)
8. return c;
9. else
10. return this;
11. }
Membrii clas (statici) sunt folosii pentru a pune la dispoziie valori i metode
independente de starea obiectelor dintr-o anumit clas.
Spre deosebire de C++, n Java nu putem avea funcii globale definite ca
atare, ntruct "orice este un obiect". Din acest motiv i metodele care au o
funcionalitate global trebuie implementate n cadrul unei clase. Acest lucru se va
face prin intermediul metodelor clas (globale), deoarece acestea nu depind de
starea particular a obiectelor din clasa respectiv. De exemplu, s considerm
funcia global sqrt care extrage radicalul dintr-un numr i care se gsete n clasa
Math. Dac nu ar fi fost funcie clas, apelul ei ar fi trebuit fcut astfel:
Math m = new Math();
double rad121 = m.sqrt(121);
ceea ce ar fi fost extrem de neplcut pentru programatori. Fiind ns funcie
static ea poate fi apelat prin: Math.sqrt(121).
53
4.3.9. Argumente n linia de comand
Un apel de genul:
java ArgLinCom Nu mai vine primavara odata
va produce urmtorul rezultat:
Nu
54
mai
vine
primavara
odata
Dac o anumit parte din irul de intrare este cuprins ntre ghilimelele se
interpreteaz ca un singur argument, spaiile fiind ignorate.
Una apel de genul:
java ArgLinCom "Nu mai vine" primavara odata
va produce urmtorul rezultat:
Nu mai vine
primavara
odata
Dac se dorete ca din linia de comand s fie transmise argumente
numerice, acestea sunt primite de metoda main sub forma unui vector de String-
uri. Ulterior ele trebuie convertite din String-uri n numere. Acest lucru se
realizeaz cu metode de tipul parseXXX aflate n clasa XXX corespunztoare tipului
n care vrem s facem conversia: Integer, Float, Double, etc.
Exemplu:
1. public class Maxim {
2. public static int max(int a, int b){
3. return a>b?a:b;
4. }
6. int m=a>b?a:b;
7. m=m>c?m:c;
8. return m;
9. }
55
22. System.out.println("Maximul dintre "+a+", "+b+" si
"+c+" este: "+m);
23. }
24. }
4.4. Motenirea
56
Exemplu: Urmtoare ierarhie de clase:
se exprim n Java astfel: A
class A{
...
}
B
class B extends A{
...
}
class C extends B{
... C D
}
class D extends B{
...
}
A B
57
- funcionalitatea comun a mai multor clase se pune n superclase. Acest
aranjament permite ca funcionalitatea s fie refolosit n mod repetat
deoarece fiecare subclas primete informaia comun din superclas.
- schimbarea sau inserarea unei clase n partea de sus a ierarhiei
determin automat schimbri n comportamentul claselor de jos
Ce se ntmpl cnd o clas conine o metod care are acelai antet cu
metoda unei superclase? Este executat prima metod ntlnit cutarea fcndu-
se pornind de la baza ierarhiei n sus. Datorit acestui fapt, se pot scrie metode care
s ascund metodele din superclase.
Dac o metod din superclas nu este rescris ea va fi luat ca atare de
subclas. Nu acelai lucru se ntmpl i cu constructorii. Fiecare clas derivat
trebuie s i defineasc proprii constructori. Dac nu se scrie nici un constructor n
subclas, atunci se genereaz constructorul implicit.
14. ...
58
Pentru ca linia 16 s nu mai genereze eroare, clasa RationalIred trenbuie
s arate astfel:
59
14. public class RationalIred extends Rational {
15. public RationalIred(){
16. super();
17. }
18. public RationalIred(long m,long n){
19. super(m,n);
20. }
21. public RationalIred produs(RationalIred r){
22. super.produs(r);
23. System.out.println("si ireductibile");
24. }
25. }
Observaii:
Cnd se dorete apelarea constructorului superclasei se folosete doar
super(...).
Cnd se dorete apelarea unei metode a superclasei se folosete
super.NumeMetoda(...).
4.4.2. Interfee
60
constante: acestea pot fi sau nu declarate cu modificatorii public,
static i final care sunt implicii; nici un alt modificator nu poate aprea
n declaraia unei variabile a unei interfee. Constantele dintr-o interfa
trebuie obligatoriu iniializate.
Exemplu:
1. interface NumeInterfata {
2. int x = 100; //corect
3. public static final int y = 100; //corect
4. private z=100; //incorect
5. int a; //incorect
6. }
Atenie:
Variabilele i metodele unei interfee sunt implicit publice chiar dac nu sunt
declarate cu modificatorul public.
Variabilele unei interfee sunt implicit constante chiar dac nu sunt declarate
cu modificatorii static i final.
Implementarea unei interfee se face prin intermediul cuvntului cheie
implements:
class NumeClasa implements NumeInterfata
sau
class NumeClasa implements Interfata1, Interfata2...
O clas poate implementa oricte interfee. O clas care implementeaz o
interfa trebuie obligatoriu s defineasc toate metodele interfeei.
61
1. interface FigGeom{
2. void desen();
3. void arie();
4. }
62
Rezultatul execuiei este:
Constructor cerc 10
Constructor dreptunghi 20 25
Deseneaza cercul 10
Cercul 10 are aria 314.1592653589793
Deseneaza dreptunghiul 20 25
Dreptunghiul 20 25 are aria 500.0
4.5. Probleme
63
}
}
64
double s=Math.PI*r*r;
System.out.println("Cercul "+r+" are aria "+s);
}
}
65
}
void arie(){
double s=l*l;
System.out.println("Patratelul "+l+" are aria "+s);
}
}
}
}
66
Constructor patrat 300
Deseneaza patratul 300 indice 100
Patrat 300 are aria 90000.0
class Vaza {
static Floare f1 = new Floare(1); //var STATICA
Vaza() {
System.out.println("Vaza()");
f2.actiune("Floare in vaza");
}
void pozitie(String loc) {
System.out.println("pozitie(" + loc + ")");
}
static Floare f2 = new Floare(2); //var STATICA
}
class Gradina {
Floare f3 = new Floare(3);
static Floare f4 = new Floare(4); //var STATICA
Gradina() {
System.out.println("Gradina()");
f4.actiune("Floare doarme");
}
void aspect(String tip) {
System.out.println("aspect(" + tip + ")");
}
static Floare f5 = new Floare(5); //var STATICA
}
67
g3.aspect("frumos");
}
static Vaza v2 = new Vaza(); //var STATICA
static Gradina g3 = new Gradina(); //var STATICA
}
Rezultatul execuiei este:
Floare(1)
Floare(2)
Vaza()
actiune(Floare in vaza)
Floare(4)
Floare(5)
Floare(3)
Gradina()
actiune(Floare doarme)
Creaza o Gradina() noua in main
Floare(3)
Gradina()
actiune(Floare doarme)
Creaza o Gradina() noua in main
Floare(3)
Gradina()
actiune(Floare doarme)
pozitie(pe masa)
aspect(frumos)
public Rational(){
this(1,0);
}
68
}
public RationalIred(){
super();
}
69
setm(getm()/x);
setn(getn()/x);
}
70
5. Pachete
71
Pentru a folosi o component a unui pachet trebuie fcut cunoscut clasei
curente fie pachetul n care se gsete componenta, fie doar componenta. Acest
lucru se realizeaz prin importarea pachetului sau, doar a clasei.
O dat realizat ntr-un fiier importul pachetului, orice clas din pachet poate fi
accesat prin numele ei.
Exemplu: Clasa Date aparine pachetului java.util.
import java.util.*;
public class ExData{
public static void main(String[] args) {
Date d=new Date(2003,4,13);
System.out.println(d);
}
}
Atenie: n cazul n care sunt importate dou pachete care conin o clas cu
acelai nume atunci referirea la ea trebuie fcut folosind numele complet al clasei
respective (nume pachet urmat de nume clas).
Implicit, mediul Java import trei pachete:
pachetul java.lang
pachetul curent
pachetul implicit (fr nume)
72
import NumePachet.NumeClasa;
Exemple:
import java.util.Date;
O dat realizat ntr-un fiier importul clasei (interfeei), aceasta poate fi
accesat prin numele ei.
Exemplu:
import java.util.Date;
public class ExData{
public static void main(String[] args) {
Date d=new Date(2003,4,13);
System.out.println(d);
}
}
n cazul n care nu avem nevoie dect de cteva clase dintr-un pachet este
mai eficient s importm clasele dect ntregul pachet.
73
Se execut comanda:
javac NumePachet\*.java
void a(){
System.out.println(a);
}
public void b(){
System.out.println("public "+ b);
}
protected void d(){
System.out.println("protected "+d);
}
}
74
Fiierul A3.java conine clasa:
package Pachete;
public interface A3{
public void a3();
}
public Vector(){
a=new double[1];
}
75
public double getElem(int poz){
return a[poz];
}
package Tablou;
public class Matrice{
private double a[][];
public Matrice(){
a=new double[1][];
}
76
return a[l][c];
}
77
6. Excepii
78
Crearea unui obiect de tip excepie se numete aruncarea unei excepii
("throwing an exception"). n momentul n care o metod genereaz o excepie
(arunc o excepie) sistemul de execuie este responsabil cu gsirea unei secvene
de cod dintr-o metod care s trateze acea excepie. Excepiile sunt propagate
napoi prin secvena de metode apelate pn cnd o anumit metod prinde
excepia. Secvena de cod dintr-o metod care trateaz o anumit excepie se
numete analizor de exceptie ("exception handler") iar interceptarea i tratarea
excepiei se numete prinderea excepiei ("catch the exception").
Cu alte cuvinte la apariia unei erori este "aruncat" o excepie iar cineva trebuie s
o "prind" pentru a o trata. Dac sistemul nu gsete nici un analizor pentru o
anumita excepie atunci programul Java se oprete cu un mesaj de eroare.
Ierarhia claselor ce conin excepii este:
try{
instruciuni ce pot declana excepii
}
[catch(ClasaExceptie obiectExceptie){
instruciuni de tratare a excepiei de clas ClasaExceptie
}]*
[finally{
instruciuni care se execut necondiionat n final
}]
79
Instruciunea try conine un bloc de instruciuni ce trebuie executate. Punerea
unor instruciuni n cadrul lui try nseamn c exist posibilitatea apariiei unor
excepii sau terminrii anormale a unei instruciuni. O instruciune try poate avea
oricte clauze catch (opionale) n care sunt tratate excepiile. De asemenea,
instruciunea try poate avea o clauz finally a crui bloc se execut ntotdeauna
naintea prsirii instruciunii try. Instruciunea try trebuie s aib fie o clauz
catch, fie una finnaly.
2.
try{
...
}
catch(ClasaExceptie obiectExceptie){... }
...
catch(ClasaExceptie obiectExceptie){... }
3.
try{
...
}
finnaly{... }
4.
try{
...
}
catch(ClasaExceptie obiectExceptie){... }
...
catch(ClasaExceptie obiectExceptie){... }
finnaly{... }
80
n cazul n care este declanat o excepie i exist mai multe clauze catch,
este cutat, n ordine, acea clauz care poate trata excepia. Adic este gsit o
clauz a crui parametru are un tip care se potrivete cu tipul excepiei. Ordinea n
care clauzele catch apar este important: clauzele catch mai specifice trebuie s
apar naintea celor mai generale. Dac nu exist o clauz care s trateze excepia,
aceasta este propagat n sus, la instruciunile imediat urmtoare.
Excepii uzuale:
ArithmeticException Depire limit tip sau mprire la 0
NumberFormatException Conversia nepermis a unui
String la un tip numeric
IndexOutOfBoundsException Indice ilegal ntr-un ir
NegativeArraySizeException Crearea unui ir cu numr negativ
de elemente
NullPointerException Tentativ de a folosi o referin care
are valoarea null
SecurityException nclcarea normelor de securitate n
timpul execuiei
Adeseori poate aprea necesitatea crerii unor excepii proprii pentru a pune
n eviden cazuri speciale de erori provocate de clasele unei librrii, cazuri care nu
au fost prevzute n ierarhia excepiilor standard Java.
O excepie proprie trebuie s se ncadreze n ierarhia excepiilor Java, cu alte
cuvinte clasa care o implementeaz trebuie s fie subclas a clasei Exception.
public class ExceptieNoua extends Exception{ ... }
Exemplu:
1. public class Exc extends Exception{
2. public Exc(){
3. super(); //apeleaza constructorul clasei Exception
4. ...
5. }
6. }
81
ntr-o clas n care se dorete folosirea unei excepii exist o metod care creeaz
excepia (obiect al clasei de excepii), mai multe metode care arunc excepia
primit i, eventual o metod care o prinde, adic o trateaz. Dac ntr-o metod
apare o excepie creat n metoda respectiv sau ca urmare a apelrii unei
metode care a aruncat o excepie, atunci ea trebuie fie s fie tratat, fie s fie
aruncat mai departe. n ambele cazuri codul care ar putea genera excepia trebuie
pus n cadrul unei instruciuni try care s aib o clauz catch cu parametru care
s coincid cu clasa excepiei. Dac excepia se dorete s fie tratat, atunci n
clauza catch se pune un cod corespunztor. Dac se dorete ca excepia s nu fie
tratat atunci ea trebuie aruncat mai departe (metodei care a fcut apelul) i acest
lucru se realizeaz prin adugarea clauzei throws ClasaExceptie n antetul
metodei.
9. public Rational(){
10. this(1,0);
11. }
12. public Rational(long m,long n){
13. setm(m);
14. setn(n);
15. }
16. public Rational(long m){
17. this(m,1);
18. }
19. public void setm(long m){
20. this.m=m;
21. }
22. public long getm(){
23. return m;
24. }
25. public void setn(long n){
26. this.n=n;
27. }
82
28. public long getn(){
29. return n;
30. }
31. public Rational produs(Rational r){
32. return new Rational(m*r.m,n*r.n);
33. }
34. public String toString(){
35. return m+"/"+n;
36. }
37. }
83
78. Integer.parseInt(args[1]));
79. r2=new RationalIred(
80. Integer.parseInt(args[2]),
81. Integer.parseInt(args[3]));
82. }
83. catch(Exc e){
84. System.exit(1);
85. }
86. System.out.println(r1);
87. System.out.println(r2);
88. p=r1.produs(r2);
89. System.out.println(p);
90. }
91. }
84
7. Intrri i ieiri
85
deschide flux
ct timp exist informaie
citete informaia
nchide flux
86
Clasele rdcin pentru ierarhia claselor ce se ocup cu fluxurile de caractere
sunt Reader (pentru fluxuri de intrare) i Writer (pentru fluxuri de ieire).
Ierarhia claselor pentru fluxuri de intrare pe caractere este:
87
Ierarhia claselor pentru fluxuri de ieire pe octei:
88
Analog, clasele Writer i OutputStream definesc metode similare pentru
afiarea datelor, tipul parametrilor variind.
Clasa Writer
int write()
int write(char cbuf[ ])
int write(char cbuf[ ], int index, int lungime)
Clasa OutputStream
int write()
int write(byte cbuf[ ])
int write(byte cbuf[ ], int index, int lungime)
Prin urmare, crearea unui flux de date care scrie / citete informaii de la un
dispozitiv extern are formatul general:
FluxPrimitiv numeFlux = new FluxPrimitiv (dispozitiv extern)
89
7.5. Citirea datelor de la tastatur
90
7.5.2. Clasa InputStreamReader
91
n cazul folosirii clasei InputStreamReader, citirea se face caracter cu
caracter (adic, discul este accesat de fiecare dat). Pentru a crete eficiena se
folosete un flux care utilizeaz o zon tampon pentru citire (BufferedReader).
Clasa BufferedReader are definit metoda read() cu aceeai signatur ca i cea
definit n InputStreamReader dar, n plus, definete i metoda readLine().
Aceast metod poate fi folosit pentru a citi un ir de caractere terminat cu \n,\r
sau \r\n.
Clasa FileReader este folosit la citirea datelor dintr-un fiier text. Cei mai
importani constructori ai si sunt:
creeaz un flux care citete caractere din fiierul nume
public FileReader(String nume) throws
FileNotFoundException
92
creeaz un flux care citete caractere din fiierul varFis.
public FileReader(File varFis) throws
FileNotFoundException
Clasa FileWriter este folosit la scrierea datelor ntr-un fiier text. Cei mai
importani constructori ai si sunt:
creeaz un flux care scrie caractere in fiierul nume
public FileWriter (String nume) throws IOException
93
13. catch (IOException e) {
14. System.out.println("Error: " + e.toString());
15. }
16. }
17. }
8. Applet-uri
Unul dintre scopurile limbajului Java a fost crearea unor programe mici
(applet) care s ruleze n interiorul unui browser Web.
Un applet reprezint o suprafa de afiare (container) ce poate fi inclus ntr-o
pagina Web i gestionat printr-un program Java. Un astfel de program se mai
numete miniaplicaie.
Codul unui applet poate fi format din una sau mai multe clase. Una dintre
acestea este principal i extinde clasa JApplet, fiind clasa ce trebuie specificat n
documentul HTML ce descrie pagina de Web n care dorim s includem applet-ul.
Diferena fundamental dintre un applet i o aplicaie const n faptul c, un applet
nu poate fi executat independent, ci va fi executat de browser-ul n care este
ncrcat pagina Web ce conine applet-ul respectiv. O aplicaie independent este
executat prin apelul interpretorului java, avnd ca parametru numele clasei
principale a aplicaiei, clasa principal fiind cea care conine metoda main.
Un applet nu se poate atinge de hardisk-ul local prin citiri sau scrieri. Scrierea
este mpiedicat din cauza viruilor care s-ar putea instala, iar citirea deoarece nu se
dorete preluarea de informaii de pe staia local.
Un neajuns al applet-urilor ar putea fi timpul destul de lung necesar ncrcrii
lor. O metod de nlturare a acestui neajuns ar fi arhivarea applet-urilor ntr-un fiier
JAR (Java ARchive) care s cuprind toate componentele. Astfel, fiierul compresat
este download-at la o singur tranzacie cu server-ul.
Un avantaj al folosirii applet-urilor este lipsa necesitii instalrii lor. De fapt,
instalarea este automat de cte ori utilizatorul ncarc pagina Web care conine
applet-ul.
Pachetul care ofer suport pentru crearea de applet-uri este javax.swing.
Clasa JApplet furnizeaz tot ce este necesar pentru construirea i ntreinerea unui
94
applet. Crearea unui applet implic implementarea metodelor puse la dispoziie de
clasa JApplet care ne ajut s descriem comportamentul dorit al applet-ului.
Ierarhia de clase este:
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--java.awt.Panel
|
+--java.applet.Applet
|
+--javax.swing.JApplet
95
Oprirea definitiv La nchiderea tuturor instanelor browser-ului folosit
pentru vizualizare, applet-ul va fi eliminat din memorie i va fi apelat
metoda destroy a acestuia, pentru a-i permite s elibereze resursele
deinute. Apelul metodei destroy este ntotdeauna precedat de apelul lui
stop.
import javax.swing.JApplet;
import java.awt.*;
import java.awt.event.*;
96
}
8.4. HTML
Un browser Web interpreteaz coninutul (textul) unui fiier .html (Hyper Text
Markup Language). Limbajul HTML const ntr-o colecie de marcaje (tag-uri).
Marcajele au rolul de a descrie modul n care va aprea afiat textul, de a comanda
browser-ului s utilizeze i alte resurse Internet, aflate n fiiere diferite.
Sintaxa unui marcaj este:
<NumeTag [parametri ]> text </NumeTag>
97
CODE valoarea lui este numele fiierului care conine clasa applet-
ului: NumeClasa.class;
WIDTH valoarea lui este limea ferestrei atribuit de browser applet-
ului la afiarea documentului .html;
HEIGHT valoarea lui este nlimea ferestrei atribuit de browser
applet-ului la afiarea documentului .html;
Parametrii opionali:
CODEBASE valoarea lui este adresa URL (Universal Resource
Locator) sau calea la fiierul cu clasa applet-ului. Dac parametru
lipsete, cutarea clasei se face n directorul curent (cel din care a fost
ncrcat fiierul .html);
VSPACE valoarea lui este nlimea zonei (exprimat n pixeli) care
se las liber deasupra i dedesubtul ferestrei applet-ului;
HSPACE valoarea lui este limea zonei (exprimat n pixeli) care se
las liber n stnga i n dreapta ferestrei applet-ului;
ALT Specific textul ce trebuie afiat dac browser-ul nelege
marcajul <APPLET> dar nu poate rula applet-uri Java.
NAME Ofer posibilitatea de a da un nume respectivei instane a
applet-ului, astfel nct mai multe applet-uri aflate pe aceeai pagin s
comunice ntre ele folosindu-se de numele lor.
ALIGN Semnific modalitatea de aliniere a applet-ului n pagina Web.
Acest atribut poate primi una din urmtoarele valori: left, right,
top, texttop, middle, absmiddle, baseline, bottom,
absbottom, semnificaiile lor fiind aceleai ca i la marcajul IMG.
Marcajul <PARAM> nu este obligatoriu i poate s apar atunci cnd se
dorete ca applet-ul s preia parametrii. Un parametru este definit prin:
NAME reprezint numele variabilei recunoscut de applet;
VALUE reprezint valoarea recepionat de applet; este de tip String.
8.5. Exemple
98
import java.awt.*;
99
Documentul .html este:
<HTML>
<HEAD>
<TITLE> Figuri geometrice </TITLE>
</HEAD>
<BODY>
<APPLET CODE="app2.class" WIDTH=300 HEIGHT=200>
</APPLET>
</BODY>
</HTML>
100
import java.awt.Graphics;
import java.awt.Font;
g.setFont (fon);
stil = fon.getStyle();
if ( stil == Font.PLAIN)
str = "Plin";
else if (stil == Font.BOLD)
str = "Bold";
else if (stil == Font.ITALIC)
str = "Italic";
else
str = "Bold italic";
dim = fon.getSize();
str += dim + " puncte ";
nume = fon.getName();
str += nume;
}
}
101
Exemplu 5: Deseneaz un poligon i l copiaz ntr-o alt zon a ferestrei.
import javax.swing.JApplet;
import java.awt.*;
102
public class app7 extends JApplet {
int xValues[] = {20, 40, 50, 30, 20, 15, 20};
int yValues[] = {20, 20, 30, 50, 50, 30, 20};
103
String sm=getParameter("m"),
sn=getParameter("n");
m=Integer.parseInt(sm);
n=Integer.parseInt(sn);
s=new Integer(m+n).toString();
}
104
9. Interfee grafice
n Java exist dou pachete de clase care ofer servicii grafice: java.awt i
javax.swing. n acest curs ne vom ocupa de pachetul Swing care este o extensie a
pachetului awt. "Swing" a fost numele de cod dat proiectului care dezvolta
componente noi. ncepnd cu javax.swing este numele pachetelor pentru Swing
API.
105
Majoritatea obiectelor grafice sunt subclase ale clasei JComponent, clas
care definete generic o component grafic care poate interaciona cu utilizatorul.
Aadar, printr-o component grafic vom nelege orice obiect care are o
reprezentare grafic ce poate fi afiat pe ecran i care poate interaciona cu
utilizatorul. Exemple de componente sunt ferestrele, butoanele, bare de defilare, etc.
n general, toate componentele sunt definte de clase proprii ce se gsesc n pachetul
javax.swing, clasa JComponent fiind superclasa abstract a tuturor acestor clase.
Crearea obiectelor grafice nu realizeaz automat i afiarea lor pe ecran. Mai
nti ele trebuie aezate pe o suprafa de afiare, care poate fi o fereastr sau
suprafaa unui applet, i vor deveni vizibile n momentul n care suprafaa pe care
sunt afiate va fi vizibil. O astfel de suprafa pe care se aeaz obiectele grafice
reprezint o instan a unei clase obinut prin extensia clasei Container; din acest
motiv suprafeele de afiare vor mai fi numite i containere. Clasa Container este o
subclas aparte a clasei Component, fiind la rndul ei superclasa tuturor suprafeelor
de afiare Java (ferestre, applet-uri, etc).
Pachetul Swing ofer programelor care folosesc componentele lui posibilitatea
s-i aleag natura interfeei (look and feel) sau, pur i simplu, s o conserve pe
cea caracteristic platformei respective.
9.2.1. Exemple
106
12. public void actionPerformed(ActionEvent e) {
13. nrClick++;
14. eticheta.setText(Prefix + nrClick);
15. }
16. });
17. JPanel panou = new JPanel();
18. panou.setBorder(BorderFactory.createEmptyBorder(
30,30,10,30));
19. panou.setLayout(new FlowLayout());
20. panou.add(buton);
21. panou.add(eticheta);
22. return panou;
23. }//creazaComponente
24.
25. public static void main(String[] args) {
26. try {
27. UIManager.setLookAndFeel(
UIManager.getLookAndFeel());
28. }catch (Exception e) { }
29. JFrame frame = new JFrame("Prima aplicatie
Swing");
30. SwingTest app = new SwingTest();
31. Component comp = app.creazaComponente();
32. frame.getContentPane().add(comp);
33. frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
34. frame.pack();
35. frame.setVisible(true);
36. }//main
37. }//class
107
4. public void init() {
5. JLabel eticheta=new JLabel("O eticheta
frumoasa!");
6. eticheta.setHorizontalAlignment(JLabel.CENTER);
7. label.setBorder(BorderFactory.createMatteBorder(
1,1,2,2,Color.black));
8. getContentPane().add(eticheta,
BorderLayout.CENTER);
9. }
10. }
108
9.2.2.3 Manipularea evenimentelor
Aplicaia din exemplu 1 conine dou evenimente tratate. Una trateaz click-ul
pe buton (action events); cealalt trateaz nchiderea ferestrei (window events):
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numClicks++;
label.setText(labelPrefix + numClicks);
}
});
...
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
109
9.3.1. Clasa JFrame
Cteva dintre metodele cele mai folosite ale clasei JFrame sunt prezentate n
continuare.
Metoda pack() este folosit pentru a da o dimensiune frame-ului. O
alternativ pentru pack() este setarea explicit a dimensiunii frame-ului prin
apelarea metodei setSize(). n general, folosirea lui pack() este preferabil
folosirii lui setSize(), deoarece pack() las n seama layout manager-ului calculul
dimensiunii frame-ului care ine seama i de ali factori care pot afecta dimensiunea
componentelor.
Metoda setVisible() este folosit pentru a afiarea frame-ului.
Metoda getContentPane() returneaz obiectul contentPane al frame-ului.
Orice component se adaug pe contentPane-ul frame-ului curent.
Exemplu 4:
110
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}
}
Exemplu 5:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
111
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(
UIManager.getLookAndFeel());
} catch (Exception e) { }
112
JOptionPane.showConfirmDialog fereastr modal nzestrat
cu dou butoane.
Exemplu 7:
JOptionPane.showConfirmDialog(
null,
"Alege un buton",
"Fereastra de confirmare",
JOptionPane.YES_NO_OPTION);
113
Metodele showMessageDialog, showConfirmDialog i showOptionDialog
returneaz un ntreg semnificnd opiunea utilizatorului. Valorile acestui ntreg pot fi
YES_OPTION, NO_OPTION, CANCEL_OPTION, OK_OPTION i CLOSED_OPTION.
Exemplu 8:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
frame.pack();
frame.setVisible(true);
}
}
114
9.3.3. Clasa JWindow
}
}
115
9.3.4. Clasa JApplet
116
avea o margine (border).
Scroll Furnizeaz scroll bar (orizontal i vertical) pentru
Pane componentele prea mari.
Split Afieaz dou componente ntr-un spaiu fix, oferind
Pane utilizatorului posibilitatea s redimensioneze fiecare
component.
Tabbed Conine mai multe componente dar afieaz numai
Pane una la un moment dat. Utilizatorul poate alege ntre
componente.
Tool Grupeaz componentele (n general butoane) ntr-o
Bar linie sau o coloan, permind utilizatorului s o mute
oriunde.
117
JFrame frame = new JFrame("Doar un exemplu");
JTextArea t = new JTextArea(20, 40);
JScrollPane scrpane=new JScrollPane(t);
scrpane.setPreferredSize(new Dimension(100, 100));
frame.getContentPane().add(scrpane);
for(int i=0;i<100;i++)
t.append(i+"\n");//(new Integer(i)).toString());
import java.awt.*;
import java.awt.event.*;
118
//Se adauga tabbed pane-ul pe panel.
setLayout(new GridLayout(1, 1));
add(tabbedPane);
}
frame.getContentPane().add(
new AplicTabbed(), BorderLayout.CENTER);
frame.setSize(400, 125);
frame.setVisible(true);
}
}
Un program poate avea interfee diferite, chiar dac sunt folosite aceleai
componente. Acest lucru se datoreaz folosirii a diferii gestionari de poziionare
care controleaz dimensiunea i poziiile componentelor.
Gestionarea poziionrii este procesul prin care se determin dimensiunea i
poziia componentelor. Implicit, fiecare container are un gestionar de poziionare
119
un obiect care gestioneaz poziionarea fiecrei componente de pe container. Acest
obiect implementeaz interfaa LayoutManager. Acesta poate fi nlocuit cu altul care
s fie pe msura cerinelor. n general, se seteaz gestionarul de poziionare pentru
dou tipuri de containere: contentpane (folosete implicit BorderLayout) i
JPanel (folosete implicit FlowLayout).
De cte ori se adaug o component pe container trebuie inut cont de
gestionarul de poziionare al containerului respectiv.
De exemplu:
JPanel jp = new JPanel();
jp.setLayout(new BorderLayout());
9.5.1.1 BorderLayout
BorderLayout este layout manager-ul implicit pentru fiecare container
principal. Un BorderLayout are cinci zone n care pot fi aezate componentele:
nord, sud, est, vest i centru.
Exemplu 12:
120
1. import javax.swing.*;
2. import java.awt.*;
3. import java.awt.event.*;
9.5.1.2 BoxLayout
Exemplu 13:
121
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);}
});
f.pack();
f.setVisible(true);
}
}
122
9.5.1.3 CardLayout
Clasa CardLayout permite implementarea unei arii care conine diferite
componente la momente diferite. Tabbed pane-urile sunt containere intermediare
care furnizeaz o funcionalitate similar. Un CardLayout este n general controlat
de un Combo Box, starea lui determinnd panel-ul de afiat.
Exemplu 14:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public AplicCardWindow() {
Container contentPane = getContentPane();
contentPane.add(cbp, BorderLayout.NORTH);
cards.add(p1, BUTONPANEL);
cards.add(p2, TEXTPANEL);
contentPane.add(cards, BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
123
}
9.5.1.4 FlowLayout
FlowLayout este layout manager-ul implicit pentru orice JPanel. Aeaz
componentele de la stnga spre dreapta, de sus n jos.
Exemplu 15:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
124
adaugBut("Buton 4 foarte lung", contentPane);
adaugBut("Buton 5", contentPane);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);}
});
f.pack();
f.setVisible(true);
}
}
Rezultatul execuiei acestui program este:
9.5.1.5 GridLayout
GridLayout-ul aeaz componentele n celulele unui tabel. Fiecare
component ocup tot locul disponibil din celul. Toate celulele au aceeai
dimensiune. La redimesionarea ferestrei GridLayout-ului, celulele i vor schimba
dimensiunile astfel nct s fie ocupat tot spaiul ferestrei.
Clasa GridLayout are doi constructori:
public GridLayout(int rows, int columns)
public GridLayout(int rows, int columns,
int horizontalGap, int verticalGap)
Cel puin unul din cele dou argumente rows i columns trebuie s fie nenul.
Argumentele horizontalGap i verticalGap din cel de-al doilea constructor permit
specificarea numrului de pixeli dintre celule. Implicit ele au valoarea 0.
Exemplu 16:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
125
contentPane.setLayout(new GridLayout(0,2));
contentPane.add(new JButton("Buton 1"));
contentPane.add(new JButton("2"));
contentPane.add(new JButton("Buton 3"));
contentPane.add(new JButton("Buton 4 foarte lung"));
contentPane.add(new JButton("Buton 5"));
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);}
});
f.pack();
f.setVisible(true);
}
}
9.5.1.6 GridBagLayout
GridBagLayout este cel mai sofisticat i flexibil layout manager pe care
platforma Java l furnizeaz. Aeaz componentele n celulele unui tabel, fiecare
component putnd s ocupe mai multe celule. Liniile / coloanele tabelului nu este
obligatoriu s aib aceeai nlime / lime. Pentru fiecare component care se
adaug pe fereastr se seteaz o serie de constrngeri prin crearea unui obiect al
clasei GridBagConstraints. Aceeai instan a lui GridBagConstraints
poate fi folosit pentru mai multe componente, chiar dac ele au constrngeri
diferite. GridBagLayout extrage valorile constrngerilor i nu refolosete
GridBagConstraints. Clasa conine urmtoarele atribute care pot fi setate:
gridx, gridy Specific linia i coloana colului din stnga sus a
componentei. Coloana cea mai din stnga are gridx=0 iar linia cea mai de sus are
gridy=0.
126
gridwidth, gridheight Reprezint numrul de coloane (pentru
gridwidth) sau de linii (pentru gridheight) pe care va fi afiat componenta. Valoarea
implicit este 1.
fill Este folosit atunci cnd aria de afiare a componentei este mai mare
dect dimensiunea cerut, pentru a determina cum poate fi redimensionat
componenta. Valorile valide sunt:
NONE (implicit),
HORIZONTAL (mrete componenta pe orizontal astfel nct s
acopere ntreaga suprafa disponibil dar nu schimb nlimea),
VERTICAL (mrete componenta pe vertical astfel nct s
acopere ntreaga suprafa disponibil dar nu schimb limea),
BOTH (mrete componenta astfel nct s acopere ntreaga
suprafa disponibil.
ipadx, ipady Folosite pentru redimensionarea celulelor. Specific ct
trebuie adunat la dimensiunea minim a componentei. Valoarea implicit este 0.
Limea / nlimea va avea valoarea minim plus ipadx*2 / ipady*2 pixeli (se aplic
n ambele capete ale componentei).
insets Specific distana dintre component i colurile suprafeei pe care
se afieaz. Valoarea atribuit este un obiect Insets.
anchor Este folosit atunci cnd componenta este mai mic dect suprafaa
pe care urmeaz s fie afiat, pentru a determina unde se plaseaz componenta.
Valori valide sunt CENTER (implicit), NORTH, NORTHEAST, EAST, SOUTHEAST,
SOUTH, SOUTHWEST, WEST i NORTHWEST.
weightx, weighty Folosite pentru a determina modul n care s fie
repartizat spaiul dintre coloane / linii. Dac nu se specific nici o valoare (implicit
este 0) atunci toate componentele vor fi grupate n centru container-ului deoarece
GridBagLayout pune orice spaiu n plus ntre tabel i colurile container-ului.
Exemplu 17:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
127
public AplicGridBagLayout() {
JButton buton;
Container contentPane = getContentPane();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
contentPane.setLayout(gridbag);
if (shouldFill) {
//inaltime implicita, latime maxima
c.fill = GridBagConstraints.HORIZONTAL;
}
128
c.gridx = 1; //componenta se alinieaza cu
butonul 2
c.gridwidth = 2; //ocupa latimea a doua butoane
c.gridy = 2; //se afla pe a treia linie
gridbag.setConstraints(buton, c);
contentPane.add(buton);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
129
buton, Enter dup introducerea unui text ntr-
un cmp, selectarea ntr-un meniu)
ComponentListener redimensionri, deplasri, ascunderi ale
unei componente
FocusListener preluare / pierdere focus
ItemListener selecie / deselecie obiect n list,
meniu, etc.
TextListener modificarea textului din control
AdjustmentListener modificarea unei valori variind ntre
dou limite (ex: ScrollBar)
KeyListener acionarea unei taste
MouseListener apsarea butonului mouse-ului n timp
ce cursorul se afl pe componenta respectiv
MouseMotionListener drag; micarea mouse-ului pe o
component
WindowListener nchidere, minimizare, maximizare etc.
ContainerListener adugare, tergere component
ListSelectionListener schimbarea seleciei ntr-o tabel sau
ntr-o list
130
nregistrat n lista asculttorilor componentei respective. Am spus list, deoarece
evenimentele unei componente pot fi ascultate de oricte clase - cu condiia ca
acestea s fie nregistrate la componenta respectiv. nregistrarea unei clase n lista
asculttorilor unei componente se face cu metode din clasa Component de tipul
addXXXListener, iar eliminarea ei din aceasta lista cu removeXXXListener unde
XXX reprezint tipul evenimentului.
Componenta.addActionListener(instantaNumeClasa);
Exemplu 18:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
JButton uB,lB,rB;
JPanel pbut;
131
JTextField txt;
Listener lsn;
TextWorker txtWorker;
public AplicEv() {
uB=new JButton("Majuscule");
lB=new JButton("Minuscule");
rB=new JButton("Sterge");
uB.setActionCommand("ActMajuscule");
lB.setActionCommand("ActMinuscule");
pbut=new JPanel();
pbut.add(uB);
pbut.add(lB);
pbut.add(rB);
txt= new JTextField("Introduceti text!");
lsn=new Listener();
getContentPane().setLayout(new BorderLayout());
getContentPane().add("North",txt);
getContentPane().add("Center",lsn);
getContentPane().add("South",pbut);
txtWorker=new TextWorker(txt);
rB.addActionListener(lsn);
uB.addActionListener(lsn);
lB.addActionListener(lsn);
rB.addActionListener(txtWorker);
uB.addActionListener(txtWorker);
lB.addActionListener(txtWorker);
}
public static void main(String[] args) {
AplicEv f=new AplicEv();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.addWindowListener(f.lsn);
f.setSize(400, 125);
//f.pack();
f.setVisible(true);
}
}
132
if(c.equals("Sterge"))
txt.setText("");
if(c.equals("ActMajuscule")){
String oldText=txt.getText();
String uText=oldText.toUpperCase();
txt.setText(uText);
}
if(c.equals("ActMinuscule")){
String oldText=txt.getText();
String lText=oldText.toLowerCase();
txt.setText(lText);
}
}
}
133
9.7. Folosirea componentelor
134
9.7.6. Clasa JRadioButton
Un obiect de tip JList definete o list de opiuni care poate fi setat astfel
nct utilizatorul s poat selecta o singur opiune sau mai multe. Toate opiunile
listei sunt vizibile n limita dimensiunilor grafice ale componentei.
135
1.7. Crearea unui applet ......................................................................... 5
2. Programarea Orientat pe Obiecte i Java ............................................. 7
2.1. Obiecte i clase................................................................................ 7
2.2. Atribute i comportamente ............................................................... 8
2.2.1. Atribute ........................................................................................ 8
2.2.2. Comportament ............................................................................. 9
2.3. Principiile OOP ................................................................................ 9
3. Elementele de baz ale limbajului de programare Java ........................ 11
3.1. Structura lexical a limbajului ......................................................... 11
3.1.1. Setul de caractere ...................................................................... 11
3.1.2. Cuvinte cheie ............................................................................. 11
3.1.3. Identificatori ............................................................................... 11
3.1.4. Constante .................................................................................. 11
3.1.5. Separatori .................................................................................. 13
3.1.6. Operatori.................................................................................... 13
3.1.7. Comentarii ................................................................................. 17
3.2. Tipuri de date ................................................................................. 17
3.3. Variabile ......................................................................................... 18
3.4. Instruciuni ..................................................................................... 20
3.4.1. Instruciunea vid ....................................................................... 20
3.4.2. Instruciuni de decizie ................................................................ 20
3.4.3. Instruciuni repetitive .................................................................. 23
3.5. Tablouri (vectori) ............................................................................ 28
3.5.1. Tablouri (vectori) unidimensionale ............................................. 28
3.5.2. Tablouri (vectori) cu mai multe dimensiuni ................................. 30
3.5.3. Dimensiunea unui vector ........................................................... 30
3.5.4. Tablouri cu dimensiuni variabile ................................................. 32
3.6. iruri de caractere.......................................................................... 32
4. Clase i obiecte n Java ........................................................................ 34
4.1. Referine ........................................................................................ 34
4.2. Obiecte .......................................................................................... 35
4.2.1. Noiuni generale......................................................................... 35
4.2.2. Operatorul de atribuire = ............................................................ 36
4.2.3. Operatorul de egalitate == ......................................................... 38
136
4.3. Clase .............................................................................................. 39
4.3.1. Definirea claselor ....................................................................... 39
4.3.2. Variabile membru ....................................................................... 40
4.3.3. Metode ....................................................................................... 42
4.3.3.1 Definirea metodelor .............................................................. 42
4.3.3.2 Modificatorii metodelor.......................................................... 42
4.3.3.3 Tipul returnat de o metod .................................................... 43
4.3.3.4 Parametrii unei metode......................................................... 44
4.3.4. Constructorii unei clase .............................................................. 45
4.3.5. Obiectul this ............................................................................. 47
4.3.6. Suprancrcarea i supradefinirea metodelor ............................. 49
4.3.7. Modificatori de acces pentru membrii unei clase ........................ 50
4.3.8. Membrii instan i membrii clas .............................................. 51
4.3.9. Argumente n linia de comand .................................................. 54
4.4. Motenirea ..................................................................................... 56
4.4.1. Principiul motenirii .................................................................... 56
4.4.2. Interfee...................................................................................... 60
4.5. Probleme........................................................................................ 63
5. Pachete ................................................................................................. 71
5.1. Importul unui pachet, al unei clase sau a unei interfee .................. 72
5.2. Crearea unui pachet ....................................................................... 73
6. Excepii ............................................................................................ 78
6.1. Aspecte generale ........................................................................... 78
6.2. Instruciunea try.............................................................................. 79
6.3. Crearea unei excepii ..................................................................... 81
7. INTRRI I IEIRI ................................................................................ 85
7.1. Clasificarea fluxurilor ...................................................................... 86
7.2. Ierarhia claselor pentru lucru cu fluxuri ........................................... 86
7.2.1. Fluxuri de caractere ................................................................... 86
7.2.2. Fluxuri de octei .......................................................................... 87
7.3. Superclasele de intrare / ieire ....................................................... 88
7.4. Crearea unui flux ............................................................................ 89
7.5. Citirea datelor de la tastatur ......................................................... 90
7.5.1. Obiectul System.in ................................................................... 90
137
7.5.2. Clasa InputStreamReader .................................................... 91
7.5.3. Clasa BufferedReader ........................................................... 91
7.6. Citirea i scrierea datelor din fiier ................................................. 92
7.6.1. Clasele FileReader i FileWriter .................................... 92
8. APPLET-URI ............................................................................... 94
8.1. Ce este un applet? ......................................................................... 94
8.2. Funciile unui applet ....................................................................... 95
8.3. Structura general a unui applet .................................................... 96
8.4. HTML ............................................................................................. 97
8.5. Exemple ......................................................................................... 98
9. Interfee grafice ................................................................................... 105
9.1. Ce este o interfa grafic? .......................................................... 105
9.2. Primele aplicaii Swing ................................................................. 106
9.2.1. Exemple................................................................................... 106
9.2.2. Comentarea exemplelor ........................................................... 108
9.2.2.1 Alegerea naturii interfeei.................................................... 108
9.2.2.2 Setarea container-ului principal (din vrful ierarhiei) ........... 108
9.2.2.3 Manipularea evenimentelor ................................................ 109
9.3. Containere principale ................................................................... 109
9.3.1. Clasa JFrame.......................................................................... 110
9.3.2. Ferestre secundare i clasa JDialog ..................................... 111
9.3.3. Clasa JWindow ....................................................................... 115
9.3.4. Clasa JApplet ....................................................................... 116
9.4. Containere intermediare............................................................... 116
9.5. Folosirea gestionarilor de poziionare (Layout Manager) .............. 119
9.5.1. Setarea poziionrii (Layout Managerului) .............................. 120
9.5.1.1 BorderLayout...................................................................... 120
9.5.1.2 BoxLayout .......................................................................... 121
9.5.1.3 CardLayout......................................................................... 123
9.5.1.4 FlowLayout ......................................................................... 124
9.5.1.5 GridLayout.......................................................................... 125
9.5.1.6 GridBagLayout ................................................................... 126
9.6. Tratarea evenimentelor ................................................................ 129
138
9.6.1. Exemplu de tratare a unui eveniment ....................................... 131
9.7. Folosirea componentelor .............................................................. 134
9.7.1. Clasa JLabel ............................................................................ 134
9.7.2. Clasa JButton........................................................................... 134
9.7.3. Clasa JTextField ...................................................................... 134
9.7.4. Clasa JTextArea ...................................................................... 134
9.7.5. Clasa JCheckBox ..................................................................... 134
9.7.6. Clasa JRadioButton ................................................................. 135
9.7.7. Clasa JComboBox ................................................................... 135
9.7.8. Clasa JList ............................................................................... 135
9.7.9. Clasa JScrollBar ...................................................................... 135
139