Sunteți pe pagina 1din 13

Ce este Java ?

Limbajul de programare Java


Java este un limbaj de programare de nivel inalt, dezvoltat de JavaSoft, companie in
cadrul firmei Sun Microsystems. Dintre caracteristicile principale ale limbajului
amintim:
simplitate, elimina supraincarcarea operatorilor, mostenirea multipla si toate
"facilitatile" ce pot provoca scrierea unui cod confuz.
robustete, elimina sursele frecvente de erori ce apar in programare prin
eliminarea pointerilor, administrarea automata a memoriei si eliminarea
fisurilor de memorie printr-o procedura de colectare a 'gunoiului' care ruleaza
n fundal. Un program Java care a trecut de compilare are proprietatea ca la
executia sa nu "crapa sistemul".
complet orientat pe obiecte - elimina complet stilul de programare procedural
usurinta in ceea ce priveste programarea in retea
securitate, este cel mai sigur limbaj de programare disponibil n acest
moment, asigurnd mecanisme stricte de securitate a programelor concretizate
prin: verificarea dinamica a codului pentru detectarea secventelor periculoase,
impunerea unor reguli stricte pentru rularea programelor lansate pe calculatoare
aflate la distanta, etc
este neutru din punct de vedere arhitectural
portabililtate, cu alte cuvinte Java este un limbaj independent de platforma de
lucru, aceeasi aplicatie ruland, fara nici o modificare, pe sisteme diferite cum ar
fi Windows, UNIX sau Macintosh, lucru care aduce economii substantiale
firmelor care dezvolta aplicatii pentru Internet.
compilat si interpretat
asigura o performanta ridicata a codului de octeti
permite programarea cu fire de executie (multitheaded)
dinamicitate
este modelat dupa C si C++, trecerea de la C, C++ la Java facndu-se foarte
usor.
permite creearea unor documente Web mbunatatite cu animatie si multimedia.
Java : un limbaj compilat si interpretat
In functie de modul de executie al programelor, limbajele de programare se mpart n
doua categorii :
interpretate : instructiunile sunt citite linie cu linie de un program numit
interpretor si traduse n instructiuni masina; avantaj : simplitate; dezavantaje :
viteza de executie redusa
compilate : codul sursa al programelor este transformat de compilator ntr-un
cod ce poate fi executat direct de procesor; avantaj : executie rapida; dezavantaj
: lipsa portabilitatii, codul compilat ntr-un format de nivel scazut nu poate fi
rulat dect pe platforma pe care a fost compilat.

Programele Java sunt fi att interpretate ct si compilate.


Codul de octeti este diferit de codul masina. Codul masina este reprezentat de o
succesiune de 0 si 1; codurile de octeti sunt seturi de instructiuni care seamana cu
codul scris n limbaj de asamblare. Codul masina este executat direct de catre
procesor si poate fi folosit numai pe platforma pe care a fost creat; codul de octeti este
interpretat de mediul Java si de aceea poate fi rulat pe orice platforma care foloseste
mediul de executie Java.
Cod sursa Java -> (compilare) -> Cod de octeti -> (interpretare)

Crearea unei aplicatii simple

1. Scriererea codului sursa

2. class FirstApp {
3.
public static void main( String args[]) {
4.
System.out.println("Hello world");
5.
}
6. }

Toate aplicatiile Java contin o clasa principala(primara) n care trebuie sa se


gaseasca metoda main. Clasele aplicatiei se pot gasi fie ntr-un singur fisier, fie
n mai multe.
7. Salvarea fisierelor sursa
Se va face n fisiere cu extensia .java
Fiserul care contine codul sursa al clasei primare trebuie sa aiba acelasi nume cu clasa
primara a aplicatiei (clasa care contine metoda main)
Obs: Java face distinctie ntre literele mari si mici.
C:/java/FirstApp.java

8. Compilarea aplicatiei
Se foloseste compilatorul Java, javac
Apelul compilatorului se face pentru fisierul ce contine clasa principala a
aplicatiei. Compilatorul creeaza cte un fisier separat pentru fiecare clasa a
programului; acestea au extensia .class si sunt plasate n acelasi director cu
fisierele sursa.
javac FirstApp.java -> FirstApp.class

9. Rularea aplicatiei

Se face cu interpretorul java, apelat pentru unitatea de compilare


corespunzatoare clasei principale, fiind nsa omisa extensia .class asociata
acesteia.

java FirstApp

Rularea unei aplicatii care nu foloseate interfata grafica, se va face ntr-o


fereastra sistem.

Crearea unui applet


Crearea structurii de fisere si compilarea applet-urilor sunt identice ca n cazul
aplicatiilor. Difera n schimb structura programului si modul de rulare al acestuia.
1. Scrierea codului sursa si salvarea n fisier
2. import java.awt.* ;
3. import java.applet.* ;
4. public class FirstApplet extends Applet {
5. Image img;
6. public void init() {
7.
img = getImage(getCodeBase(), "taz.gif");
8. }
9. public void paint (Graphics g) {
10.
g.drawImage(img, 0, 0, this);
11.
g.drawOval(100,0,150,50);
12.
g.drawString("Hello! My name is Taz!", 110, 25);
13.
}
14. }
Salvarea se va face n fisierul FirstApplet.java
15.Compilarea applet-ului

javac FirstApplet.java -> FirstApplet.class

16.Rularea applet-ului

Applet-urile nu ruleaza 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.
1. Creearea unui fisier HTML pentru miniaplicatie (exemplu.html)
2.
3.
4.
5.
6.
7.

<html>

<head>
</head>
<body>

height=400>

8.
9.
10.

<title>First Java Applet</title>


<applet code=FirstApplet.class width=400
</applet>

</body>
</html>

11. Vizualizarea appletului

appletviewer exemplu.html

Structura lexicala a limbajului


Setul de caractere
Limbajului Java lucreaza n mod nativ folosind setul de caractere Unicode. Acesta
este un standard international care nlocuieste vechiul set de caractere ASCII si care
foloseste pentru reprezentarea caracterelor 2 octeti, ceea ce nseamna ca se pot
reprezenta 65536 de semne, spre deosebire de ASCII, unde era posibila reprezentarea
a 256 de caractere. Primele 256 caractere Unicode corespund celor din ASCII,
referirea la celelate facndu-se prin \uxxxx, unde xxxx reprezinta codul caracterului.

Ex:
\u0030 - \u0039 : cifre ISO-Latin 0 - 9
\u0660 - \u0669 : cifre arabic-indic 0 - 9
\u4e00 - \u9fff : litere din alfabetul Han (Chinez, Japonez, Coreean)

Cuvinte cheie
Cuvintele rezervate n Java sunt cele din C++, cu cteva exceptii
Identificatorii
Sunt secvente nelimitate de litere si cifre Unicode, ncepand cu o litera. Identificatorii
nu au voie sa fie identici cu cuvintele rezervate.
Literalii (constantele)

Literalii pot fi de urmatoarele tipuri


literali ntregi
Sunt acceptate 3 baze de numeratie : baza 10, baza 16 (ncep cu caracterele 0x)
si baza 8 (ncep cu cifra 0) si pot fi de doua tipuri:
o normali, (se reprez pe 4 octeti - 32 biti)
o lungi (8 octeti - 64 biti) : se termina cu caracterul L (sau l).
literali flotanti
Pentru ca un literal sa fie considerat flotant el trebuie sa aiba cel putin o
zecimala dupa virgula, sa fie n notatie exponentiala sau sa aiba sufixul F sau f
pentru valorile normale (reprez. pe 32 biti), respectiv D sau d pentru valorile
duble (reprez. pe 64 biti)
literali logici
true : valoarea booleana de adevar
false : valoarea booleana de fals
Atentie: spre deosebire de C++, literalii ntregi 1 si 0 nu mai au rolul de
adevarat si false
literali caracter
Un literal de tip caracter este utilizat pentru a exprima caracterele codului
Unicode. Reprezentarea se face fie folosind o litera, fie o secventa escape scrisa
ntre apostrofuri. Secventele escape permit reprezentarea caracterelor care nu
au reprezentare grafica si reprezentarea unor caractere speciale precum
backslash, caracterul apostrof, etc. Secvente escape predefinite n Java:
Cod
\u0008
\u0009
\u000a
\u000c
\u000d
\u0022
\u0027
\u005c

Secventa Escape
Caracter
'\b'
Backspace(BS)
'\t'
Tab orizontal (HT)
'\n'
Linie noua - linefeed (LF)
'\f'
Pagina noua - formfeed (FF)
'\r'
Inceput de rand (CR)
'\"'
Ghilimele
'\''
Apostrof
'\\'
Backslash

literali siruri de caractere


Un literal sir de caractere este format din zero sau mai multe caractere ntre
ghilimele. Caracterele care formeaza sirul de caractere pot fi caractere grafice
sau secvente escape ca cele definite la literalii caracter. Daca sirul este prea
lung el poate fi scris ca o concatenare de subsiruri de dimensiune mai mica.
Concatenarea sirurilor se face cu operatorul + ( "Ana " + " are " + " mere ").
Sirul vid este "". Dupa cum vom vedea, orice sir este de fapt o instanta a
clasei String, definita n pachetul java.lang.

Separatori
Un separator este un caracter care indica sfrsitul unei unitati lexicale si nceputul
alteia. In Java separatorii sunt urmatorii: ( ) { } [ ] ; , . Instructiunile unui
program se separa cu punct si virgula
Operatori

atribuirea: =
operatori matematici: +, -, *, /, %
Este permisa notatia prescurtata de forma lval op= rval (ex: n += 2)
Exista operatorii pentru autoincrementare si autodecrementare (post si pre)
ex: x++, ++x, n--, --n

Observatie: evaluarea expresiilor logice se face prin


metoda scurtcircuitului (evaluarea se opreste n momentul n care valoarea de
adevar a expresiei este sigur determinata)
operatori logici: &&(and), ||(or), !(not)
operatori relationali: <, <=, >, <=, ==, !=
operatori pe biti: & (and), |(or), ^(xor), ~(not)
operatori de translatie <<, >>, >>> (shift la dreapta fara semn)
operatorul if-else: expresie_logica ? val_pt_true : val_pt_false ;
operatorul , (virgula) folosit pentru evaluarea secventiala a operatiilor int x=0,
y=1, z=2;

operatorul + pentru concatenarea sirurilor:

operatori pentru conversii (cast) : (tip_de_data)

String s="abcd"
int x=100;
System.out.println(s + " - " + x);
int i = 200;
long l = (long)i; //widening conversion - conversie prin extensie
long l2 = (long)200;
int i2 = (int)l2; //narrowing conversion - conversie prin contractie

Comentarii
In Java exista trei feluri de comentarii:

Comentarii pe mai multe linii, nchise ntre /* si */.


Comentarii pe mai multe linii care tin de documentatie, nchise ntre /** si */.
Textul dintre cele dou secvente este automat mutat n documentatia aplicatiei
de catre generatorul automat de documentatie javadoc.
comentarii pe o singura linie care ncep cu //.

Observatii:
1. nu putem sa scriem comentarii n interiorul altor comentarii.
2. nu putem introduce comentarii n interiorul literalilor caracter sau sir de
caractere.
3. secventele /* si */ pot sa apara pe o linie dupa secventa // dar si pierd
semnificatia; la fel se ntmpl cu secventa // n comentarii care ncep cu /*
sau /**.

Tipuri de date

In Java tipurile de date se mpart n doua categorii: tipuri primitive de date si tipuri
referinta. Java porneste de la premiza ca "orice este un obiect". Asadar tipurile de
date ar trebui sa fie de fapt definite de clase si toate variabilele ar trebui sa memoreze
de fapt instante ale acestor clase (obiecte). In principiu acest lucru este adevarat, nsa,
pentru usurinta programarii, mai exista si asa numitele tipurile primitive de date,
care sunt cele uzuale :

aritmetice
o ntregi: byte (1 octet), short (2),
o reale: float (4 octeti), double (8)
caracter : char (2 octeti)
logic : boolean (true si false)

int (4), long (8)

In alte limbaje formatul si dimensiunea tipurilor primitive de date folosite ntr-un


program pot depinde de platforma pe care ruleaza programul. In Java acest lucru nu
mai este valabil, orice dependenta de o anumita platforma specifica fiind eliminata.
Vectorii, clasele si interfetele sunt tipuri referinta. Valoarea unei variabile de acest
tip este, n contrast cu tipurile primitive, o referinta (adresa de memorie) catre
valoarea sau multimea de valori reprezentata de variabila respectiva.
Exista trei tipuri de date C care nu sunt suportate de limbajul Java. Acestea
sunt: pointer, struct si union. Pointerii au fost eliminati din cauza ca erau o sursa
constanta de erori, locul lor fiind luat de tipul referinta, iar struct si union nu si mai
au rostul att timp ct tipurile compuse de date sunt formate n Java prin intermediul
claselor.

Variabile
Variabilele pot avea ca tip fie un tip primitiv de data, fie o referinta la un obiect.
Declararea variabilelor Tip nume_variabila
Initializarea variabilelor Tip nume_variabila = valoare
Declararea constantelor final Tip nume_variabila

Conventia de notare a variabilelor in Java este data de urmatoarele criterii:


1. variabilele finale (constante) se scriu cu majuscule
2. variabilele normale se scriu astfel : prima litera cu litera mica, daca numele
variabilei este format din mai multi atomi lexicali, atunci primele litere ale
celorlalti atomi se scriu cu majuscule, de exemplu:
3.
4.
5.
6.

final double PI = 3.14;


int valoare = 100;
long numarElemente = 12345678L;
String bauturaMeaPreferata = "apa";

In functie de locul n care sunt declarate variabile se mpart n urmatoatele categorii:

1. Variabile membre, declarate n interiorul unei clase, vizibile pentru toate

metodele clasei respective si pentru alte clase n functie de nivelul lor de acces
(vezi "Declararea variabilelor membre")
2. Variabile locale, declarate ntr-o metoda sau ntr-un bloc de cod, vizibile doar
n metoda/blocul respectiv
3. Parametri metodelor, vizibili doar n metoda respectiva
4. Parametrii de la tratarea exceptiilor

Obs: variabilele declarate ntr-un for pentru controlul ciclului, ramn locale corpului
ciclului.
for(int i=0; i<100; i++) { }
int i; //ok n Java, eroare n C++

Obs: Spre deosebire de C++ nu este permisa ascunderea unei variabile :


int x=12;
{
int x=96; //ilegal
}

Controlul executiei

Instructiunile Java pentru controlul executiei sunt asemanatoare celor din C.


Instructiuni de decizie
Instructiuni de salt
Instructiuni pt. tratarea exceptiilor
Alte instructiuni
Instructiuni de decizie
if-else

if-else, switch-case
for, while, do-while
try-catch-finally, throw
break, continue, label: , return

if (exp_booleana) { /*...*/}
if (exp_booleana) { /*...*/} else { /*...*/}

switch-case

switch (variabila) {
case val1 : /* ... */ break;
case val2 : /* ... */ break;
/*...*/
default : /*...*/
}

Instructiuni de salt

for

for(initializare; exp_booleana; pas_iteratie)


Ex: for(int i=0, j=100 ; i<100 && j>0; i++, j--)
{/* ... /*}

Obs: att la initializare ct si n pasul de iteratie pot fi mai multe


instructiuni despartite prin virgula.
while

do-while

while (exp_booleana) {
/*...*/
}
do {
/*...*/
}
while (exp_booleana) ;

Instructiuni pentru tratarea exceptiilor


try-catch-finally,
throw

(vezi "Tratarea exceptiilor")

Alte instructiuni
break
continue
return
label:

paraseste fortat corpul iteratiei curente


termina fortat iteratia curenta
return [valoare];

Termina o metoda
Defineste o eticheta

Atentie: In Java nu exista goto. Se pot nsa defini etichete de forma nume_eticheta:,
folosite n expresii de genul: break nume_eticheata sau continue nume_eticheta
Exemplu:
i=0;
eticheta:
while (i<10) {
System.out.println("i="+i);
j=0;
while (j<10) {
j++;
if (j==5) continue eticheta;
if (j==7) break eticheta;
System.out.println("j="+j);
}
i++;
}

Vectori

Crearea unui vector


1. Declararea vectorului
2.
Tip[] numeVector; sau
3.
Tip numeVector[];
4. Ex:
int[] intregi;
5.
String adrese[];

6. Instantierea

Se realizeaza prin intermediul operatorului new si are ca efect alocarea


memoriei pentru vector, mai precis specificarea numarului maxim de elemente
pe care l va avea vectorul;
7.
numeVector = new Tip[dimensiune];
8. Ex:
v = new int[10];
//se aloca spatiu pentru 10 intregi
9.
adrese = new String[100];

Obs: declararea si instantierea unui vector pot fi facute simultan astfel:


Tip[] numeVector = new Tip[dimensiune];

10. Initializarea (optional)

Dupa declararea unui vector, acesta poate fi initializat, adica elementele sale
pot primi niste valori initiale, evident daca este cazul pentru asa ceva. In acest
caz instantierea lipseste, alocarea memoriei facndu-se automat n functie de
numarul de elemente cu care se initializeaza vectorul.
11. Ex:
12.

String culori[] = {"Rosu", "Galben", "Verde"};


int []factorial = {1, 1, 2, 6, 24, 120};

Observatii:
Primul indice al unui vector este 0, deci pozitiile unui vector cu n elemente vor fi
cuprinse ntre 0 si n-1
Nu sunt permise constructii de genul Tip numeVector[dimensiune], alocarea memoriei
facndu-se doar prin intermediul opearatorului new.
Ex:

int v[10];
//ilegal
int v[] = new int[10]; //corect

Vectori multidimensionali
In Java tablourile multidimensionale sunt de fapt vectori de vectori.
Ex:

int m[][];
m = new int[5][10];

Obs: m[0],

m[1], ..., m[5]

//declararea unei matrici


//cu 5 linii, 10 coloane

sunt vectori de intregi cu 10 elemente

Dimensiunea unui vector


Cu ajutorul cuvntului cheie length se poate afla dimensiunea unui vector.
int []a = new int[5];
a.length are valoarea 5
int m = new int[5][10];
m[0].length are valoarea 10

Copierea vectorilor
Copierea unui vector n alt vector se face cu ajutorul metodei System.arraycopy:
int x[] = {1, 2, 3, 4};
int y[] = new int[4];

System.arraycopy(x,0,y,0,x.length);

Vectori cu dimensiune variabila


Implementarea vectorilor cu numar variabil de elemente este oferita de
clasa Vector din pachetul java.util. Un obiect de tip Vector contine numai elemente
de tip Object.

Siruri de caractere
In Java, un sir 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.
Declararea unui sir
Daca un sir de caractere este constant atunci el va fi declarat de tipul String, altfel va
fi declarat cu StringBuffer. (vezi "Clasele String, StringBuffer") Exemple
echivalente de declarare a unui sir:
String str = "abc";
char data[] = {'a', 'b', 'c'};
String str = new String(data);
String str = new String("abc");

Concatenarea sirurilor
Concatenarea sirurilor de caractere se face prin intermediul operatorului +.
String str1 = "abc" + "xyz";
String str2 = "123";
String str3 = str1 + str2;

In Java, operatorul de concatenare + este extrem de flexibil n sensul ca permite


concatenarea sirurilor cu obiecte de orice tip care au o reprezentare de tip sir de
caractere.
System.out.print("Vectorul v are" + v.length + " elemente")

Folosirea argumentelor de la linia de comanda

O aplicatie Java poate primi oricte argumente de la linia de comanda n momentul


lansarii ei. Aceste argumente sunt utile pentru a permite utilizatorului sa specifice
diverse optiuni legate de functionarea aplicatiei sau sa furnizeze anumite date initiale
programului.
Atentie: Programele care folosesc argumente de la linia de comanda nu sunt 100%
pure Java deoarece unele sisteme de operare cum ar fi Mac OS nu au n mod normal
linie de comanda.
Argumentele de la linia de comanda sunt introduse la lansarea unei aplicatii, fiind
specificate dupa numele aplicatiei si separate prin spatiu. De exemplu, sa presupunem

ca aplicatia Sort ordoneaza lexicografic liniile unui fisier si primeste ca argument


numele fisierului pe care sa l sorteze. Pentru a ordona
fisierul "persoane.txt" lansarea aplicatiei se va face astfel:
java Sort persoane.txt

Asadar, formatul general pentru lansarea unei aplicatii care primeste argumente de la
linia de comanda este:
java NumeAplicatie [arg1 arg2 . . . argn]

In cazul n care sunt mai multe, argumentele trebuie separate prin spatii iar daca unul
dintre argumente contine spatii, atunci el trebuie pus ntre ghilimele. Evident, o
aplicatie poate sa nu primeasca nici un argument sau poate sa ignore argumentele
primite de la linia de comanda.
In momentul lansarii unei aplicatii interpretorul parcurge linia de comanda cu care a
fost lansata aplicatia si, n cazul n care exista, transmite aplicatiei argumentele
specificate sub forma unui vector de siruri. Acesta este primit de aplicatie ca
parametru al metodei main. Reamintim ca formatul metodei main din clasa principala
este:
public static void main ( String args[])

Vectorul primit ca parametru de metoda main va contine toate argumentele transmise


programului de la linia de comanda. In cazul apelului java Sort
persoane.txt vectorul args va contine un singur element args[0]="persoane.txt".
Numarul argumentelor primite de un program este dat deci de dimensiunea
vectorului args si acesta poate fi aflat prin intermediul atributului length al vectorilor:
numarArgumente = args.length ;

Spre deosebire ce C/C++ vectorul primit de metoda main nu contine pe prima pozitie
numele aplicatiei, ntruct n Java numele aplicatiei este numele clasei principale,
adica a clasei n care se gaseste metoda main.
Exemplu: afisarea argumentelor primite la linia de comanda
public class Echo {
public static void main (String[] args) {
for (int i = 0; i < args.length; i++)
System.out.println(args[i]);
}
}

Un apel de genul java

Echo Drink Hot Java

va produce urmatorul rezultat:

Drink
Hot
Java

(aplicatia Echo a primit 3 argumente).


Una apel de genul java Echo "Drink Hot
Drink Hot Java

Java"

va produce urmatorul rezultat:

(aplicatia Echo a primit un singur argument).


Argumente numerice la linia de comanda
Argumentele de la linia de comanda sunt primite sub forma unui vector de siruri
(obiecte de tip String). In cazul n care unele dintre acestea reprezinta valori
numerice ele vor trebui convertite din siruri n numere. Acest lucru se realizeaza cu
metode de tipul parseXXX aflate n clasa corespunzatoare tipului n care vrem sa
facem conversia: Integer, Float, Double, etc.
Sa consideram, de exemplu, ca aplicatia Power ridica un numar real la o putere
ntreaga, argumentele fiind trimise de la linia de comanda:

java Power "12.1" "3" //ridica 12.1 la puterea 3

Conversia celor doua argumente n numere se va face astfel:


double numar;
int putere;
numar = Double.parseDouble(args[0]);
putere = Integer.parseInt(args[1]);

Metodele de tipul parseXXX pot produce exceptii (erori) de


tipul NumberFormatException n cazul n care sirul primit ca parametru nu reprezinta
un numar de tipul respectiv.

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