Sunteți pe pagina 1din 26

1.

Elemente introductive
nelegem prin tehnologie Java reuniunea dintre un limbaj de programare orientat
obiect i o platform dezvoltat de compania Sun Microsystems. Tehnologia Java se bazeaz
pe conceptul de main virtual Java (JVM- Java Virtual Machine). Toate implementrile
existente emuleaz JVM permind astfel unui program Java s ruleze pe orice sistem.
Spre deosebire de alte limbaje de programare, Java utilizeaz i compilarea
programelor surs. Compilarea se efectueaz o singur dat i are ca efect translatarea
programelor surs ntr-un limbaj intermediar numit Java Bytecode, care nu este altceva
dect limbajul cunoscut de ctre maina virtual Java. Interpretarea are loc de fiecare dat
cnd programul Java compilat este lansat n execuie. Interpretorul este o implementare a
mainii virtuale Java.
Platforma Java este furnizat sub forma a trei versiuni, fiecare n parte, constnd n:
Main virtual Java;
Java API (API- Application Programming Interface)
O colecie bogat de componente software gata de utilizat pentru a uura
eforturile de dezvoltare de aplicaii.
Interfaa de programare (API) Java este compus din biblioteci cunoscute aici sub
numele de pachete (packages).
Principalul beneficiu adus de tehnologia Java rezid n portabilitate. Aplicaiile Java
ruleaz pe o varietate impresionant de sisteme hardwarei sisteme de operare. De asemenea
este un avantaj faptul c limbajul Java este scalabil permind astfel realizarea de aplicaii
pentru dispozitive cu resurse foarte limitate.
Securitatea accesului la informaie este un alt punct forte al acestei tehnologii, dat
fiind faptul c aceasta este gndit ca o tehnologie pregtit pentru internet (Internet-ready).
i nu n ultimul rnd Java este o tehnologie deschis (open), ceea ce duce la o dinamic
ridicat n privina extinderii, actualizrii i depanrii acesteia.
Limbajul de programare Java a fost folosit la dezvoltarea unor tehnologii dedicate
rezolvrii unor probleme din cele mai diverse domenii. Aceste tehnologii au fost grupate n
aa numitele platforme de lucru, ce reprezint seturi de librrii scrise n Java, precum i
diverse programe utilitare, folosite pentru dezvoltarea de aplicaii sau componente destinate
unei anume categorii de utilizatori.
Sun Microsystems a creat trei versiuni de platforme Java: Standard Edition,
Enterprise Edition, i Micro Edition.

Java 2 Standard Edition (J2SE) cuprinde un sistem de dezvoltare (SDK- System


Developement Kit), unelte(tools), componente runtime i API-uri pentru programatorii
care doresc s scrie aplicaii n limbajul Java.
De asemenea, aici este inclus i tehnologia JavaWeb Start ce furnizeaz o modalitate
extrem de facil pentru lansarea i instalarea local a programelor scrise n Java direct de pe
Web, oferind cea mai comod soluie pentru distribuia i actualizarea aplicaiilor Java.

Java 2 Enterprise Edition (J2EE) i propune s simplifice dezvoltarea i exploatarea


aplicaiilor complexe de tip multistrat (multitier), prin utilizarea de componente modulare i
standardizate. Dea semenea, furnizeaz pentru aceste componente un set complet de servicii
i reduce efortul de programare prin gestiunea automat a anumitor modele
comportamentale.

1
Aceast platform ofer API-ul necesar dezvoltrii de aplicaii complexe, formate din
componente ce trebuie s ruleze n sisteme eterogene, cu informaiile memorate n baze de
date distribuite, etc. Tot aici gsim i suportul necesar pentru crearea de aplicaii i servicii
Web, bazate pe componente cum ar fi servleturi, pagini JSP, etc.

Java 2 Micro Edition (J2ME) se adreseaz segmentului de echipamente de larg


consum. Platforma este scalat corespunztor pentru a face fa resurselor spartane existente
n aceste echipamente (telefoane, bunuri de uz-casnic etc).

Toate distribuiile Java sunt oferite gratuit i pot fi descrcate de pe Internet de la


adresa http://java.sun.com.

Continund procesul de rafinare, putem observa c fiecare platform n parte include


o serie de componente, pachete opionale sau extensii ce vor fi prezentate pe scurt n cele ce
urmeaz.

Java 2 Standard Edition (J2SE)


Platforma Java 2 Standard Edition (J2SE) include printre altele:
Java Beans Component Arhitecture: este o specificaie independent de platform
care definete un set de API-uri standard pentru componente software.
Javadoc: este o unealt pentru a genera documente n format HTML, referitoare la
codul surs dezvoltat.
Java Foundation Classes (SWING): reprezint o colecie de biblioteci care ofer
suportul necesar construirii interfeelor grafice utilizator pentru aplicaii Java.
Java 2D API: bibliotec pentru grafic bidimensional i prelucrarea de imagini.
Java Database Connectivity (JDBC): este o interfa de programare (API) care
permite accesul din Java la baze de date sau alte colecii de date de tip tabelar (cum ar
fi foile de calcul- spreadsheets).
Remote Method Invocation (RMI): permite programatorului s creeze aplicaii Java
distribuite n care metode ale unor obiecte Java aflate la distan (remote) pot fi
apelate de ctre maini virtuale Java care ruleaz pe sisteme diferite.
Java Authenticated and Authorization Service (JAAS): bibliotec pentru procedurile
de autentificare ale utilizatorilor i pentru controlul accesului acestora.
Java Criptography Extension (JCE): bibliotec pentru implementarea algoritmilor de
criptare a informaiilor, generarea de chei de criptare i a algoritmilor de autentificare
a mesajelor.
Java Media Framework (JMF): permite adugarea elementelor multimedia (audio,
video etc) aplicaiilor Java.
Java Secure Socket Extension (JSSE): bibliotec pentru comunicarea sigur ntre
reele de calculatoare. Implementeaz, n versiune Java, protocoalele SSL(Secure
Socket Layer) i TLS (Transport Layer Security). Include funciuni pentru criptarea
datelor, autentificarea serverelor, integritatea mesajelor.
Java Speech API (JSAPI) permite aplicaiilor Java s ncorporeze tehnologii bazate pe
voce n interfeele utilizator.
Java 3D este o bibliotec pentru grafic tridimensional, independent de platform.

2
Java 2 Enterprise Edition (J2EE)

Java API for XML Processing (JAXP) permite procesarea documentelor XML.
Common Object Request Broker Architecture (CORBA) este un standard deschis
pentru calcul eterogen care completeaz platforma prin furnizarea unui cadru de lucru
cu obiecte distribuite, de servicii pentru acesta i interoperabilitate cu alte limbaje.
Enterprise Java Beans (EJB) utilizeaz componente model pentru a simplifica
dezvoltarea aplicatiilor prin furnizarea suportului pentru servicii ca tranzacii,
securitate, conectare la bbaze de date etc.
Java Mail este o interfa de programare (API) care furnizeaz un set de obiecte
abstracte ce modeleaz un sistem de pot electronic.
Java Messaje Service (JMS) este o API care asigur cadrul pentru dezvoltarea de
aplicaii portabile, bazate pe mesaje prin definirea unei mulimi de concepte i
strategii de programare suportate de toate tehnologiile JMS compatibile.
Java Server Page (JSP) permite dezvoltatorilor web s produc rapid i s ntrein
cu uurin pagini web dinamice, independente de platform. JSP permite ca paginile
s aib separat partea de interfa utilizator de partea de generare de coninut astfel c
se poate modifica aspectul paginii fr a altera coninutul acesteia.
Java Servlets reprezint modalitatea prin care Java realizeaz extinderea
capabilitilor serverelor WEB. Furnizeaz componente pentru dezvoltarea de
aplicaii WEB fr limitrile impuse de programarea CGI (Common gateway
Interface).

Java 2 Micro Edition (J2ME)

Connected Limited Device Configuration (CLDC) pregtete mediul de execuie java


pentru a fi potrivit dispozitivelor ce conin resurse limitate specifice platformei J2ME.
CLDC contureaz setul de biblioteci de baz i caracteristicile mainii virtuale care
trebuie s existe n implementarea respectivului mediu J2ME.
Mobile Information Device Profile (MIDP) furnizeaz nucleul de funcionalitate al
aplicaiei incluznd interfaa utilizator, conectarea la reea, memorarea de date.
Connected Device Configuration (CDC) reprezint un cadru de lucru standard pentru
construirea i distribuirea aplicaiilor care pot fi partajate peste o reea de
comunicaie.

Setul de caractere
Limbajului Java lucreaz n mod nativ folosind standardul Unicode. Unicode
nlocuiete vechiul standard ASCII pentru reprezentarea caracterelor. Astfel devine posibil
reprezentarea a mai mult de 256 de caractere pentru ca Unicode utilizeaz 16 bii n acest
scop. Vechiul standard ASCII se regsete ns ca un subset al setului Unicode.
Java folosete standardul Unicode att n timpul rulrii aplicaiilor ct i n timpul
compilrii acestora. Compilatorul Java accept la intrare fiiere surs care pot conine orice
caractere Unicode.

3
Primele 256 caractere Unicode corespund celor ASCII, referirea la celelalte fcndu-
se prin \uxxxx, unde xxxx reprezint codul caracterului.
O alt caracteristic a setului de caractere Unicode este faptul c ntreg intervalul de
reprezentare a simbolurilor este divizat n subintervale numite blocuri, cteva exemple de
blocuri fiind: Basic Latin, Greek, Arabic, Gothic,Currency, Mathematical, Arrows, etc.
Iat cteva exemple de caractere Unicode.
\u0030 - \u0039 : cifre ISO-Latin 0 - 9
\u0660 - \u0669 : cifre arabic-indic 0 - 9
\u03B1 - \u03C9 : simboluri greceti _ !
\u2200 - \u22FF : simboluri matematice (8, 9, ;, etc.)
\u4e00 - \u9fff : litere din alfabetul Han (Chinez, Japonez, Coreean)
Mai multe informaii legate de reprezentarea Unicode pot fi gsite pe Internet la
adresa http://www.unicode.org.

Cuvinte cheie. Cuvinte rezervate


Cuvintele cheie sunt iruri de caractere rezervate de limbaj pentru uzul propriu. Nici
un program nu poate s utilizeze aceste cuvinte pentru un alt scop dect cel definit de limbaj.
Cuvintele cheie nsa pot aparea n iruri de caractere sau comentarii. Cuvintele ngroate din
lista urmtoare reprezint cuvintele cheie ale limbajului. Celelalte sunt cuvinte rezervate. Ele
nu au nici o semnificaie n Java nsa nu pot fi folosite pe post de identificatori.

abstract boolean break byte


case cast catch char
class const continue default
do double else extends
final finally float for
future generic goto if
instance
implements import inner
of
intinterfac
long native new
e
null operator outer package
private protected public rest
return short static super
synchroniz
switch this throw
ed
throws transient try var
void volatile while byvalue

4
Identificatori
Identificatorii Java sunt iruri de caractere (litere i cifre) Unicode, nelimitate, care ncep
obligatoriu cu o liter. Se interzice folosirea unui cuvnt cheie pe post de identificator.
Exemple:

contor
f2
index

Literali
Un literal este o valoare specificat n fiierul surs pentru tipurile de date primitive sau ir de
caractere. n limbajul Java exist urmtoarele tipuri de literali:
literali booleeni
literali caracter
literali ntregi
literali flotani
literali ir de caractere

Literalii booleeni nu pot fi dect true sau false, primul reprezentnd valoarea boolean
de adevr iar cellalt valoarea boolean de fals. true i false nu sunt cuvinte rezervate ale
limbajului Java, cu toate acestea ele nu vor putea fi folosite ca identificatori.

Un literal de tip caracter poate fi formulat simplu prin ncadrarea caracterului dorit ntre
apostrofuri. Aceast tehnic este valabil numai dac respectivul caracter se regsete pe
tastatur. Exemplu:
char c = 'w';
Este posibil s formulm literali de tip caracter specificnd codul Unicode al caracterului
dorit sub forma a 4 cifre hexazecimale precedate de secvena \u. Exemplu:
char c = '\u23a7';

5
Java suport de asemenea i cteva secvene speciale, numite secvene de escape, pentru
denotarea unor caractere speciale:
'\b' caracterul Backspace
'\t' caracterul TAB orizontal
'\n' caracterul LineFeed (LF)
'\f' caracterul FormFeed (FF)
'\r' caracterul Carriage Return (CR)
'\"' caracterul ghilimele
'\'' caracterul apostrof
'\\' caracterul Backslash
Literalii ntregi pot fi reprezentai n baza 10, 16 sau 8. Baza de numeraie zecimal este
considerat implicit. Pentru a indica un literal octal acesta se prefixeaz cu 0 (zero). Literalii
hexazecimali se prefixeaz cu 0x sau 0X. Cifrele hexazecimale litere pot fi scrise att cu
litere mici ct i cu majuscule (case insensitive). Exemple:
28 literal ntreg exprimat n baza de numeraie zecimal
034 literal ntreg exprimat n baza de numeraie octal
0x1c literal ntreg exprimat n baza de numeraie hexazecimal
0x1C literal ntreg exprimat n baza de numeraie hexazecimal
0X1c literal ntreg exprimat n baza de numeraie hexazecimal
0X1C literal ntreg exprimat n baza de numeraie hexazecimal
Implicit un literal ntreg este reprezentat pe 32 de bii. Pentru a indica faptul c este vorba de
un literal reprezentat pe 64 de bii (long) se adaug sufixul L. Poate fi utilizat i litera mic
l, nsa acest lucru nu este de dorit datorit faptului ca adesea se confund cu cifra 1.
Exemple:
1234L sau 5678l
Literalii flotani (sau virgul mobil) reprezint numere reale. Pentru ca o expresie s fie
interpretat ca literal flotant ea trebuie s conin unul din urmtoarele:
punct zecimal. Exemplu: 3.1415926
litera E sau e. Exemplu: 4.1E+10
sufixul F sau f, indicnd o reprezentare pe 32 de bii. Exemplu: 1.56f
sufixul D sau d, indicnd o reprezentare pe 64 de bii. Exemplu: 1234d

6
Dac nu este specificat nici un sufix, valoarea este implicit reprezentat pe 64 de bii.

Un literal ir de caractere const ntr-o secven de caractere ncadrat de ghilimele.


Secvena de caractere poate conine caractere obinuite sau secvene de escape ca cele
definite la literalii caracter. Exemplu:
String s = Secventa de caractere;

Separatori
Separatorii sunt caractere folosite pentru a delimita diversele elemente (uniti lexicale) ale
limbajului. Separatorii particip n acelai timp i la construcia sintaxei limbajului. Ei nu au
un rol identic cu spaiile dei, ca i acestea, separ uniti lexicale diferite. n Java separatorii
sunt urmtorii:
( ) { } [ ] ; , .

Exemple:
v[i]
functie(x)

Comentarii
Un comentariu este o secven de caractere existent n fiierul surs care servete numai la
explicarea sau documentarea programului i nu afecteaz n nici un fel funcionarea acestuia.
n Java exist trei feluri de comentarii:
Comentarii care se ntind pe mai multe linii. Acestea sunt ncadrate de secvenele /*
i */
Comentarii pe mai multe linii care vor fi prelucrate de ctre generatorul automat de
documentaie. Acestea sunt ncadrate de secvenele /** i */
Comentarii pe o singur linie. Acestea ncep cu // i conin caracterele care urmeaz
acestei secvene pn la sfritul liniei.
n Java, nu putem s scriem comentarii n interiorul altor comentarii. De asemenea, nu putem
introduce comentarii n interiorul literalilor caracter sau ir de caractere. Secvenele /* i */
pot s apar pe o linie dup secvena // dar i pierd semnificaia. La fel se ntmpl cu
secvena // n comentarii care ncep cu /* sau /**. Exemple:
/* Comentariu
care se intinde

7
pe mai multe randuri */
/** Comentariu ce va fi preluat
de generatorul de documentatie */
// Comentariu pe un singur rand

Operatori
Operatorii reprezint simboluri grafice pentru operaiile elementare definite de limbajul Java.
Totodt operatorii joac i rol de separatori. n tabelul urmtor sunt prezentai operatorii
elementari ai limbajului Java n ordinea descresctoare a precedenei.
Unari ++ -- + - ! ~ ()
* / %
Aritmetici
+ -
Deplasare << >> >>>
< <= > >=
Comparare
== !=
Pe bit & ^ |
Logici && ||
Condiionali ?:
Atribuire = op=

n Java, spre deosebire de alte limbaje de programare, ordinea de evaluare a operanzilor ntr-
o expresie este fix. Astfel ntotdeauna toi operanzii sunt evaluai de la stnga la dreapta.
Operatorii unari lucreaz asupra unui singur operand. In continuare sunt descrii operatorii
unari elementari ai limbajului Java.
Operatorii de incrementare i decrementare: ++ respectiv --
Modific valoarea unei expresii adugandu-i sau sczndu-i valoarea 1. Spre exemplu dac x
are valoarea 10, atunci ++x va face ca x s aiba valoarea 11, in vreme ce --x va face ca x
sa aiba valoarea 9.
Operatorii ++ i -- pot fi plasai att naintea expresiei (ca n exemplul precedent) cat i
dup aceasta. Pentru a nelege efectul plasrii ntr-un fel sau altul al acestor operatori s
considerm exemplele urmtoare:

(1) y = x++
(2) y = ++x

8
Presupunnd ca x are iniial valoarea 10, valoarea lui y va fi n primul caz 10, iar n al
doilea 11 (vezi ordinea evaluarii operanzilor). n ambele cazuri ns, valoarea lui x va
deveni 11.
Operatorii + i
Trebuie facut distincie ntre aceti operatori i operatorii aritmetici de adunare, respectiv
scdere. Operatorul + nu are nici un efect asupra valorii operandului su, n vreme ce
operatorul va schimba semnul acestuia.
Operatorul de complementare pe bit ~
Acest operator acioneaz la nivelul reprezentrii binare a operandului su transformnd
cifrele 1 ale reprezentarii sale n cifre 0 i invers. Astfel dac am aplica acest operator asupra
unui operand reprezentat pe un octet cu valoarea 00110011 rezultatul obinut ar fi
11001100.
Operatorul boolean de complementare !
Complementeaz valoarea unei expresii booleene. Astfel !true va fi da false iar
!false va da true.

Operatorii de nmulire i mparire * i /


Aa cum arat chiar numele lor efectueaz operaiile de nmulire, respectiv mparire ntre
doi operanzi. Folosirea lor presupune nelegerea limitrilor impuse de formatul de
reprezentare al operanzilor. De pild dac vom nmuli doi operanzi ntregi rezultatul se va
calcula conform regulilor aritmeticii numerelor ntregi, ns avnd n acelai timp grija ca
rezultatul obinut s nu depeasc formatul de reprezentare. Dac acest lucru se ntmpl
atunci valoarea obinut pentru rezultat nu va avea semnificaia corect.
Operatorul modulo %
Semnificaia rezultatului unei operaii modulo este aceea de rest al unei mpriri ntregi.
Astfel dac, de exemplu, vom efectua mprirea ntreag a lui 7 la 4 vom obine ctul 1 i
restul 3. Acest lucru l scriem in Java sub forma expresiei 7 % 4, iar valoarea acesteia va fi
3.
Dei pare natural s aplicm acest operator numai asupra unor operanzi ntregi, n Java este
posibil s l folosim i cu operanzi numere reale.
Regula dup care se obine rezultatul operaiei modulo n Java este urmtoarea:
1. Se micoreaz valoarea absolut a primului operand (din stnga) cu valoarea absolut
a celui de-al doilea operand (din dreapta)

9
2. Se repeta pasul 1 pn cnd valoarea absolut a rezultatului obinut la pasul 1 este
este mai mic dect valoarea absolut a celui de-al doilea operand (cel din dreapta).
Aceast ultim valoare este rezultatul operaiei modulo.
Pentru exemplificare considerm urmtoarele cazuri:
(1) 17 % 5
17 5 = 12
12 5 = 7
7 5 = 2
2 < 5 STOP. Rezulta ca 17 % 5 = 2
(2) 7.6 % 2.9
7.6 2.9 = 4.7
4.7 2-9 = 1.8
1.8 < 2.9 STOP. Rezulta ca 7.6 % 2.9 = 1.8
(3) -5 % 2
Ca sa micsoram valoarea absoluta cu 2 trebuie sa
efectuam adunari
-5 + 2 = -3
-3 + 2 = -1
Valoarea absoluta a lui -1 este 1,
iar 1 < 2. STOP. Rezulta ca -5 % 2 = -1
(4) -5 % -2
-5 + 2 = -3
-3 + 2 = -1
Valoarea absoluta a lui -1 este 1,
iar 1 < 2. STOP. Rezulta ca -5 % -2 = -1
Operatorii de adunare i scadere + i
Efectueaz adunarea, respectiv scderea operanzilor. Se aplic operanzilor de tip numeric
indiferent de tip. De asemenea folosirea acestor operatori presupune nelegerea limitrilor
impuse de formatul de reprezentare al operanzilor, altfel rezultatul obinut este unul far o
semnificaie corect.
Deplasarea este o operaie care acioneaz la nivelul reprezentrii unui numr. Pe scurt
reprezentarea binar operandului numr este deplasata spre stnga sau spre dreapta cu un
anumit numar de poziii (ranguri binare). Operatorii de deplasare se pot aplica numai

10
operanzilor de tip ntreg. Mecanismul de baz al operaiilor de deplasare este ilustrat in
figurile urmtoare.
Valoare operand: 192
Reprezentare
00000000 00000000 00000000 11000000
binar
Deplasare
spre stnga 0 00000000 00000000 00000001 1000000?
cu 1 poziie
Deplasare
spre dreapta ?0000000 00000000 00000000 01100000 0
cu 1 poziie
Deplasare
spre stnga 0000 00000000 00000000 00001100 0000????
cu 4 poziii

Valoare operand: 192


Reprezentare
11111111 11111111 11111111 01000000
binar
Deplasare
spre stnga 1 11111111 11111111 11111110 1000000?
cu 1 poziie
Deplasare
spre dreapta ?1111111 11111111 11111111 10100000 0
cu 1 poziie

Urmrind exemplele de mai sus se ridic dou ntrebri:


(1) Pentru c rezultatul operaiei de deplasare va avea acelai numr de bii la nivelul
reprezentrii, ce se ntmpl cu biii care prsesc formatul de reprezentare (valorile
0 sau 1 ngroate) ?
(2) Ce valori vor avea biii care sunt introdui in reprezentarea rezultatului (cei marcai
prin semne de ntrebare) ?
Prima ntrebare are un rspuns foarte simplu, biii care prsesc formatul de reprezentare
sunt ignorai, deci se pierd. Cea de-a doua ns presupune discutarea mai multor situaii.
Astfel, n cazul operatorilor de deplasare spre stnga << i deplasare spre dreapta fr semn
>>>, biii cei noi vor avea valoarea 0. n cazul deplasrii spre dreapta cu semn >>, biii cei
noi vor lua valoarea avut de cel mai semnificativ bit din reprezentare, nainte de operaia de
deplasare. Revenind la exemplele precedente, n cazul deplasrii spre dreapta a numarului
192 valoarea bitului nou introdus va fi 0, n vreme ce aceeai operaie de deplasare efectuat
asupra lui 192 va determina introducerea unui bit 1 n formatul de reprezentare.

11
Aplicarea operatorilor de comparare (<,<=,>,>=,== i !=) duce la obinerea unui rezultat
boolean; cu alte cuvinte expresia care conine aceti operatori poate avea valoarea true sau
false. Semnificaia acestor operatori este:
< mai mic
<= mai mic sau egal
> mai mare
>= mai mare sau egal
== egal
!= diferit
Exist trei tipuri de comparare. Primul tip este compararea ordinal cu ajutorul creia testm
relaia ntre valorilor operanzilor numerici. Al doilea tip este comparare obiectual utilizat
atunci cnd dorim s testm, de pild, dac un obiect este de un anumit tip. Al treilea tip l
reprezint testul de egalitate cu ajutorul cruia testm identitatea a dou valori. Testul de
egalitate poate fi aplicat i asupra operanzilor ne-numerici.
Exemple:
int p = 9;
int q = 65;
int r = -12;
float f = 9.0;
char c = 'A';
urmtoarele operaii de comparare vor avea rezultatul true.
p < q
f < q
f <= c
c > r
c >= q

Operatorii pe bit &, ^ i | se utilizeaz mpreun cu operanzi ntregi. Aceti operatori ofer
posibilitatea de a efectua operaiile AND, XOR respectiv OR ntre reprezentrile binare ale
operanzilor. Exemple:
00110011
11110000
AND
00110000
00110011
11110000
XOR
11000011

12
00110011
11110000
OR
11110011

Operatorii logici sau booleeni, && i ||, se utilizeaz mpreun cu operanzi booleeni
efectund operaiile logice AND respectiv OR ntre acetia. Nu trebuie confundai cu
operatorii pe bit care implementeaz aceleai operaii logice pentru c tipul operanzilor este
diferit.
Operatorul condiional ?:, cunoscut i sub numele de operator ternar, ofer un mijloc simplu
i eficient de a codifica in Java o condiie sub forma unei singure expresii. Forma acesteia
este:
e1 ? e2 : e3
Mai nti este evaluat expresia e1, care trebuie s fie o expresie boolean. Dac aceasta este
true, rezultatul expresiei de mai sus este dat de valoarea expresiei e2. n caz contrar
expresia va avea ca rezultat valoarea lui e3. Exemplu:
a = x ? b : c;
Operatorul de atribuire asigneaz o valoare unei variabile. Operatorul simplu de atribuire este
=, ns n Java exist si operatorii compui de tip Calculeaz i atribuie de forma op=.
Pentru dou expresii compatibile x i y, expresia
x op= y este echivalent cu x = x op y.
Toi operatorii discutai pn acum produceau o valoare ca urmare a aplicarii lor asupra unor
operanzi. n Java atribuirea este de asemenea considerat operator deoarece are o valoare
rezultat. Astfel n Java instruciunea a=b=c=0; este perfect valabil. Ea este executat de la
dreapta la stnga ncepnd deci prin a asigna valoarea 0 lui c. Dup executarea acesteia
expresia c = 0 ia o valoare (care este evident 0 n acest exemplu) ce va fi atribuit mai
departe lui b.

Variabile. Declaraii de variabile


O variabil identific o zon de memorie care poate stoca o valoare de un anumit tip. Chiar
dac se numesc variabile exist cazuri n care nu este permis modificarea valorii acestora,
situaie n care avem de-a face cu aa-numitele variabile finale. Orice variabil trebuie s fie
declarat pentru a putea fi folosit. Aceast declaraie trebuie s specifice tipul valorilor care

13
pot fi stocate n zona de memorie rezervat variabilei i de asemenea un nume pentru
variabila declarat. n forma cea mai simpl, declaraia unei variabile arat n felul urmtor:
Tip NumeVariabila [, NumeVariabila] ;
Numele variabilei declarate este un identificator Java. Tipul unei variabile poate fi fie unul
dintre tipurile primitive definite de limbajul Java fie o referin. n Java este definit foarte
exact modalitatea de reprezentare a acestor tipuri primitive n memorie realizndu-se astfel
independena de platforma hardware i software pe care se lucreaz. De asemenea sunt
definite valori implicite pentru fiecare tip de dat, n cazul n care aceastea nu au fost
iniializate de ctre utilizator, cunoscndu-se astfel ntotdeauna valoarea cu care o variabil
intr n calcul. n Java putem iniializa variabilele chiar n momentul declarrii acestora:
Tip NumeVariabila = ValoareInitiala ;
Valoarea iniial trebuie s fie de acelai tip cu tipul variabilei sau s poat fi convertit ntr-o
valoare de acest tip.
O varibil de un tip primitiv conine o singur valoare cu dimensiune i format corespunztor
tipului su de date: numeric, caracter sau boolean. De exemplu, o valoare ntreag este
reprezentat pe 32 de bii n cod complement fa de 2.
n tabelul urmtor sunt prezentate toate tipurile primitive de date, suportate de Java,
incluznd formatul de reprezentare al acestora.

Cuvnt
Descriere Format de reprezentare
cheie
(numere ntregi)
byte ntreg reprezentat pe octet 8-bii, complement fa de 2
short ntreg scurt 16-bii, complement fa de 2
int ntreg 32-bii, complement fa de 2
long ntreg lung 64-bii, complement fa de 2
(numere reale)
float virgul mobil simpl precizie 32-bii, IEEE 754
double virgul mobil dubl precizie 64-bii, IEEE 754
(alte tipuri)
char caracter 16-bii, cod Unicode

boolean boolean (logic) true sau false

Valorile implicite pe care le vor avea variabilele neiniializate sunt:

14
Valoare Interval de valori
Tip primitiv
implicit
-128
byte 0 ...
+127
-32767
short 0 ...
+32768
-2147483648
int 0 ...
2147483647
-9223372036854775808
long 0 ...
9223372036854775807
float 0 conform standard IEEE 754
double 0 conform standard IEEE 754
char \u0000
boolean false {true, false}

Observaii:
1. Standardul IEEE 754 definete pe lng formatul de reprezentare n virgul mobil
simpl i dubl precizie i o serie de valori speciale. Prima dintre acestea este NaN
(Not A Number), valoare care se obine atunci cnd efectum o operaie a crei
rezultat nu este definit, de exemplu 0.0/0.0. De asemenea sunt definite dou valori pe
care le putem folosi pe post de infinit pozitiv i negativ. Aceste valori sunt prezente n
limbajul Java sub form de constante predefinite cu numele NaN,
POSITIVE_INFINITY, respectiv NEGATIVE_INFINITY.
2. Pentru tipurile de date ntregi, ntregi lungi i pentru tipurile flotante exist definite
cte dou constante care reprezint valorile minime i maxime care se pot reprezenta
n tipurile respective. Aceste dou constante se numesc n mod uniform MIN_VALUE
i MAX_VALUE.
Exemple de declaraii de variabile:
boolean gata;
boolean corect;
char caracterCitit;
byte nrCulori;

15
short i=0, j, varst;
int salariu = 10000000;
float raport;
double nrMolecule;
Domeniul de existen reprezint o seciune de program n care o variabil poate fi referit
direct numai prin numele su. Totodat, domeniul de existen determin modul n care
sistemul aloc sau terge zonele de memorie rezervate variabilelor precum i regulile de
vizibilitate ale acestora. Astfel va fi precizat dac i cum o variabil poate fi utilizat n afara
domeniului de existen.

Expresii, instruciuni, blocuri


Variabilele i operatorii descrii n subcapitolele anterioare reprezint elementele de baz cu
care ne elaborm programele. Astfel, combinm literali, variabile i operatori pentru a forma
expresii (fragmente de cod care efectueaz calcule i returneaz valori), anumite expresii se
pot constitui ca instruciuni (uniti de execuie complete), iar prin gruparea mai multor
instruciuni obinem blocuri de instruciuni sau de cod.
Expresiile sunt folosite pentru a calcula i atribui valori variabilelor i pentru a facilita
controlul execuiei programului. Astfel rezult dublul rol pe care l are de ndeplinit o
expresie: efectuarea calculelor indicate de elementele expresiei i returnarea unei valori ca
rezultat al calculelor efectuate. Tipul valorii returnate de o expresie depinde de elementele
utilizate n cadrul expresiei.
Limbajul de programare Java permite construirea de expresii compuse atta vreme ct
tipurile de date necesare unei pri a expresiei se potrivesc cu tipurile de date ale restului
acesteia. Exemplu:
x * y * z
n acest exemplu particular ordinea n care expresia este evaluat nu este important pentru
c operaia de nmulire este una asociativ. Acest lucru nu este valabil ns pentru orice
expresie. Rezultatul poate diferi mult n funcie de ordinea de evaluare a expresiei. Aceast
ordine poate fi controlat riguros prin utilizarea parantezelor rotunde. Exemplu:
x + y / 100
(x + y) / 100
Dac nu se indic explicit ordinea de evaluare prin utilizarea parantezelor rotunde, atunci
aceasta se determin innd cont de precedena operatorilor utilizai; cei cu precedena cea
mai mare fiind evaluai primii. De exemplu cele dou expresii de mai jos sunt echivalente:
x + y / 100
x + (y / 100)

16
Cnd n aceeai expresie avem de-a face cu operatori cu aceeai preceden atunci regula de
evaluare este:
Toi operatorii binari, cu excepia atribuirii, se evalueaz n ordine de la stnga la
dreapta.
Operatorii de atribuire sunt evaluai n ordine de la dreapta la stnga
Instruciunile formeaz uniti de execuie complete. Urmtoarele tipuri de expresii pot fi
transformate n instruciuni prin adugarea la sfritul expresiei a separatorului ;.
atribuirea
incrementarea ++ sau decrementarea --
apelurile de subprograme
crearea de obiecte
Exemple:
valoare = 1234.56;
valoare++;
System.out.println(valoare);
n plu, exist instruciuni de declarare cu ajutorul crora se efectueaz declaraiile de
variabile. Exemplu:
double valoare = 1234.56;
n sfrit, exist i instruciunile pentru controlul execuiei programului care vor determina
ordinea n care vor fi executate instruciunile programului. Aici intr instruciunile de
ramificare i instruciunile de ciclare (sau de buclare).
Un bloc reprezint un grup de zero sau mai multe instruciuni cuprinse ntre acolade. Un bloc
poate fi utilizat oriunde este permis utilizarea unei instruciuni simple. Exemplu:
{
valoare = 1234.56;
valoare++;
System.out.println(valoare);
}
Fr a efectua nici un control al execuiei programului, instruciunile acestuia ar fi executate
secvenial n ordinea n care ele apar de sus n jos i de la dreapta la stnga. Instruciunile
pentru controlul execuiei programului pot schimba ordinea n care se execut instruciunile
funcie de anumite condiii specificate. Limbajul Java furnizeaz astfel de instruciuni,
rezumate n tabelul urmtor:

Tipul instruciunii Cuvinte cheie


de ciclare while, do-while, for

17
de ramificare if-else, switch-case
de tratare a excepiilor try-catch-finally, throw
de salt break, continue, label:,
return

Sintaxa general a instruciunii do-while este:


do {
instructiuni
} while (expresieBooleana);
Spre deosebire de instruciunea while care ncepea cu evaluarea expresiei booleene,
instruciunea do-while trece o dat prin corpul ciclului dup care evalueaz expresia
boolean. Dac expresia boolean returneaz valoarea true ciclul se reia. Procesul continu
pn cnd valoarea returnat de expresia boolean devine false. i instruciunea do-
while face parte din categoria instruciunilor de ciclare cu numr necunoscut de pai, ns
spre deosebire de while, aceasta este n acelai timp o instruciune de ciclare cu test final.
Acest lucru face ca blocul de instruciuni care compune corpul ciclului s fie executat cel
puin o dat.
Exemplu:
int i = 0;
do {
System.out.println("Text");
i++;
} while (i < 5)

Instruciunea for ne ofer un mijloc de a efectua iteraii peste un interval de valori. Forma
general a instruciunii for este:
for (instructiune; conditie; expresie) {
instructiuni
}
Execuia instruciunii for se bazeaz pe urmtoarele reguli:
se incepe prin executarea instruciunii instructiune. Aceasta este utilizat de
obicei pentru a iniializa variabilele contor pe baza crora se face iterarea.
conditie trebuie s fie o expresie boolean i este tratat exact ca
expresieBooleana din instruciunea while, adic se va executa repetat corpul
ciclului ct timp conditie rmne true. i aici, la fel ca la instruciunea while
este posibil ca s nu se execute niciodat corpul ciclului dac la nceputul ciclului
conditie este deja false.

18
expresie este executat imediat dup executarea corpului ciclului dar nainte de
testarea din nou a expresiei conditie. De obicei expresie se folosete pentru a
incrementa variabilele contor.
Exemplu:
int i;
for (i = 0; i < 10; i++) {
System.out.println("Text");
}
Observaii:
1. Oricare dintre instructiune, conditie sau expresie poate fi omis. Dac
partea care lipsete este conditie atunci se obine un ciclu infinit. Exemplu:
for ( ; ; ) {
...
}
2. instructiune i expresie pot conine n loc de o expresie, secvene de
expresii. Separarea acestor expresii din secven se face cu ajutorul separatorului
virgul i nu cu punct-i-virgul deja folosit in sintaxa lui for pentru a delimita cele
trei pri ale sale instructiune, conditie respectiv expresie.
Exemplu:
int j,k;
for (j=3, k=6; j+k < 20; j++, k+=2) {
...
}
3. Instruciunea for este o instruciune de ciclare cu numr cunoscut de pai i n acelai
timp instruciune de ciclare cu test iniial.
Instruciunea if/else permite execuia selectiv a secvenelor de program Java, n funcie
de anumite criterii. Exist dou forme pentru instruciunea if/else. Prima dintre acestea are
urmtoarea sintax:
if (expresieBooleana) {
instructiuni
}
Secvena instructiuni se va executa dac expresieBooleana are valoarea true.
Cea de-a doua form a instruciunii if/else permite executarea unei secvene de
instruciuni i n cazul n care expresia boolean are valoarea false. Sintaxa acesteia este:
if (expresieBooleana) {
instructiuni_1

19
} else {
instructiuni_2
}
Dac expresieBooleana are valoarea true se va executa secvena
instructiuni_1. Dac dimpotriv expresieBooleana ia valoarea false se va
executa secvena instruciuni_2.
Exemplu:
if (raspuns == OK) {
System.out.println("Raspunsul a fost OK");
} else {
System.out.println("Raspunsul nu a fost OK");
}
Atunci cnd avem nevoie s efectum o alegere i aceasta se poate face n funcie de o
valoare ntreag rezolvarea o constituie instruciunea switch. Sintaxa instruciunii este:
switch(expresieIntreaga) {
case valoareIntreaga1:
instructiuni_1
break;
case valoareIntreaga2:
instructiuni_2
break;
...
case valoareIntreagaK:
instructiuni_K
break;
default:
instructiuni
break;
}
Executarea instruciunii switch ncepe prin a evalua expresieIntreaga. Se identifica
apoi case-ul a crui eticheta valoareIntreaga este egal cu valoarea lui
expresieIntreaga i se execut secvena de instruciuni asociat acestuia.
Observaii:
1. Execuia secvenei de instruciuni se oprete la prima instruciune break ntlnit.
2. Eticheta default are asociat secvena de instruciuni care se execut atunci cnd
niciunul dintre case-uri nu a fost selectat.
3. Instruciunea switch este echivalent cu o succesiune de instruciuni if/else.
Exemplu:
switch(zi) {
case 1:
System.out.println("Luni");
break;

20
case 2:
System.out.println("Marti");
break;
case 3:
System.out.println("Miercuri");
break;
case 4:
System.out.println("Joi");
break;
case 5:
System.out.println("Vineri");
break;
case 6:
System.out.println("Sambata");
break;
case 7:
System.out.println("Duminica");
break;
}
Instruciunea break are dou forme: etichetat i neetichetat. Forma neetichetat a
instruciunii break face ca execuia celei mai din interior construcie switch, for,
while sau do-while, care conine break-ul, s se incheie.
Exemplu: Instruciunea break determin incheierea execuiei ciclului for 2.
for ( ; ; i++) { // ciclu for 1
for ( ; ; j++) { // ciclu for 2
if (gata) {
....
break;
}
}
}
Forma etichetat a instruciunii break face ca s se ncheie execuia instruciunii identificat
printr-o eticheta specificat ca argument al lui break. O etichet const ntr-un identificator
plasat naintea unei instruciuni separat de aceasta prin caracterul :.
eticheta: instructiuneJava;
Exemplu: Instruciunea break etichetat determin incheierea execuiei ciclului for 1.
aici:
for ( ; ; i++) { // ciclu for 1
for ( ; ; j++) { // ciclu for 2
if (gata) {
....
break aici;
}
}
}

21
Instruciunea continue are ca efect trecerea peste iteraia curent a unei instruciuni for,
while sau do-while. continue are de asemenea dou forme: etichetat respectiv
neetichetat. Forma neetichetat are efect asupra celei mai din interior instruciuni de ciclare
care o conine, n vreme ce forma etichetat va aciona asupra instruciunii de ciclare
identificat prin eticheta specificat ca argument al instruciunii continue.
Exemplu:
for (int i = 0; i < max; i++) {
...
if (nuEsteZero)
continue;

// contorizare 0-uri
numarZerouri++;
}

Vectori
Crearea unui vector presupune realizarea urmtoarelor etape:
Declararea vectorului - Pentru a putea utiliza un vector trebuie, nainte de toate, sa-l
declarm. Acest lucru se face prin expresii de forma:
Tip[] numeVector; sau
Tip numeVector[];
ca n exemplele de mai jos:
int[] intregi;
String adrese[];
Instanierea:
Declararea unui vector nu implic i alocarea memoriei necesare pentru reinerea
elementelor. Operaiunea de alocare a memoriei, numit i instanierea vectorului, se
realizeaz ntotdeauna prin intermediul operatorului new. Instanierea unui vector se va face
printr-o expresie de genul:
numeVector = new Tip[nrElemente];
unde nrElemente reprezint numrul maxim de elemente pe care le poate avea vectorul. In
urma instanierii vor fi alocai: nrElemente _ dimensiune(Tip) octei necesari memorrii
elementelor din vector, unde prin dimensiune(Tip) am notat numrul de octei pe care se
reprezint tipul respectiv.
v = new int[10];
//aloca spatiu pentru 10 intregi: 40 octeti
c = new char[10];
//aloca spatiu pentru 10 caractere: 20 octeti
Declararea i instanierea unui vector pot fi fcute simultan astfel:

Tip[] numeVector = new Tip[nrElemente];

Iniializarea (opional):
Dup declararea unui vector, acesta poate fi iniializat, adic elementele sale pot primi
nite valori iniiale, evident dac este cazul pentru aa ceva. n acest caz instanierea nu mai
trebuie facut explicit, alocarea memoriei fcndu-se automat n funcie de numrul de
elemente cu care se iniializeaz vectorul.

22
String saptamana[] = {"Luni", "Marti", "Miercuri","Joi", "Vineri", "Sambata", "Duminica"
};
int []factorial = {1, 1, 2, 6, 24, 120};

Primul indice al unui vector este 0, deci poziiile unui vector cu n elemente vor fi cuprinse
ntre 0 i n 1.
In Java tablourile multidimensionale sunt de fapt vectori de vectori. De exemplu, crearea i
instanierea unei matrici vor fi realizate astfel:
Tip matrice[][] = new Tip[nrLinii][nrColoane];
matrice[i] este linia i a matricii i reprezint un vector cu nrColoane elemente iar
matrice[i][j] este elementul de pe linia i i coloana j.
Cu ajutorul variabilei length se poate afla numrul de elemente al unui vector.
int []a = new int[5];
// a.length are valoarea 5
int m[][] = new int[5][10];
// m[0].length are valoarea 10
Pentru a nelege modalitatea de folosire a lui length trebuie menionat c fiecare vector este
de fapt o instan a unei clase iar length este o variabil public a acelei clase, n care este
reinut numrul maxim de elemente al vectorului.
Copierea elementelor unui vector a ntr-un alt vector b se poate face, fie element cu element,
fie cu ajutorul metodei System.arraycopy, ca n exemplele de mai jos. Dup cum vom vedea,
o atribuire de genul b = a are alt semnificaie dect copierea elementelor lui a n b i nu
poate fi folosit n acest scop.
int a[] = {1, 2, 3, 4};
int b[] = new int[4];
// Varianta 1
for(int i=0; i<a.length; i++)
b[i] = a[i];
// Varianta 2
System.arraycopy(a, 0, b, 0, a.length);
// Nu are efectul dorit
b = a;
In Java s-a pus un accent deosebit pe implementarea unor structuri de date i algoritmi care
s simplifice proceseul de crearea a unui algoritm, programatorul trebuind s se concentreze
pe aspectele specifice problemei abordate.
Clasa java.util.Arrays ofer diverse metode foarte utile n lucrul cu vectori cum ar fi:
sort - sorteaz ascendent un vector, folosind un algoritm de tip Quick-Sort
performant, de complexitate O(n log(n)).

int v[]={3, 1, 4, 2};


java.util.Arrays.sort(v);
// Sorteaza vectorul v
// Acesta va deveni {1, 2, 3, 4}

binarySearch - cutarea binar a unei anumite valori ntr-un vector sortat;


equals - testarea egalitii valorilor a doi vectori (au aceleai numr de elemente i
pentru fiecare indice valorile corespunztoare din cei doi vectori sunt egale)
fill - atribuie fiecrui element din vector o valoare specificat.

23
Implementri ale vectorilor cu numr variabil de elemente sunt oferite de clase specializate
cum ar fi Vector sau ArrayList din pachetul java.util. Astfel de obiecte descriu vectori
eterogeni, i au elemente de tipul Object.

iruri de caractere
In Java, un ir de caractere poate fi reprezentat printr-un vector format din elemente de tip
char, un obiect de tip String sau un obiect de tip StringBuffer.
Dac un ir de caractere este constant (nu se dorete schimbarea coninutului su pe parcursul
execuiei programului) atunci el va fi declarat de tipul String, altfel va fi declarat de tip
StringBuffer.
Diferena principal ntre aceste clase este c StringBuffer pune la dispoziie metode pentru
modificarea coninutului irului, cum ar fi: append, insert, delete, reverse.
Uzual, cea mai folosit modalitate de a lucra cu iruri este prin intermediul clasei String, care
are i unele particulariti fa de restul claselor menite s simplifice ct mai mult folosirea
irurilor de caractere.
Clasa StringBuffer va fi utilizat predominant n aplicaii dedicate procesrii textelor cum ar
fi editoarele de texte.
Iat cteva exemple echivalente de declarare a unui ir:
String s = "abc";
String s = new String("abc");
char data[] = {a, b, c};
String s = new String(data);
Observai prima variant de declarare a irului s din exemplul de mai sus care prezint o
particularitate a clasei String fa de restul claselor Java referitoare la instanierea obiectelor
sale.
Concatenarea irurilor de caractere se face prin intermediul operatorului + sau, n cazul
irurilor de tip StringBuffer, folosind metoda append.
String s1 = "abc" + "xyz";
String s2 = "123";
String s3 = s1 + s2;
In Java, operatorul de concatenare + este extrem de flexibil, n sensul c permite
concatenarea irurilor cu obiecte de orice tip care au o reprezentare de tip ir de caractere.
Mai jos, sunt cteva exemple:

System.out.print("Vectorul v are" + v.length + " elemente");


String x = "a" + 1 + "b"
Pentru a lmuri puin lucrurile, ceea ce execut compilatorul atunci cnd ntlnete o
secven de genul String x = "a" + 1 + "b" este:
String x = new StringBuffer().append("a").append(1).
append("b").toString()
Trebuie inut cont de ordinea de efectuare a operaiilor. irul s=1+2+"a"+1+2
va avea valoarea "3a12", primul + fiind operatorul matematic de adunare
iar al doilea +, cel de concatenare a irurilor.

24
Folosirea argumentelor de la linia de comand
O aplicaie Java poate primi oricte argumente 1 de la linia de comand n momentul lansrii
ei. Aceste argumente sunt utile pentru a permite utilizatorului s specifice diverse opiuni
legate de funcionarea aplicaiei sau s furnizeze anumite date iniiale programului.
Argumentele de la linia de comand sunt introduse la lansarea unei aplicaii, fiind specificate
dup numele aplicaiei i separate prin spaiu. De exemplu, s presupunem c aplicaia
Sortare ordoneaz lexicografic (alfabetic) liniile unui fiier i primete ca argument de intrare
numele fiierului pe care s l sorteze. Pentru a ordona fiierul "nume.txt", aplicaia va fi
lansat astfel:
java Sortare nume.txt
Aadar, formatul general pentru lansarea unei aplicaii care primete argument de la linia de
comand este:
java NumeAplicatie [arg0 arg1 . . . argn]
n cazul n care sunt mai multe, argumentele trebuie separate prin spaii iar dac unul dintre
argumente conine spaii, atunci el trebuie pus ntre ghilimele. Evident, o aplicaie poate s
nu primeasc nici un argument sau poate s ignore argumentele primite de la linia de
comand.
In momentul lansrii unei aplicaii interpretorul parcurge linia de comand cu care a fost
lansat aplicaia i, n cazul n care exist, transmite programului argumentele specificate sub
forma unui vector de iruri. Acesta este primit de aplicaie ca parametru al metodei main().
Reamintim c formatul metodei main din clasa principal este:
public static void main (String args[])
Vectorul args primit ca parametru de metoda main() va conine toate argumentele
transmise programului de la linia de comand. n cazul apelului java Sortare nume.txt
vectorul args va conine un singur element pe prima sa poziie:

args[0]="nume.txt"
Vectorul args este instaniat cu un numr de elemente egal cu numrul argumentelor primite
de la linia de comand. Aadar, pentru a afla numrul de argumente primite de program este
suficient s aflm dimensiunea vectorului args prin intermediul atributului length:
public static void main (String args[]) {
int numarArgumente = args.length ;
}
n cazul n care aplicaia presupune existena unor argumente de la linia de comand, ns
acestea nu au fost transmise programului la lansarea sa, vor aprea excepii (erori) de tipul
ArrayIndexOutOfBoundsException. Tratarea acestor excepii este prezentat ulterior. Din
acest motiv, este necesar s testm dac programul a primit argumentele de la linia de
comand necesare pentru funcionarea sa i, n caz contrar, s afieze un mesaj de avertizare
sau s foloseasc nite valori implicite, ca n exemplul de mai jos:

public class ExArg {


public static void main (String args[]) {
if (args.length == 0) {
System.out.println("Numar insuficient de argumente!");
System.exit(-1); //termina aplicatia
}
String nume = args[0]; //exista sigur

1
Programele care folosesc argumente de la linia de comand nu sunt 100% pure Java, deoarece unele sisteme
de operare, cum ar fi Mac OS, nu au n mod normal linie de comand.

25
String prenume;
if (args.length >= 1)
prenume = args[1];
else
prenume = ""; //valoare implicita
System.out.println("Salut " + nume + " " + prenume);
}
}

Spre deosebire de limbajul C, vectorul primit de metoda main() nu conine pe prima poziie
numele aplicaiei, ntruct n Java numele aplicaiei este chiar numele clasei principale, adic
a clasei n care se gasete metoda main().
S considerm n continuare un exemplu simplu n care se dorete afiarea pe ecran a
argumentelor primite de la linia de comand:

public class Afisare {


public static void main (String[] args) {
for (int i = 0; i < args.length; i++)
System.out.println(args[i]);
}
}

Un apel de genul java Afisare Hello Java va produce urmtorul rezultat (aplicaia a primit 2
argumente):

Hello
Java
Apelul java Afisare "Hello Java" va produce ns alt rezultat (aplicaia a primit un singur
argument):
Hello Java
Argumentele de la linia de comand sunt primite sub forma unui vector de iruri (obiecte de
tip String). n cazul n care unele dintre acestea reprezint valori numerice ele vor trebui
convertite din iruri n numere. Acest lucru se realizeaz cu metode de tipul parseTipNumeric
aflate n clasa corespunztoare tipului n care vrem s facem conversia: Integer, Float,
Double, etc.
S considerm, de exemplu, c aplicaia Putere ridic un numar real la o putere ntreag,
argumentele fiind trimise de la linia de comand sub forma:
java Putere "1.5" "2" //ridica 1.5 la puterea 2
Conversia celor dou argumente n numere se va face astfel:
public class Putere {
public static void main(String args[]) {
double numar = Double.parseDouble(args[0]);
int putere = Integer.parseInt(args[1]);
System.out.println("Rezultat=" + Math.pow(numar, putere));
}
}
Metodele de tipul parseTipNumeric pot produce excepii (erori) de tipul
NumberFormatException n cazul n care irul primit ca parametru nu reprezint un numar de
tipul respectiv. Tratarea acestor excepii este prezentat ulterior.

26

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