Introducere in Java
Introducere in Java
Introducere in Java
1. Generaliti
1.1.
Istoric
Limbajul Java a fost creat n cadrul firmei Sun Microsystems de o echip condus de James Gosling.
Prima versiune a limbajului a fost lansat n 1995.
n 2010 compania Sun Microsystems a fost preluat de Oracle Co., dezvoltarea limbajului
continund n cadrul noii societi.
n timp limbajul a evoluat i au fost lansate noi versiuni. Versiunea curent este cunoscut sub
numele de Java 1.8 sau Java 8.
1.2.
Dac n cazul limbajelor uzuale (C, C++ etc.) prin compilare se obin fiiere coninnd instruciuni
n cod main (cod adaptat unei familii de microprocesoare), compilatorul Java produce un cod
independent de un procesor anume. Codul produs de compilatorul Java este denumit bytecode sau cod
de octei i pentru executarea lui este necesar un procesor care poate executa codul. Alternativa la un
astfel de procesor este procesorul virtual Java (Java virtual machine, prescurtat JVM) care este o
implementare software a procesorului necesar executrii codului de octei.
Procesoare virtuale Java exist pentru toate sistemele de operare majore.
1.3.
Instrumentele necesare tratrii codului scris n Java se prezint n dou forme, respectiv JRE
(Java Runtime Environment) i JDK (Java Development Kit).
JRE conine JVM i bibliotecile de clase necesare executrii aplicaiilor Java.
n JDK, pe lng componentele coninute n JRE sunt incluse instrumentele necesare dezvoltrii
de aplicaii Java, cel mai important fiind compilatorul Java.
1.4.
1.5.
Procesul de programare
Programarea n Java se realizeaz folosind medii integrate de dezvoltare, cele mai utilizate fiind
Netbeans i Eclipse. Dup scrierea codului, mediul de programare va apela compilatorul Java i va crea
pentru fiecare clas a aplicaiei cte un fiier .class coninnd codul de octei executabil n procesorul
virtual Java (JVM).
Mediul de programare poate oferi i alte funcii: formatarea codului, crearea automat a unor
secvene de cod, evidenierea erorilor de sintax etc.
1.6.
Classpath
Calea spre clasele aplicaiei (fiiere compilate .class) este pstrat sub forma unui ir de
caractere denumit classpath. irul este ntreinut folosind facilitile oferite de mediul de programare.
Procesorul virtual Java integreaz n aplicaie clasele specificate n classpath.
2. Instalarea JDK
2.1.
Instalarea
JDK (Java Development Kit) este un ansamblu de instrumente software destinat dezvoltrii de
aplicaii n Java oferit de firma Oracle Corporation. Pachetul poate fi descrcat de pe site-ul firmei:
(http://www.oracle.com/technetwork/java/javase/downloads/index.html).
Observaie: n Linux Ubuntu JDK (versiunea 7 deocamdat) poate fi instalat folosind comanda:
sudo apt-get install openjdk-7-jdk
2.2.
Verificarea instalrii
Pentru a verifica dac instalarea s-a realizat corect se deschide o consol (n Windows: All
Programs / Accessories / Command Prompt) i se tasteaz comanda:
java -version
Dac pocesorul Java este instalat, n fereastr vor aprea informaii legate de versiunea
acestuia.
3. Noiuni fundamentale
3.1.
class
Caracteristicile unei instane a clasei (a unui obiect) sunt memorate n variabilele clasei.
Comportamentul instanelor clasei este implementat prin metodele clasei (funcii Java).
Codul surs al unei clase este memorat pe disc ntr-un fiier separat avnd numele clasei i
extensia .java.
object
Un obiect (eng. object) este o instan a unei clase. O clas poate fi instaniat printr-un numr
oarecare de obiecte.
De multe ori obiectele sunt reprezentri software ale obiectelor din lumea real. Ele pot evolua
sau realiza aciuni prin apelul metodelor clasei. Exemplu:
package
Java permite gruparea claselor n entiti denumite pachete (eng. packages). n cazul aplicaiilor
de mari dimensiuni, realizate de mai muli programatori, gruparea permite realizarea n cadrul aplicaiei
a unor uniti logice. De exemplu clasele care sunt legate de realizarea interfeei unei aplicaii pot fi
grupate n acelai pachet.
3
Alt raiune pentru gruparea claselor n pachete este evitarea coliziunilor de nume. O astfel de
coliziune se produce cnd doi programatori folosesc acelai nume pentru dou clase distincte. Dac
fiecare programator va pstra clasele n propriul pachet, coliziunea va fi evitat scriind numele clasei n
varianta complet (fully qualified), respectiv nume_pachet.nume_clas. Exemplu: interf.linie.
package aplicatie1;
public class PrimaClasa {
. . .
}
3.2.
Motenirea
O clas poate fi derivat din alt clas, devenind astfel o subclas sau clas derivat. Clasa din
care s-a realizat derivarea se numete clas printe, clas de baz sau superclas (superclass) a clasei
derivate.
Motenirea permite ca o clas derivat s moteneasc variabilele i metodele clasei de baz.
n Java o clas poate avea o singur clas printe.
Exemplu:
package aplicatie2;
public class ClasaDeBaza {
void salut(){
System.out.println("Salut din ClasaDeBaza! ");
}
}
package aplicatie2;
public class ClasaDerivata extends ClasaDeBaza {
. . .
}
3.3.
Dac n clasa derivat o metod trebuie schimbat ea poate fi rescris pstrndu-se semntura
metodei din clasa de baz (nume, tip, parametri). Pentru a indica supracrierea unei metode, naintea
liniei de definire a acesteia se va aduga notaia @override.
Exemplu:
package aplicatie2;
public class ClasaDeBaza {
void salut(){
System.out.println("Salut din clasa de baza!");
}
}
package aplicatie2;
public class ClasaDeriv extends ClasaDeBaza {
@override
void salut(){
System.out.println("Salut din clasa derivata!");
}
}
3.4.
n Java, la baza oricrei ierarhii de clase se afl clasa Object. Metodele clasei Object
(motenite de toate clasele!), sunt:
equals(o1) permite compararea obiectelor;
getClass() returneaz clasa creia i aparine obiectul;
hashCode() returneaz un identificator al obiectului curent
toString() returneaz o reprezentare ca ir de caractere a obiectului curent.
4. Variabile i metode
4.1.
Variable
n orice limbaj, variabilele sunt folosite pentru memorarea unor valori n timpul execuiei
programului.
n Java o variabil poate conine o valoare aparinnd unui tip de baz (byte, short, int, long,
float, double, char, boolean) sau poate fi o referin spre un obiect (poate memora adresa unui obiect).
Compararea folosind operatorul '==' funcioneaz doar cu tipuri de baz, compararea a dou obiecte (de
fapt referine spre dou obiecte) va verifica dac referinele indic aceeai adres din memorie.
Compararea
corect
a
obiectelor
se
realizeaz
folosind
metoda
equals():
obiect1.equals(obiect2). Exemplu:
package aplicatie3;
Rezultate:
4.2.
Variabilele clasei
Prin variabilele clasei, denumite i variabilele instanei sau parametri, se definesc proprietile
viitoarelor instane ale acesteia. Variabilele clasei pot aparine unui tip de baz (byte, short, int, long,
6
float, double, char, boolean) sau pot fi obiecte (variabila s din exemplul precedent este un obiect din
clasa String).
Variabilele instanei sunt de obicei declarate private, ceea ce nseamn c sunt accesibile doar
din metodele clasei. Ele pot fi de asemenea declarate final, ceea ce nseamn c odat iniializate,
valoarea primit nu mai poate fi schimbat.
4.3.
Variabile locale
Variabilele locale sunt declarate n interiorul metodelor. Variabilele locale trebuie iniializate
naintea utilizrii.
4.4.
Metode
n programarea orientat pe obiecte, metoda (eng. method) este practic sinonima funciei din
programarea neobiectual. n consecin o metod este un bloc de cod care primete valori prin
intermediul unei liste de parametri i returneaz o valoare. O metod este apelat pentru un obiect prin
expresia ob.metoda() sau, n cazul metodelor statice, prin expresia clasa.metoda(). O metod
apelat pentru o instan opereaz asupra valorilor variabilelor instanei.
package exemplul3;
public class ExempluMetoda {
private String nume;
void setNume(String s) {
this.nume = s;
}
. . .
}
O metod poate suprascrie o metod din clasa de baz. n acest caz va prelua numele metodei
din clasa de baz, lista de parametri i tipul valorii returnate.
4.5.
Execuia unei aplicaii Java ncepe cu prima instruciune executabil a unei metode avnd
numele main() i declaraia:
public static void main(String[] args){
. . .
}
4.6.
Constructori
O clas conine unul sau mai muli constructori. Un constructor este o metod apelat pentru a
crea instane ale clasei (obiecte).
Declaraia unui constructor seamn cu declaraia unei metode oarecare a clasei, diferena fiind
faptul c numele constructorului coincide cu numele clasei i nu este precizat tipul returnat.
O clas poate avea unul sau mai muli constructori, diferii prin parametrii de intrare (tipul i
numsul acestora).
n exemplul considerat n continuare clasa Punct2D are un constructor cu doi parametri.
package exemplul4;
public class Punct2D {
private int X, Y;
public Punct2D(int x, int y) {
this.X = x;
this.Y = y;
}
public void setX(int v) {
this.X = v;
}
public void setY(int y) {
this.Y = y;
}
public void translatez(int dx, int dy) {
x += dx;
Y += dy;
}
}
Dac pentru o clas nu este definit niciun constructor, compilatorul i adaug un constructor
implicit. Dac o clas fr constructor explicit este derivat dintr-o alt clas, constructorul superclasei
este apelat automat.
Fiecare obiect este creat prin apelul unui constructor. Numai dup apelul constructorului
obiectul devine utilizabil. Apelul constructorului se realizeaz folosind operatorul new, ca n exemplul
urmtor.
Punct2D p1;
Punct2D p2;
...
p1 = new Punct2D(120, 16);
5. Modificatori
5.1.
Modificatori de acces
5.2.
Ali modificatori
6. Comenzile import
6.1.
Pentru a accesa n Java o clas care nu aparine pachetului curent trebuie folosit numele
complet al acesteia, construcia sintactic utilizat fiind pachet.nume_clas.
Dac se adaug ns la nceputul fiierului clasei comenzi import care definesc pachetele sau
clasele folosite, n cadrul clasei se vor putea folosi denumirile claselor din respectivele pachete fr a fi
nsoite de numele pachetelor din care fac parte. Pachetul java.lang este implicit, pentru el nu
trebuie adugat o comand import.
Interfaa
Interfaa (eng. Interface) aeste o construcie sintactic similar clasei. Ea definete un numr de
metode. Metodele unei interfee sunt implicit abstracte i publice.
O clas poate implementa o interfa, caz n care va conine un set complet de metode
ne-abstracte care suprascriu metodele abstracte ale interfeei. Din acest punct de vedere, o interfa
stabilete ce face clasa derivat, fr a spune, desigur, i cum va face.
Interfeele pot avea constante care sunt i ele implicit publice, statice i finale.
n clasa care implementeaz o interfa metodele suprascrise vor fi precedate de @override .
O clas poate implementa mai multe interfee simultan.
Exemplu: Pentru gestionarea activitii mouse-ului, n Java sunt definite dou interfee,
MouseListener i MouseMotionListener. n exemplul urmtor s-a exemplificat implementarea interfeei
MouseListener. Exemplul a fost preluat din documentaia online a limbajului Java. n cadrul clasei s-au
evideniat metodele interfeei MouseListener. Toate metodele interfeei a trebuit s fie implementate,
dei numai corpul metodei mouseClicked() realizeaz o aciune (conine cod).
package events;
public class MouseDemo ... implements MouseListener {
10
7.2.
O clas poate avea metode i proprieti care aparin clasei i nu sunt legate de instanele clasei
(de obiectele aparinnd clasei). Aceste componente sunt declarate statice (static) i sunt referite
prin expresia nume_clasa.componenta. Exemplu fundamental: Math.sin(x). Metoda
sin(x) aparine clasei Math. i a fost declarat static.
Un exemplu de variabil static
System.out.println("Salut!");
unei
clase
Java
este
out
din
expresia
Aici out este un obiect din clasa PrintStream. El este membru static al clasei System, de
aceea este referit scriind System.out. Metoda println() este apelat pentru acest obiect, ceea
ce ne conduce la cunoscuta expresie folosit la scrierea pe consol: System.out.println().
Un exemplu de metod static este main(). n aplicaii ea va fi declarat ntotdeauna scriind:
public static void main(String[] arg) {
System.out.println("Mesaj afisat la pornire");
}
O metod static nu acceseaz coninut ne-static, fiind independent de instanele clasei n care
apare. De exemplu metoda sin(x) din clasa Math nu acceseaz valori ale cmpurilor unui obiect
anume ci returneaz valoarea funciei sinus pentru o valoare x transmis prin argument. n acelai timp
metoda translatez() apelat astfel: p7.translatez(123,-17);, nu poate fi static
deoarece ea modific valorile coordonatelor X i Y ale unui punct p7, deci este apelat pentru obiectul
p7 i nu independent de obiectele clasei.
7.3.
Clase abstracte
O clas poate fi declarat abstract (eng. abstract). O clas abstract are cel puin o metod
declarat abstract i nu poate fi instaniat. Ea va servi drept clas de baz pentru clase derivate.
Clasele derivate dintr-o clas abstract vor implementa metodele abstracte ale clasei de baz.
Metodelor abstracte le lipsete corpul.
Exemplu:
package exemplu;
public abstract class CalculeGeom {
abstract double calculArie();
abstract double calculVol();
11
8. Clase anonime
O clas anonim este o clas care implementeaz o interfa sau este derivat dintr-o clas
abstract i este folosit la construirea unui singur obiect. Exemplu:
12
9.1.
Ce se vrea...
i cum se scrie:
package test;
public class Testare {
private String nume;
}
package test;
public class Testare {
private String nume;
public Testare(String nm) {
nume = mn;
13
Ce se vrea...
i cum se scrie:
// sau this.nume = nm;
}
}
package test;
public class Testare {
private String nume;
public Testare(String nm) {
nume = mn;
package test;
public class Testare {
private String nume;
public Testare(String nm) {
nume = mn;
package test;
public class Testare {
private String nume;
public Testare(String nm) {
nume = mn; // sau thisnume= nm;
}
14
Ce se vrea...
i cum se scrie:
public void faCeva() {
. . .
}
public void faCu2Param(int a,
Persoana pers) {
. . .
}
public int faCu3Param(String a, String b,
Persoana pers) {
. . .
package test;
public class ClasaADoua {
String adresa;
Caine ham;
public ClasaADoua () {
this.adresa = adresa;
this.ham = ham;
}
public String getAdresa() {
return adresa;
}
public void setAdresa(String adresa)
{
this.adresa = adresa;
}
public Caine getHam() {
return ham;
}
public void setHam(Caine ham) {
this.ham = ham;
}
}
15
Ce se vrea...
i cum se scrie:
Fisierul principal
contine metoda main()
public static void main(String[] args)
{
MemoCarti m = new MemoCarti();
}
}
// Fisierul Carte.java
package aplicarti;
// Clasa Carte
public class Carte {
//fields
private String titlu;
private String autor;
private String editor;
//Constructorul clasei Carte
public Carte(String titlu, String aut,
String edit)
{
//populate the fields
this.titlu = titlu;
this.autor = aut;
this.editor = edit;
}
public void afisezCartea()
{
System.out.println("Titlu: " +
16
Ce se vrea...
i cum se scrie:
titlu);
System.out.println("Autor: " +
autor);
System.out.println("Editor: " +
editor);
}
}
9.2.
i cum se scrie:
String nume1;
Persoana pers;
String sir1[];
contor = 12;
pers = pers2;
17
Ce se vrea...
i cum se scrie:
existente deja.
Declararea unei variabile de tip ArrayList putnd memora
un ansamblu de obiecte de tip Persoana ntr-o structur de
tip list.
ArrayList<Persoana> personal;
personal = new
ArrayList<Persoana>();
18
11.Solutie
11.1. Crearea clasei Persoana i instanierea ei
package proiect1;
public class Persoana {
private String nume;
private String prenume;
private int an_nastere;
public Persoana() {
nume = "Doe";
prenume = "John";
19
an_nastere = 1900;
}
public void scrieNume() {
System.out.println("Numele: " + nume);
}
public Persoana(String nume, String prenume, int an_nastere) {
this.nume = nume;
this.prenume = prenume;
this.an_nastere = an_nastere;
}
public String getNume() {
return nume;
}
public void setNume(String nume) {
this.nume = nume;
}
public String getPrenume() {
return prenume;
}
public void setPrenume(String prenume) {
this.prenume = prenume;
}
public int getAn_nastere() {
return an_nastere;
}
public void setAn_nastere(int an_nastere) {
this.an_nastere = an_nastere;
}
}
package proiect1;
public class Main {
public static void main(String[] args) {
Persoana anonim = new Persoana();
Persoana ana = new Persoana("Ionescu", "Ana", 1993);
ana.scrieNume();
anonim.setNume("Popescu");
anonim.setPrenume("Paul");
anonim.setAn_nastere(2001);
}
20
package proiect1;
public class Persoana {
private String nume;
21
22
package proiect1;
public class Main {
public static void main(String[] args) {
Persoana anonim = new Persoana();
Persoana ana = new Persoana("Ionescu", "Ana", 1993);
ana.scrieNume();
Adresa a = new Adresa("Frana", "Grenoble", "34, Rue Fouquet");
ana.setAdresa(a);
anonim.setNume("Popescu");
anonim.setPrenume("Paul");
anonim.setAn_nastere(2001);
a = new Adresa("Romania", "Iai", "Str. Unirii Nr. 21 Ap. 12");
anonim.setAdresa(a);
}
}
Comentarii
Programele Java conin explicaii sub forma unor comentarii. Acestea vor asigura n timp
nelegerea diferitelor metode i rolul funcional al variabilelor folosite.
ntr-un program scris n Java pot fi folosite dou tipuri de comentarii:
comentarii "n linie", introduse prin //. Un astfel de comentariu se ncheie la sfritul liniei
curente;
comentarii pe unul sau mai multe rnduri consecutive. Zona care conine comentariul este
delimitat prin /* (comentariu) */.
De regul se folosesc comentariile n linie, cel de-al doilea tip fiind folosit frecvent n timpul
depanrii programelor mari i complexe, pentru a suprima din program anumite zone.
Comentariile care ncep cu /** sunt prelucrate de aplicaia javadoc pentru realizarea automat a
unei pagini web coninnd comentariile programatorului. Aceast facilitate este folosit pentru
documentarea rapid a programelor mari, compuse din mai multe clase.
12.2.
Variabile
23
n Java numele unei variabile, metode sau clase poate fi orice combinaie de litere i cifre,
ncepnd cu o liter. Caracterele '_' (underscore) i '$' sunt considerate litere i pot intra n construcia
numelor. Nu pot fi folosite ca nume cuvintele rezervate folosite la definirea limbajului.
12.3.
abstract
double
int
strictfp
boolean
else
interface
super
break
extends
long
switch
byte
final
native
synchronized
case
finally
new
this
catch
float
package
throw
char
for
private
throws
class
goto
protected
transient
const
if
public
try
continue
implements
return
void
default
import
short
volatile
do
instanceof
static
while
true
false
null
n Java, ca i n alte limbaje evoluate, sunt definite 8 tipuri de date elementare (primitive):
Cuvnt cheie
pt. declarare
Descriere
Mrime/Reprezentare intern
(numere ntregi)
24
byte
short
ntreg scurt
int
Intreg
long
ntreg lung
float
Simpl precizie
double
Dubl precizie
char
Un caracter
boolean
O valoare logic
Spre deosebire de alte limbaje, n Java informaiile din tabelul precedent sunt valabile indiferent
de calculatorul pe care se execut programul.
Observaii asupra tipului char:
Ca i n C++, n Java un caracter se reprezint ncadrat ntre apostroafe. Astfel 'C' sau '&' sunt
caractere. Unele caractere nu au simbol grafic. Cele mai uzuale se pot totui introduce folosind o
succesiune de dou caractere (secven escape) astfel: '\n' (LF), '\a' (bell), '\b' (backspace), '\f' (pagin
nou, formfeed), '\r' (retur car, carriage return), '\t' (tab orizontal), '\v' (tab vertical). Un exemplu n
acest sens poate fi scris pornind de la succesiunea de apeluri de metode care realizeaz afiarea pe
ecran a rezultatelor programului scris mai sus:
System.out.println("Gr. (barbat) = " + g + " kg");
System.out.println("Gr. (femeie) = " + 0.9*g + " kg");
System.out.println() asigur trecerea la linie nou dup afiarea irului de caractere introdus ca
i argument. Dac ns folosim un singur apel, acelai rezultat se obine folosind secvena escape '\n':
System.out.println("Gr. (barbat) = " + g + " kg\nGr. (femeie) = " + 0.9*g + " kg");
Pentru alte caractere care nu au echivalent grafic se va folosi o secven escape care folosete
codul hexazecimal al caracterului, astfel:
\xHH
\uHHHH
25
12.4.
iruri
Pentru a utiliza un ir, n Java trebuie declarat i apoi realizat alocarea memoriei necesare.
Exemple fundamentale:
int a[];
// Se poate scrie si int [] a;
a = new int[7];
// Se aloca memoria nec. - 7 locatii
int b[] = {1, 3, 4, 6, 10};
26
a[0] = 12;
a[2] = 21;
a[3] = a[0] + a[2];
irurile pot avea dou sau chiar mai multe dimensiuni. Exemplu:
int [ ] [ ] c;
c = new int [3] [4];
c[0] [2] = 17;
System.out.println("c(0,2) ="+c[0] [2]);
Lungimea unui ir, indiferent de tipul componentelor acestuia, poate fi obinut folosind
proprietatea .length.
Exemplu:
12.5.
Clasa String
n Java irurile de caractere sunt obiecte aparinnd clasei String. Declararea unui ir de
caractere poate fi realizat fie scriind:
Un ir de char (declarat char [ ]) poate fi transformat ntr-un obiect aparinnd clasei String.
Exemplu:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
27
Unirea (concatenarea) mai multor obiecte de tip String anterior definite se realizeaz folosind
operatorul '+', astfel:
String trei;
trei=unu+" & " + doi;
Operaii cu iruri
Expresie
Explicaii
text1.equals("Dacia");
text1.equalsIgnoreCase("Dacia");
str1.append(" Logan");
str.charat(1);
str.substring(1);
str.substring(1, 5);
28
Expresie
Explicaii
str.indexOf(String)
str.lastIndexOf(String)
str.endsWith(String)
str.startsWith(String)
str.trim()
str.replace(str1,str2)
str.concat(str1);
str.toUpperCase()
str.toLowerCase()
str1 + str2
String.format("%.00f",
engSpeed.doubleValue())
29
Conversii de tip
Frecvent valorile numerice trebuie convertite n iruri de caractere (String) sau iruri de
caractere trebuie convertite n valorile numerice echivalente.
package test;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
. . .
SimpleDateFormat template = new SimpleDateFormat("dd-MM-yyyy");
java.util.Date enddate = new java.util.Date("10/31/99");
java.sql.Date sqlDate = java.sql.Date.valueOf(template.format(enddate));
30
12.6.
Literali
n timpul scrierii unui program, programatorul folosete frecvent literali. Literalii sunt valori
aparinnd tipurilor primitive prezentate. Compilatorul analizeaz aceste valori, le stabilete tipul, le
convertete i le memoreaz n locaii din memorie. De exemplu, n clasa Greutate aprea atribuirea:
h = 178;
Compilatorul va asocia literalului "178" tipul int., va face conversia n binar corespunztoare i va
memora rezultatul ntr-o zon din memorie avnd o lungime de 4 octei. La fel, n expresia greutii:
g = 50.0+0.75*(h-150)+0.25*(v-20);
Compilatorul va considera c 50.0, 0.75 i 0.25 sunt double (numere reale n dubl precizie) iar
150 i 20 sunt int (numere ntregi).
Exemple fundamentale:
12.7.
Operatorii
definirea unui
folosii
la
scrierea
reprezint
o
etap
folosesc un mare numr de
de operatori pentru a putea
aparinnd
tipurilor
Literal
Tipul de dat
178
int
8864L
long
37.266
double
37.266D
double
87.363F
float
26.77e3
double
'c'
char
true
boolean
false
boolean
limbajului Java
limbaj, stabilirea operatorilor care pot fi
expresiilor i a regulilor lor de utilizare
important.
Limbajele de nivel nalt
operatori i chiar permit extinderea setului
scrie expresii n care intervin variabile
structurate (obiecte).
% (modulo)
31
se evalueaz ca i
i < (lim + 1)
O expresiile n care intervine o succesiune de operatori logici && (i) sau o succesiune de
operatori || (sau) sunt evaluate de la stnga la dreapta i evaluarea expresiei nceteaz cnd se tie deja
valoarea de adevr a rezultatului.
&& e mai prioritar ca i || iar ambele sunt mai puin prioritare ca i operatorii de comparaie.
Operatorul ! (negaie)
if (!corect) . . . identic cu
if (corect == false) . . .
Conversiile de tip
Cnd ntr-o expresie intervin operanzi de tipuri diferite, operanzii corespunznd unui tip mai
restrictiv se convertesc automat spre tipul mai general astfel nct nu se produce pierdere de informaie.
Dac rezultatul unei expresii este float sau double i este atribuit unei variabile de tip ntreg,
compilatorul va sesiza posibila pierdere de informaie i va semnala o eroare.
32
Operatorii de incrementare i de decrementare ++ i -n funcie de poziia operatorului fa de variabila incrementat, se realizeaz pre i post
incrementare (decrementare)
int n = 5 ;
x = n++ ;
x = ++n ;
atribuie 5 lui x
atribuie 6 lui x
n care variabila din stnga egalului se repet n dreapta acestuia se mai poate scrie astfel :
i += 3 ;
n general n Java,
exp1
exp1
op=
=
exp2 ;
exp1 op
echivaleaz cu
(exp2) ;
unde op este + - * / %.
Exemplu fundamental:
x *= y + 1 ;
echivaleaz cu :
x = x * (y + 1) ;
i nu cu
33
x = x * y + 1 ;
Expresiile condiionale
Pentru a calcula expresia:
z = max(a, b) ;
se poate scrie
if (a > b)
max = a ;
else
max = b ;
12.8.
: b ;
Instruciunea de decidere - if
Ansamblul de instruciuni cuprinse ntre acolade formeaz o instruciune compus sau un bloc
de instruciuni. Instruciunile din interiorul unui bloc de instruciuni sunt executate n ordinea n care
sunt scrise.
if (expLogica )
{
mai multe
instruciuni
}
if (expLogica )
{
mai multe
instruciuni
34
instruciune;
}
else
{
mai multe
instruciuni
}
if (expLogica )
instruciune;
else
{
mai multe
instruciuni
}
if (expLogica )
{
mai multe
instruciuni
}
else
instruciune;
Instruciunea while
Instruciunea while permite realizarea unei structuri repetitive (ciclu) condiionate anterior.
Corpul ciclului poate fi executat o dat, de mai multe ori sau de loc.
Exemplu fundamental:
int contor = 1;
while ( contor <= 3 )
{
System.out.println("Contor = "+contor);
contor = contor + 1;
// sau mai bine contor++
}
System.out.println("La revedere!");
instruciune
35
while (
while (
condiie )
condiie )
instruciune;
una sau m.
m. instruciuni
}
Instruciunea do
Pentru programarea unui ciclu poate fi folosit ntotdeauna instruciunea while. Deoarece while
ncepe prin executarea unui test, n cazul n care variabila testat nu poate primi valori dect n interiorul
ciclului, programatorul trebuie s-i dea la nceput o valoare convenabil pentru a determina intrarea n
ciclu. Exacutarea instruciunilor din corpul ciclului va corecta automat valoarea iniial.
Pentru astfel de cazuri exist ns i o cale mai simpl, respectiv folosirea instruciunii do.
Exemplu:
g = 9.81;
t = 0;
do
{
d = (g * t * t ) / 2;
System.out.println( t + "
t = t + 1;
}
while (d <= 500);
" + d);
Instruciunea for
Instruciunea for este preferat ori de cte ori trebuie realizat un ciclu care folosete un
contor. Ea poate fi ns folosit ns n toate cazurile n care trebuie s realizm un ciclu, i reprezint o
modalitate compact i elegant de scriere a acestora.
Dac naintea unui ciclu trebuie realizate mai multe iniializri, acestea pot scrise n for una
dup alta, desprite prin virgule:
public int suma (int[] a) {
int i, sum;
for (i=0,sum = 0; i<a.length; i++)
sum = sum + a[i];
return sum;
}
Oricare dintre cele trei pri ale instruciunii for pot lipsi. Lipsa condiiei de reluare este
echivalent cu a scrie o condiie care este ntotdeauna adevrat. Ieirea dintr-un astfel de ciclu se
poate face folosind instruciunea break.
36
Exemplu:
for ( ; ; )
{
. .
break;
. .
}
Executarea instruciunii break provoac o ieire imediat din ciclul for. Ea poate fi folosit i
pentru a iei din ciclurile while sau do.
Exemplu de utilizare:
int[] sir;
// dau valori
sir[0] =
sir[1] =
sir[2] =
sir[3] =
sir[4] =
sir[5] =
sir[6] =
int suma
9;
4;
23;
17;
63;
19;
54;
= 0;
37
Instruciunea switch
Instruciunile de ciclare prezentate, while, do i for sunt folosite pentru realizarea blocurilor de
instruciuni a cror execuie ncepe cu prima linie i este controlat de ctre programator. Instruciunea
switch este folosit tot pentru a construi un bloc de instruciuni dar punctul de unde ncepe execuia
depinde de valoarea unei expresii avnd valori ntregi.
Sintaxa instruciunii este:
switch (expresie)
{
case constanta_1 :
case constanta_2 :
instruciuni
instruciuni
. . .
default :
instruciuni;
Fiecare dintre punctele de unde poate ncepe execuia blocului este etichetat printr-o constant
avnd valoare ntreag. Dac expresia de testat corespunde uneia dintre constante, execuia blocului
ncepe din punctul indicat de aceasta.
Ramura introdus prin default este facultativ.
Exemplu :
switch (t)
{
case 's' :
rez = Math.sin(Math.PI * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
case 'c' :
rez = Math.cos(Math.PI * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
case 't' :
rez =
Math.sin(Math.PI * x / 180.)/Math.cos(3.14159 * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
default:
System.out.println("Caracter incorect!");
38
Ca i n cazul ciclurilor, instruciunea break provoac o ieire imediat din blocul realizat
folosind switch.
39