Curs practic de Java   Cristian Fr˘sinaru              a
Cuprins1 Introducere ˆ Java               ın                                                                              ...
2                                                                           CUPRINS          1.6.5 Sortarea vectorilor - c...
CUPRINS                                                                                                 3        2.7.1 Dec...
4                                                                                      CUPRINS    4.4   Fluxuri standard d...
CUPRINS                                                                                                             5     ...
6                                                                                   CUPRINS          9.3.2 Gestionarul Flo...
CUPRINS                                                                                                   7          10.2....
8                                                                                        CUPRINS12 Fire de executie       ...
CUPRINS                                                                                             915 Lucrul cu baze de ...
10   CUPRINS
Capitolul 1Introducere ˆ Java            ın1.1      Ce este Java ?Java este o tehnologie inovatoare lansat˘ de compania Su...
12                               CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                          ...
1.1. CE ESTE JAVA ?                                                         13   • J2SE (Standard Edition)     Este platfo...
14                               CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                          ...
1.2. PRIMUL PROGRAM                                                         15    Toate aplicatiile Java contin o clas˘ pr...
16                              CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                         IN...
˘1.3. STRUCTURA LEXICALA A LIMBAJULUI JAVA                                     17interfete, variabile sau metode. true, fa...
18                               CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                          ...
˘1.3. STRUCTURA LEXICALA A LIMBAJULUI JAVA                                  19   • Siruri de caractere     ¸     Un litera...
20                               CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                          ...
1.4. TIPURI DE DATE SI VARIABILE                    ¸                                                          211.4      ...
22                              CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                         IN...
1.4. TIPURI DE DATE SI VARIABILE                    ¸                                                       23  b. Paramet...
24                            CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                       IN    ...
1.5. CONTROLUL EXECUTIEI                    ¸                                                      25      ...      break;...
26                               CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                          ...
1.6. VECTORI                                                               27  • Declararea vectorului - Pentru a putea ut...
28                               CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                          ...
1.6. VECTORI                                                              291.6.4    Copierea vectorilorCopierea elementel...
30                              CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                         IN...
˘1.8. FOLOSIREA ARGUMENTELOR DE LA LINIA DE COMANDA 31   Concatenarea ¸irurilor de caractere se face prin intermediul oper...
32                             CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                        IN  ...
˘1.8. FOLOSIREA ARGUMENTELOR DE LA LINIA DE COMANDA 33  public static void main (String args[]) {    int numarArgumente = ...
34                             CAPITOLUL 1. INTRODUCERE ˆ JAVA                                                        IN  ...
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Upcoming SlideShare
Loading in...5
×

Cristian frasinaru curs-practic_de_java

1,762

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,762
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Cristian frasinaru curs-practic_de_java"

  1. 1. Curs practic de Java Cristian Fr˘sinaru a
  2. 2. Cuprins1 Introducere ˆ Java ın 11 1.1 Ce este Java ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.1.1 Limbajul de programare Java . . . . . . . . . . . . . . 11 1.1.2 Platforme de lucru Java . . . . . . . . . . . . . . . . . 12 1.1.3 Java: un limbaj compilat ¸i interpretat s . . . . . . . . . 13 1.2 Primul program . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3 Structura lexical˘ a limbajului Java . . . . . . a . . . . . . . . . 16 1.3.1 Setul de caractere . . . . . . . . . . . . . . . . . . . . . 16 1.3.2 Cuvinte cheie . . . . . . . . . . . . . . . . . . . . . . . 16 1.3.3 Identificatori . . . . . . . . . . . . . . . . . . . . . . . . 17 1.3.4 Literali . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.3.5 Separatori . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.3.6 Operatori . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.3.7 Comentarii . . . . . . . . . . . . . . . . . . . . . . . . 20 1.4 Tipuri de date ¸i variabile . . . . . . . . . . . s . . . . . . . . . 21 1.4.1 Tipuri de date . . . . . . . . . . . . . . . . . . . . . . . 21 1.4.2 Variabile . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.5 Controlul executiei . . . . . . . . . . . . . . . ¸ . . . . . . . . . 24 1.5.1 Instructiuni de decizie . . . . . . . . . ¸ . . . . . . . . . 24 1.5.2 Instructiuni de salt . . . . . . . . . . . ¸ . . . . . . . . . 25 1.5.3 Instructiuni pentru tratarea exceptiilor ¸ ¸ . . . . . . . . . 26 1.5.4 Alte instructiuni . . . . . . . . . . . . ¸ . . . . . . . . . 26 1.6 Vectori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.6.1 Crearea unui vector . . . . . . . . . . . . . . . . . . . . 26 1.6.2 Tablouri multidimensionale . . . . . . . . . . . . . . . 28 1.6.3 Dimensiunea unui vector . . . . . . . . . . . . . . . . . 28 1.6.4 Copierea vectorilor . . . . . . . . . . . . . . . . . . . . 29 1
  3. 3. 2 CUPRINS 1.6.5 Sortarea vectorilor - clasa Arrays . . . . . . . . . . . . 29 1.6.6 Vectori cu dimensiune variabil˘ ¸i eterogeni as . . . . . . 30 1.7 Siruri de caractere . . . . . . . . . . . . . . . . . . ¸ . . . . . . 30 1.8 Folosirea argumentelor de la linia de comand˘ . . . a . . . . . . 31 1.8.1 Transmiterea argumentelor . . . . . . . . . . . . . . . . 31 1.8.2 Primirea argumentelor . . . . . . . . . . . . . . . . . . 32 1.8.3 Argumente numerice . . . . . . . . . . . . . . . . . . . 342 Obiecte ¸i clase s 35 2.1 Ciclul de viat˘ al unui obiect . . . . . . . . . . . . . ¸a . . . . . . 35 2.1.1 Crearea obiectelor . . . . . . . . . . . . . . . . . . . . . 35 2.1.2 Folosirea obiectelor . . . . . . . . . . . . . . . . . . . . 37 2.1.3 Distrugerea obiectelor . . . . . . . . . . . . . . . . . . 38 2.2 Crearea claselor . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.2.1 Declararea claselor . . . . . . . . . . . . . . . . . . . . 39 2.2.2 Extinderea claselor . . . . . . . . . . . . . . . . . . . . 40 2.2.3 Corpul unei clase . . . . . . . . . . . . . . . . . . . . . 41 2.2.4 Constructorii unei clase . . . . . . . . . . . . . . . . . . 42 2.2.5 Declararea variabilelor . . . . . . . . . . . . . . . . . . 46 2.2.6 this ¸i super . . . . . . . . . . . . . . . . . . s . . . . . . 49 2.3 Implementarea metodelor . . . . . . . . . . . . . . . . . . . . 50 2.3.1 Declararea metodelor . . . . . . . . . . . . . . . . . . . 50 2.3.2 Tipul returnat de o metod˘ . . . . . . . . . a . . . . . . 52 2.3.3 Trimiterea parametrilor c˘tre o metod˘ . . . a a . . . . . . 53 2.3.4 Metode cu num˘r variabil de argumente . . a . . . . . . 56 2.3.5 Supraˆ arcarea ¸i supradefinirea metodelor ınc˘ s . . . . . . 57 2.4 Modificatori de acces . . . . . . . . . . . . . . . . . . . . . . . 58 2.5 Membri de instant˘ ¸i membri de clas˘ . . . . . . . ¸a s a . . . . . . 59 2.5.1 Variabile de instant˘ ¸i de clas˘ . . . . . . . ¸a s a . . . . . . 59 2.5.2 Metode de instant˘ ¸i de clas˘ . . . . . . . . ¸a s a . . . . . . 61 2.5.3 Utilitatea membrilor de clas˘ . . . . . . . . a . . . . . . 62 2.5.4 Blocuri statice de initializare . . . . . . . . . ¸ . . . . . . 63 2.6 Clase imbricate . . . . . . . . . . . . . . . . . . . . . . . . . . 64 2.6.1 Definirea claselor imbricate . . . . . . . . . . . . . . . . 64 2.6.2 Clase interne . . . . . . . . . . . . . . . . . . . . . . . 66 2.6.3 Identificare claselor imbricate . . . . . . . . . . . . . . 66 2.6.4 Clase anonime . . . . . . . . . . . . . . . . . . . . . . . 67 2.7 Clase ¸i metode abstracte . . . . . . . . . . . . . . s . . . . . . 67
  4. 4. CUPRINS 3 2.7.1 Declararea unei clase abstracte . . . . . . . . . . . . . 68 2.7.2 Metode abstracte . . . . . . . . . . . . . . . . . . . . . 68 2.8 Clasa Object . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 2.8.1 Orice clas˘ are o superclas˘ . . a a . . . . . . . . . . . . . 71 2.8.2 Clasa Object . . . . . . . . . . . . . . . . . . . . . . . 71 2.9 Conversii automate ˆıntre tipuri . . . . . . . . . . . . . . . . . 74 2.10 Tipul de date enumerare . . . . . . . . . . . . . . . . . . . . . 753 Exceptii ¸ 77 3.1 Ce sunt exceptiile ? . . . . . . . . . . . . ¸ . . . . . . . . . . . . 77 3.2 ”Prinderea” ¸i tratarea exceptiilor . . . . s ¸ . . . . . . . . . . . . 78 3.3 ”Aruncarea” exceptiilor . . . . . . . . . . ¸ . . . . . . . . . . . . 82 3.4 Avantajele trat˘rii exceptiilor . . . . . . a ¸ . . . . . . . . . . . . 85 3.4.1 Separarea codului pentru tratarea erorilor . . . . . . . 85 3.4.2 Propagarea erorilor . . . . . . . . . . . . . . . . . . . . 87 3.4.3 Gruparea erorilor dup˘ tipul lor . a . . . . . . . . . . . . 89 3.5 Ierarhia claselor ce descriu exceptii . . . ¸ . . . . . . . . . . . . 90 3.6 Exceptii la executie . . . . . . . . . . . . ¸ ¸ . . . . . . . . . . . . 91 3.7 Crearea propriilor exceptii . . . . . . . . ¸ . . . . . . . . . . . . 924 Intr˘ri ¸i ie¸iri a s s 95 4.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.1.1 Ce sunt fluxurile? . . . . . . . . . . . . . . . . . . . . . 95 4.1.2 Clasificarea fluxurilor . . . . . . . . . . . . . . . . . . . 96 4.1.3 Ierarhia claselor pentru lucrul cu fluxuri . . . . . . . . 97 4.1.4 Metode comune fluxurilor . . . . . . . . . . . . . . . . 98 4.2 Folosirea fluxurilor . . . . . . . . . . . . . . . . . . . . . . . . 99 4.2.1 Fluxuri primitive . . . . . . . . . . . . . . . . . . . . . 99 4.2.2 Fluxuri de procesare . . . . . . . . . . . . . . . . . . . 100 4.2.3 Crearea unui flux . . . . . . . . . . . . . . . . . . . . . 101 4.2.4 Fluxuri pentru lucrul cu fi¸iere . . . . . . . . . . s . . . . 103 4.2.5 Citirea ¸i scrierea cu buffer . . . . . . . . . . . . s . . . . 105 4.2.6 Concatenarea fluxurilor . . . . . . . . . . . . . . . . . . 107 4.2.7 Fluxuri pentru filtrarea datelor . . . . . . . . . . . . . 108 4.2.8 Clasele DataInputStream ¸i DataOutputStream s . . . . 109 4.3 Intr˘ri ¸i ie¸iri formatate . . . . . . . . . . . . . . . . . a s s . . . . 110 4.3.1 Intr˘ri formatate . . . . . . . . . . . . . . . . . a . . . . 110 4.3.2 Ie¸iri formatate . . . . . . . . . . . . . . . . . . s . . . . 111
  5. 5. 4 CUPRINS 4.4 Fluxuri standard de intrare ¸i ie¸ire . . . . . . . . . . . . . s s . . 111 4.4.1 Afisarea informatiilor pe ecran . . . . . . . . . . . . ¸ . . 112 4.4.2 Citirea datelor de la tastatur˘ . . . . . . . . . . . . a . . 112 4.4.3 Redirectarea fluxurilor standard . . . . . . . . . . . . . 113 4.4.4 Analiza lexical˘ pe fluxuri (clasa StreamTokenizer) a . . 115 4.5 Clasa RandomAccesFile (fi¸iere cu acces direct) . . . . . . s . . 117 4.6 Clasa File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195 Interfete ¸ 121 5.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 5.1.1 Ce este o interfat˘ ? . . . . . . . . . ¸a . . . . . . . . . . 121 5.2 Folosirea interfetelor . . . . . . . . . . . . . ¸ . . . . . . . . . . 122 5.2.1 Definirea unei interfete . . . . . . . . ¸ . . . . . . . . . . 122 5.2.2 Implementarea unei interfete . . . . . ¸ . . . . . . . . . . 123 5.2.3 Exemplu: implementarea unei stive . . . . . . . . . . . 124 5.3 Interfete ¸i clase abstracte . . . . . . . . . . ¸ s . . . . . . . . . . 129 5.4 Mo¸tenire multipl˘ prin interfete . . . . . . s a ¸ . . . . . . . . . . 130 5.5 Utilitatea interfetelor . . . . . . . . . . . . . ¸ . . . . . . . . . . 132 5.5.1 Crearea grupurilor de constante . . . . . . . . . . . . . 132 5.5.2 Transmiterea metodelor ca parametri . . . . . . . . . . 133 5.6 Interfata FilenameFilter . . . . . . . . . . ¸ . . . . . . . . . . 134 5.6.1 Folosirea claselor anonime . . . . . . . . . . . . . . . . 137 5.7 Compararea obiectelor . . . . . . . . . . . . . . . . . . . . . . 138 5.7.1 Interfata Comparable . . . . . . . . . ¸ . . . . . . . . . . 139 5.7.2 Interfata Comparator . . . . . . . . . ¸ . . . . . . . . . . 141 5.8 Adaptori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426 Organizarea claselor 145 6.1 Pachete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 6.1.1 Pachetele standard (J2SDK) . . . . . . . . . . . . . . . 145 6.1.2 Folosirea membrilor unui pachet . . . . . . . . . . . . . 146 6.1.3 Importul unei clase sau interfete . ¸ . . . . . . . . . . . . 147 6.1.4 Importul la cerere dintr-un pachet . . . . . . . . . . . . 148 6.1.5 Importul static . . . . . . . . . . . . . . . . . . . . . . 149 6.1.6 Crearea unui pachet . . . . . . . . . . . . . . . . . . . 150 6.1.7 Denumirea unui pachet . . . . . . . . . . . . . . . . . . 151 6.2 Organizarea fi¸ierelor . . . . . . . . . . . s . . . . . . . . . . . . 152 6.2.1 Organizarea fi¸ierelor surs˘ . . . . s a . . . . . . . . . . . . 152
  6. 6. CUPRINS 5 6.2.2 Organizarea unit˘¸ilor de compilare (.class) at . . . . . 154 6.2.3 Necesitatea organiz˘rii fi¸ierelor . . . . . . . . a s . . . . . 155 6.2.4 Setarea c˘ii de c˘utare (CLASSPATH) . . . . a a . . . . . 156 6.3 Arhive JAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 6.3.1 Folosirea utilitarului jar . . . . . . . . . . . . . . . . . 158 6.3.2 Executarea aplicatiilor arhivate . . . . . . . . ¸ . . . . . 1597 Colectii ¸ 161 7.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 7.2 Interfete ce descriu colectii . . ¸ ¸ . . . . . . . . . . . . . . . . . . 162 7.3 Implement˘ri ale colectiilor . . a ¸ . . . . . . . . . . . . . . . . . . 166 7.4 Folosirea eficient˘ a colectiilor a ¸ . . . . . . . . . . . . . . . . . . 168 7.5 Algoritmi polimorfici . . . . . . . . . . . . . . . . . . . . . . . 170 7.6 Tipuri generice . . . . . . . . . . . . . . . . . . . . . . . . . . 171 7.7 Iteratori ¸i enumer˘ri . . . . . s a . . . . . . . . . . . . . . . . . . 1728 Serializarea obiectelor 177 8.1 Folosirea serializ˘rii . . . . . . . . . . . . . . . a . . . . . . . . . 177 8.1.1 Serializarea tipurilor primitive . . . . . . . . . . . . . . 179 8.1.2 Serializarea obiectelor . . . . . . . . . . . . . . . . . . . 180 8.1.3 Clasa ObjectOutputStream . . . . . . . . . . . . . . . 180 8.1.4 Clasa ObjectInputStream . . . . . . . . . . . . . . . . 181 8.2 Obiecte serializabile . . . . . . . . . . . . . . . . . . . . . . . . 183 8.2.1 Implementarea interfetei Serializable . ¸ . . . . . . . . . 183 8.2.2 Controlul serializ˘rii . . . . . . . . . . a . . . . . . . . . 184 8.3 Personalizarea serializ˘rii obiectelor . . . . . . a . . . . . . . . . 187 8.3.1 Controlul versiunilor claselor . . . . . . . . . . . . . . . 188 8.3.2 Securizarea datelor . . . . . . . . . . . . . . . . . . . . 193 8.3.3 Implementarea interfetei Externalizable ¸ . . . . . . . . . 194 8.4 Clonarea obiectelor . . . . . . . . . . . . . . . . . . . . . . . . 1969 Interfata grafic˘ cu utilizatorul ¸ a 199 9.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 9.2 Modelul AWT . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 9.2.1 Componentele AWT . . . . . . . . . . . . . . . . . . . 202 9.2.2 Suprafete de afi¸are (Clasa Container) ¸ s . . . . . . . . . 204 9.3 Gestionarea pozition˘rii . . . . . . . . . . . . ¸ a . . . . . . . . . 206 9.3.1 Folosirea gestionarilor de pozitionare . ¸ . . . . . . . . . 207
  7. 7. 6 CUPRINS 9.3.2 Gestionarul FlowLayout . . . . . . . . . . . . . . . . . 209 9.3.3 Gestionarul BorderLayout . . . . . . . . . . . . . . . . 210 9.3.4 Gestionarul GridLayout . . . . . . . . . . . . . . . . . 211 9.3.5 Gestionarul CardLayout . . . . . . . . . . . . . . . . . 212 9.3.6 Gestionarul GridBagLayout . . . . . . . . . . . . . . . 214 9.3.7 Gruparea componentelor (Clasa Panel) . . . . . . . . . 218 9.4 Tratarea evenimentelor . . . . . . . . . . . . . . . . . . . . . . 219 9.4.1 Exemplu de tratare a evenimentelor . . . . . . . . . . . 221 9.4.2 Tipuri de evenimente . . . . . . . . . . . . . . . . . . . 224 9.4.3 Folosirea adaptorilor ¸i a claselor anonime . s . . . . . . 227 9.5 Folosirea ferestrelor . . . . . . . . . . . . . . . . . . . . . . . . 232 9.5.1 Clasa Window . . . . . . . . . . . . . . . . . . . . . . . 232 9.5.2 Clasa Frame . . . . . . . . . . . . . . . . . . . . . . . . 233 9.5.3 Clasa Dialog . . . . . . . . . . . . . . . . . . . . . . . . 236 9.5.4 Clasa FileDialog . . . . . . . . . . . . . . . . . . . . . 239 9.6 Folosirea meniurilor . . . . . . . . . . . . . . . . . . . . . . . . 242 9.6.1 Ierarhia claselor ce descriu meniuri . . . . . . . . . . . 243 9.6.2 Tratarea evenimentelor generate de meniuri . . . . . . 246 9.6.3 Meniuri de context (popup) . . . . . . . . . . . . . . . 247 9.6.4 Acceleratori (Clasa MenuShortcut) . . . . . . . . . . . 250 9.7 Folosirea componentelor AWT . . . . . . . . . . . . . . . . . . 250 9.7.1 Clasa Label . . . . . . . . . . . . . . . . . . . . . . . . 251 9.7.2 Clasa Button . . . . . . . . . . . . . . . . . . . . . . . 252 9.7.3 Clasa Checkbox . . . . . . . . . . . . . . . . . . . . . . 253 9.7.4 Clasa CheckboxGroup . . . . . . . . . . . . . . . . . . 255 9.7.5 Clasa Choice . . . . . . . . . . . . . . . . . . . . . . . 257 9.7.6 Clasa List . . . . . . . . . . . . . . . . . . . . . . . . . 259 9.7.7 Clasa ScrollBar . . . . . . . . . . . . . . . . . . . . . . 261 9.7.8 Clasa ScrollPane . . . . . . . . . . . . . . . . . . . . . 262 9.7.9 Clasa TextField . . . . . . . . . . . . . . . . . . . . . . 263 9.7.10 Clasa TextArea . . . . . . . . . . . . . . . . . . . . . . 26510 Desenarea 269 10.1 Conceptul de desenare . . . . . . . . . . . . . . . . . . . . . . 269 10.1.1 Metoda paint . . . . . . . . . . . . . . . . . . . . . . . 270 10.1.2 Suprafete de desenare - clasa Canvas ¸ . . . . . . . . . . 271 10.2 Contextul grafic de desenare . . . . . . . . . . . . . . . . . . . 274 10.2.1 Propriet˘¸ile contextului grafic . . . . at . . . . . . . . . . 275
  8. 8. CUPRINS 7 10.2.2 Primitive grafice . . . . . . . . . . . . . . . . . . . . . 275 10.3 Folosirea fonturilor . . . . . . . . . . . . . . . . . . . . . . . . 276 10.3.1 Clasa Font . . . . . . . . . . . . . . . . . . . . . . . . . 277 10.3.2 Clasa FontMetrics . . . . . . . . . . . . . . . . . . . . . 279 10.4 Folosirea culorilor . . . . . . . . . . . . . . . . . . . . . . . . . 282 10.5 Folosirea imaginilor . . . . . . . . . . . . . . . . . . . . . . . . 286 10.5.1 Afi¸area imaginilor . . . . . . . . . s . . . . . . . . . . . 287 10.5.2 Monitorizarea ˆ arc˘rii imaginilor ınc˘ a . . . . . . . . . . . 289 10.5.3 Mecanismul de ”double-buffering” . . . . . . . . . . . . 291 10.5.4 Salvarea desenelor ˆ format JPEG ın . . . . . . . . . . . 291 10.5.5 Crearea imaginilor ˆ memorie . . ın . . . . . . . . . . . 292 10.6 Tip˘rirea . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . 29311 Swing 299 11.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 11.1.1 JFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 11.1.2 Swing API . . . . . . . . . . . . . . . . . . . . . . . . . 300 11.1.3 Asem˘n˘ri ¸i deosebiri cu AWT . . a a s . . . . . . . . . . . 301 11.2 Folosirea ferestrelor . . . . . . . . . . . . . . . . . . . . . . . . 304 11.2.1 Ferestre interne . . . . . . . . . . . . . . . . . . . . . . 305 11.3 Clasa JComponent . . . . . . . . . . . . . . . . . . . . . . . . 307 11.4 Arhitectura modelului Swing . . . . . . . . . . . . . . . . . . . 310 11.5 Folosirea modelelor . . . . . . . . . . . . . . . . . . . . . . . . 310 11.5.1 Tratarea evenimentelor . . . . . . . . . . . . . . . . . . 314 11.6 Folosirea componentelor . . . . . . . . . . . . . . . . . . . . . 316 11.6.1 Componente atomice . . . . . . . . . . . . . . . . . . . 316 11.6.2 Componente pentru editare de text . . . . . . . . . . . 316 11.6.3 Componente pentru selectarea unor elemente . . . . . . 319 11.6.4 Tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 11.6.5 Arbori . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 11.6.6 Containere . . . . . . . . . . . . . . . . . . . . . . . . . 332 11.6.7 Dialoguri . . . . . . . . . . . . . . . . . . . . . . . . . 335 11.7 Desenarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 11.7.1 Metode specifice . . . . . . . . . . . . . . . . . . . . . 336 11.7.2 Consideratii generale . . . . . . . . ¸ . . . . . . . . . . . 338 11.8 Look and Feel . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
  9. 9. 8 CUPRINS12 Fire de executie ¸ 343 12.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 12.2 Crearea unui fir de executie . . . . . . . . ¸ . . . . . . . . . . . 344 12.2.1 Extinderea clasei Thread . . . . . . . . . . . . . . . . . 345 12.2.2 Implementarea interfetei Runnable ¸ . . . . . . . . . . . 347 12.3 Ciclul de viat˘ al unui fir de executie . . . ¸a ¸ . . . . . . . . . . . 352 12.3.1 Terminarea unui fir de executie . . ¸ . . . . . . . . . . . 355 12.3.2 Fire de executie de tip ”daemon” . ¸ . . . . . . . . . . . 357 12.3.3 Stabilirea priorit˘¸ilor de executie . at ¸ . . . . . . . . . . . 358 12.3.4 Sincronizarea firelor de executie . . ¸ . . . . . . . . . . . 362 12.3.5 Scenariul produc˘tor / consumator a . . . . . . . . . . . 362 12.3.6 Monitoare . . . . . . . . . . . . . . . . . . . . . . . . . 367 12.3.7 Semafoare . . . . . . . . . . . . . . . . . . . . . . . . . 369 12.3.8 Probleme legate de sincronizare . . . . . . . . . . . . . 371 12.4 Gruparea firelor de executie . . . . . . . . ¸ . . . . . . . . . . . 373 12.5 Comunicarea prin fluxuri de tip ”pipe” . . . . . . . . . . . . . 376 12.6 Clasele Timer ¸i TimerTask . . . . . . . . s . . . . . . . . . . . 37813 Programare ˆ retea ın ¸ 383 13.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 13.2 Lucrul cu URL-uri . . . . . . . . . . . . . . . . . . . . . . . . 385 13.3 Socket-uri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 13.4 Comunicarea prin conexiuni . . . . . . . . . . . . . . . . . . . 388 13.5 Comunicarea prin datagrame . . . . . . . . . . . . . . . . . . . 393 13.6 Trimiterea de mesaje c˘tre mai multi clienti a ¸ ¸ . . . . . . . . . . 39714 Appleturi 401 14.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 14.2 Crearea unui applet simplu . . . . . . . . . . . . . . . . . . . . 402 14.3 Ciclul de viat˘ al unui applet . . . . . ¸a . . . . . . . . . . . . . 404 14.4 Interfata grafic˘ cu utilizatorul . . . . . ¸ a . . . . . . . . . . . . . 406 14.5 Definirea ¸i folosirea parametrilor . . . s . . . . . . . . . . . . . 408 14.6 Tag-ul APPLET . . . . . . . . . . . . . . . . . . . . . . . . . 410 14.7 Folosirea firelor de executie ˆ appleturi ¸ ın . . . . . . . . . . . . . 412 14.8 Alte metode oferite de clasa Applet . . . . . . . . . . . . . . . 416 14.9 Arhivarea appleturilor . . . . . . . . . . . . . . . . . . . . . . 420 14.10Restrictii de securitate . . . . . . . . . ¸ . . . . . . . . . . . . . 421 14.11Appleturi care sunt ¸i aplicatii . . . . . s ¸ . . . . . . . . . . . . . 421
  10. 10. CUPRINS 915 Lucrul cu baze de date 423 15.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 15.1.1 Generalit˘¸i despre baze de date . . . at . . . . . . . . . . 423 15.1.2 JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 15.2 Conectarea la o baz˘ de date . . . . . . . . . a . . . . . . . . . . 425 15.2.1 Inregistrarea unui driver . . . . . . . . . . . . . . . . . 426 15.2.2 Specificarea unei baze de date . . . . . . . . . . . . . . 427 15.2.3 Tipuri de drivere . . . . . . . . . . . . . . . . . . . . . 428 15.2.4 Realizarea unei conexiuni . . . . . . . . . . . . . . . . 430 15.3 Efectuarea de secvente SQL . . . . . . . . . ¸ . . . . . . . . . . 431 15.3.1 Interfata Statement . . . . . . . . . . ¸ . . . . . . . . . . 432 15.3.2 Interfata PreparedStatement . . . . . ¸ . . . . . . . . . . 434 15.3.3 Interfata CallableStatement . . . . . ¸ . . . . . . . . . . 437 15.3.4 Obtinerea ¸i prelucrarea rezultatelor ¸ s . . . . . . . . . . 438 15.3.5 Interfata ResultSet . . . . . . . . . . ¸ . . . . . . . . . . 438 15.3.6 Exemplu simplu . . . . . . . . . . . . . . . . . . . . . . 440 15.4 Lucrul cu meta-date . . . . . . . . . . . . . . . . . . . . . . . 442 15.4.1 Interfata DatabaseMetaData . . . . . ¸ . . . . . . . . . . 442 15.4.2 Interfata ResultSetMetaData . . . . ¸ . . . . . . . . . . 44316 Lucrul dinamic cu clase 445 16.1 Inc˘rcarea claselor ˆ memorie . . . . . . a ın . . . . . . . . . . . . 445 16.2 Mecanismul reflect˘rii . . . . . . . . . . a . . . . . . . . . . . . 452 16.2.1 Examinarea claselor ¸i interfetelor s ¸ . . . . . . . . . . . . 453 16.2.2 Manipularea obiectelor . . . . . . . . . . . . . . . . . . 456 16.2.3 Lucrul dinamic cu vectori . . . . . . . . . . . . . . . . 460
  11. 11. 10 CUPRINS
  12. 12. Capitolul 1Introducere ˆ Java ın1.1 Ce este Java ?Java este o tehnologie inovatoare lansat˘ de compania Sun Microsystems ˆ a ın1995, care a avut un impact remarcabil asupra ˆ ıntregii comunit˘¸i a dez- atvoltatorilor de software, impunˆndu-se prin calit˘¸i deosebite cum ar fi sim- a atplitate, robustete ¸i nu ˆ ultimul rˆnd portabilitate. Denumit˘ initial OAK, ¸ s ın a a ¸tehnologia Java este format˘ dintr-un limbaj de programare de nivel ˆ a ınalt pebaza c˘ruia sunt construite o serie de platforme destinate implement˘rii de a aaplicatii pentru toate segmentele industriei software. ¸1.1.1 Limbajul de programare JavaInainte de a prezenta ˆ detaliu aspectele tehnice ale limbajului Java, s˘ am- ın aintim caracteristicile sale principale, care l-au transformat ˆ ıntr-un interval detimp atˆt de scurt ˆ a ıntr-una din cele mai pupulare optiuni pentru dezvoltarea ¸de aplicatii, indiferent de domeniu sau de complexitatea lor. ¸ • Simplitate - elimin˘ supraˆ arcarea operatorilor, mo¸tenirea multipl˘ a ınc˘ s a ¸i toate ”facilit˘¸ile” ce pot provoca scrierea unui cod confuz. s at • U¸urint˘ ˆ crearea de aplicatii complexe ce folosesc programarea ˆ s ¸a ın ¸ ın retea, fire de executie, interfat˘ grafic˘, baze de date, etc. ¸ ¸ ¸a a • Robustete - elimin˘ sursele frecvente de erori ce apar ˆ programare ¸ a ın prin renuntarea la pointeri, administrarea automat˘ a memoriei ¸i elim- ¸ a s 11
  13. 13. 12 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN inarea pierderilor de memorie printr-o procedur˘ de colectare a obiectelor a care nu mai sunt referite, ce ruleaz˘ ˆ fundal (”garbage collector”). a ın • Complet orientat pe obiecte - elimin˘ complet stilul de programare a procedural. • Securitate - este un limbaj de programare foarte sigur, furnizˆnd a mecanisme stricte de securitate a programelor concretizate prin: ver- ificarea dinamic˘ a codului pentru detectarea secventelor periculoase, a ¸ impunerea unor reguli stricte pentru rularea proceselor la distant˘, etc. ¸a • Neutralitate arhitectural˘ - comportamentul unei aplicatii Java nu a ¸ depinde de arhitectura fizic˘ a ma¸inii pe care ruleaz˘. a s a • Portabililtate - Java este un limbaj independent de platforma de lu- cru, aceea¸i aplicatie rulˆnd f˘r˘ nici o modificare ¸i f˘r˘ a necesita re- s ¸ a aa s aa compilarea ei pe sisteme de operare diferite cum ar fi Windows, Linux, Mac OS, Solaris, etc. lucru care aduce economii substantiale firmelor ¸ dezvoltatoare de aplicatii. ¸ • Este compilat ¸i interpretat, aceasta fiind solutia eficient˘ pentru s ¸ a obtinerea portabilit˘¸ii. ¸ at • Performant˘ - de¸i mai lent decˆt limbajele de programare care genereaz˘ ¸a s a a executabile native pentru o anumit˘ platform˘ de lucru, compilatorul a a Java asigur˘ o performant˘ ridicat˘ a codului de octeti, astfel ˆ at a ¸a a ¸ ıncˆ viteza de lucru putin mai sc˘zut˘ nu va fi un impediment ˆ dezvoltarea ¸ a a ın de aplicatii oricˆt de complexe, inclusiv grafic˘ 3D, animatie, etc. ¸ a a ¸ • Este modelat dup˘ C ¸i C++, trecerea de la C, C++ la Java a s f˘cˆndu-se foarte u¸or. a a s1.1.2 Platforme de lucru JavaLimbajul de programare Java a fost folosit la dezvoltarea unor tehnologii ded-icate rezolv˘rii unor probleme din cele mai diverse domenii. Aceste tehnologii aau fost grupate ˆ a¸a numitele platforme de lucru, ce reprezint˘ seturi de ın s alibr˘rii scrise ˆ limbajul Java, precum ¸i diverse programe utilitare, folosite a ın spentru dezvoltarea de aplicatii sau componente destinate unei anume cate- ¸gorii de utilizatori.
  14. 14. 1.1. CE ESTE JAVA ? 13 • J2SE (Standard Edition) Este platforma standard de lucru ce ofer˘ suport pentru crearea de a aplicatii independente ¸i appleturi. ¸ s De asemenea, aici este inclus˘ ¸i tehnologia Java Web Start ce furnizeaz˘ as a o modalitate extrem de facil˘ pentru lansarea ¸i instalarea local˘ a pro- a s a gramelor scrise ˆ Java direct de pe Web, oferind cea mai comod˘ solutie ın a ¸ pentru distributia ¸i actualizarea aplicatiilor Java. ¸ s ¸ • J2ME (Micro Edition) Folosind Java, programarea dispozitivelor mobile este extrem de simpl˘, a platforma de lucru J2ME oferind suportul necesar scrierii de programe dedicate acestui scop. • J2EE (Enterprise Edition) Aceast˘ platform˘ ofer˘ API-ul necesar dezvolt˘rii de aplicatii com- a a a a ¸ plexe, formate din componente ce trebuie s˘ ruleze ˆ sisteme eterogene, a ın cu informatiile memorate ˆ baze de date distribuite, etc. ¸ ın Tot aici g˘sim ¸i suportul necesar pentru crearea de aplicatii ¸i servicii a s ¸ s Web, bazate pe componente cum ar fi servleturi, pagini JSP, etc. Toate distributiile Java sunt oferite gratuit ¸i pot fi desc˘rcate de pe ¸ s aInternet de la adresa ”http://java.sun.com”. In continuare, vom folosi termenul J2SDK pentru a ne referi la distributia ¸standard J2SE 1.5 SDK (Tiger).1.1.3 Java: un limbaj compilat ¸i interpretat sIn functie de modul de executie a aplicatiilor, limbajele de programare se ¸ ¸ ¸ˆımpart ˆ dou˘ categorii: ın a • Interpretate: instructiunile sunt citite linie cu linie de un program ¸ numit interpretor ¸i traduse ˆ instructiuni ma¸in˘. Avantajul aces- s ın ¸ s a tei solutii este simplitatea ¸i faptul c˘ fiind interpretat˘ direct sursa ¸ s a a programului obtinem portabilitatea. Dezavantajul evident este viteza ¸ de executie redus˘. Probabil cel mai cunoscute limbaj interpretat este ¸ a limbajul Basic. • Compilate: codul surs˘ al programelor este transformat de compi- a lator ˆ ıntr-un cod ce poate fi executat direct de procesor, numit cod
  15. 15. 14 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN ma¸in˘. Avantajul este executia extrem de rapid˘, dezavantajul fiind s a ¸ a lipsa portabilit˘¸ii, codul compilat ˆ at ıntr-un format de nivel sc˘zut nu a poate fi rulat decˆt pe platforma de lucru pe care a fost compilat. a Limbajul Java combin˘ solutiile amintite mai sus, programele Java fiind a ¸atˆt interpretate cˆt ¸i compilate. A¸adar vom avea la dispozitie un compi- a a s s ¸lator responsabil cu transformarea surselor programului ˆ a¸a numitul cod ın sde octeti, precum ¸i un interpretor ce va executa respectivul cod de octeti. ¸ s ¸ Codul de octeti este diferit de codul ma¸in˘. Codul ma¸in˘ este reprezen- ¸ s a s atat de o succesiune de instructiuni specifice unui anumit procesor ¸i unei an- ¸ sumite platforme de lucru reprezentate ˆ format binar astfel ˆ at s˘ poat˘ ın ıncˆ a afi executate f˘r˘ a mai necesita nici o prelucrare. aa Codurile de octeti sunt seturi de instructiuni care seam˘n˘ cu codul scris ¸ ¸ a aˆ limbaj de asamblare ¸i sunt generate de compilator independent de mediulın sde lucru. In timp ce codul ma¸in˘ este executat direct de c˘tre procesor ¸i s a a spoate fi folosit numai pe platforma pe care a fost creat, codul de octeti este ¸interpretat de mediul Java ¸i de aceea poate fi rulat pe orice platform˘ pe s acare este instalat˘ mediul de executie Java. a ¸ Prin ma¸ina virtual˘ Java (JVM) vom ˆ ¸elege mediul de executie al s a ınt ¸aplicatiilor Java. Pentru ca un cod de octeti s˘ poat˘ fi executat pe un ¸ ¸ a aanumit calculator, pe acesta trebuie s˘ fie instalat˘ o ma¸in˘ virtual˘ Java. a a s a aAcest lucru este realizat automat de c˘tre distributia J2SDK. a ¸1.2 Primul programCrearea oric˘rei aplicatii Java presupune efectuarea urm˘torilor pa¸i: a ¸ a s 1. Scriererea codului surs˘ aclass FirstApp { public static void main( String args[]) { System.out.println("Hello world!"); }}
  16. 16. 1.2. PRIMUL PROGRAM 15 Toate aplicatiile Java contin o clas˘ principal˘(primar˘) ˆ care trebuie ¸ ¸ a a a ıns˘ se gaseasc˘ metoda main. Clasele aplicatiei se pot gasi fie ˆ a a ¸ ıntr-un singurfi¸ier, fie ˆ mai multe. s ın 2. Salvarea fi¸ierelor surs˘ s a Se va face ˆ fi¸iere care au obligatoriu extensia java, nici o alt˘ exten- ın s asie nefiind acceptat˘. Este recomandat ca fi¸ierul care contine codul surs˘ a s ¸ aal clasei primare s˘ aib˘ acela¸i nume cu cel al clasei, de¸i acest lucru nu a a s seste obligatoriu. S˘ presupunem c˘ am salvat exemplul de mai sus ˆ fi¸ierul a a ın sC:introFirstApp.java. 3. Compilarea aplicatiei ¸ Pentru compilare vom folosi compilatorul javac din distributia J2SDK. ¸Apelul compilatorului se face pentru fi¸ierul ce contine clasa principal˘ a s ¸ aaplicatiei sau pentru orice fi¸ier/fi¸iere cu extensia java. Compilatorul creeaz˘ ¸ s s acˆte un fi¸ier separat pentru fiecare clas˘ a programului. Acestea au extensia a s a.class ¸i implicit sunt plasate ˆ acela¸i director cu fi¸ierele surs˘. s ın s s a javac FirstApp.javaIn cazul ˆ care compilarea a reu¸it va fi generat fi¸ierul FirstApp.class. ın s s 4. Rularea aplicatiei ¸ Se face cu interpretorul java, apelat pentru unitatea de compilare core-spunz˘toare clasei principale. Deoarece interpretorul are ca argument de aintrare numele clasei principale ¸i nu numele unui fi¸ier, ne vom pozitiona s s ¸ˆ directorul ce contine fi¸ierul FirstApp.class ¸i vom apela interpretorulın ¸ s sastfel: java FirstAppRularea unei aplicatii care nu folose¸te interfat˘ grafic˘, se va face ˆ ¸ s ¸a a ıntr-ofereastr˘ sistem. a
  17. 17. 16 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN Atentie ¸ Un apel de genul java c:introFirstApp.class este gre¸it! s1.3 Structura lexical˘ a limbajului Java a1.3.1 Setul de caractereLimbajului Java lucreaz˘ ˆ mod nativ folosind setul de caractere Unicode. a ınAcesta este un standard international care ˆ ¸ ınlocuie¸te vechiul set de caractere sASCII ¸i care folose¸te pentru reprezentarea caracterelor 2 octeti, ceea ce s s ¸ˆınseamn˘ c˘ se pot reprezenta 65536 de semne, spre deosebire de ASCII, unde a aera posibil˘ reprezentarea a doar 256 de caractere. Primele 256 caractere aUnicode corespund celor ASCII, referirea la celelalte f˘cˆndu-se prin uxxxx, a aunde xxxx reprezint˘ codul caracterului. a O alt˘ caracteristic˘ a setului de caractere Unicode este faptul c˘ ˆ a a a ıntregintervalul de reprezentare a simbolurilor este divizat ˆ subintervale numite ınblocuri, cˆteva exemple de blocuri fiind: Basic Latin, Greek, Arabic, Gothic, aCurrency, Mathematical, Arrows, Musical, etc. Mai jos sunt oferite cˆteva exemple de caractere Unicode. a • u0030 - u0039 : cifre ISO-Latin 0 - 9 • u0660 - u0669 : cifre arabic-indic 0 - 9 • u03B1 - u03C9 : simboluri grece¸ti α − ω s • u2200 - u22FF : simboluri matematice (∀, ∃, ∅, etc.) • u4e00 - u9fff : litere din alfabetul Han (Chinez, Japonez, Coreean) Mai multe informatii legate de reprezentarea Unicode pot fi obtinute la ¸ ¸adresa ”http://www.unicode.org”.1.3.2 Cuvinte cheieCuvintele rezervate ˆ Java sunt, cu cˆteva exceptii, cele din C++ ¸i au fost ın a ¸ senumerate ˆ tabelul de mai jos. Acestea nu pot fi folosite ca nume de clase, ın
  18. 18. ˘1.3. STRUCTURA LEXICALA A LIMBAJULUI JAVA 17interfete, variabile sau metode. true, false, null nu sunt cuvinte cheie, ¸dar nu pot fi nici ele folosite ca nume ˆ aplicatii. Cuvintele marcate prin ∗ ın ¸sunt rezervate, dar nu sunt folosite. 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 Incepˆnd cu versiunea 1.5, mai exist˘ ¸i cuvˆntul cheie enum. a as a1.3.3 IdentificatoriSunt secvente nelimitate de litere ¸i cifre Unicode, ˆ ¸ s ıncepˆnd cu o liter˘. Dup˘ a a acum am mai spus, identificatorii nu au voie s˘ fie identici cu cuvintele rezer- avate.1.3.4 LiteraliLiteralii pot fi de urm˘toarele tipuri: a • Intregi Sunt acceptate 3 baze de numeratie : baza 10, baza 16 (ˆ ¸ ıncep cu car- acterele 0x) ¸i baza 8 (ˆ s ıncep cu cifra 0) ¸i pot fi de dou˘ tipuri: s a – normali - se reprezint˘ pe 4 octeti (32 biti) a ¸ ¸ – lungi - se reprezint˘ pe 8 octeti (64 biti) ¸i se termin˘ cu caracterul a ¸ ¸ s a L (sau l).
  19. 19. 18 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN • Flotanti ¸ Pentru ca un literal s˘ fie considerat flotant el trebuie s˘ aib˘ cel putin o a a a ¸ zecimal˘ dup˘ virgul˘, s˘ fie ˆ notatie exponential˘ sau s˘ aib˘ sufixul a a a a ın ¸ ¸ a a a F sau f pentru valorile normale - reprezentate pe 32 biti, respectiv D ¸ sau d pentru valorile duble - reprezentate pe 64 biti. ¸ Exemple: 1.0, 2e2, 3f, 4D. • Logici Sunt reprezentati de true - valoarea logic˘ de adev˘r, respectiv false ¸ a a - valoarea logic˘ de fals. a Atentie ¸ Spre deosebire de C++, literalii ˆ ıntregi 1 ¸i 0 nu mai au semnificatia s ¸ de adev˘rat, respectiv fals. a • Caracter Un literal de tip caracter este utilizat pentru a exprima caracterele co- dului Unicode. Reprezentarea se face fie folosind o liter˘, fie o secvent˘ a ¸a escape scris˘ ˆ a ıntre apostrofuri. Secventele escape permit specificarea ¸ caracterelor care nu au reprezentare grafic˘ ¸i reprezentarea unor car- as actere speciale precum backslash, apostrof, etc. Secventele escape pre- ¸ definite ˆ Java sunt: ın – ’b’ : Backspace (BS) – ’t’ : Tab orizontal (HT) – ’n’ : Linie nou˘ (LF) a – ’f’ : Pagin˘ nou˘ (FF) a a – ’r’ : Inceput de rˆnd (CR) a – ’"’ : Ghilimele – ’’’ : Apostrof – ’’ : Backslash
  20. 20. ˘1.3. STRUCTURA LEXICALA A LIMBAJULUI JAVA 19 • Siruri de caractere ¸ Un literal ¸ir de caractere este format din zero sau mai multe caractere s ˆ ıntre ghilimele. Caracterele care formeaz˘ ¸irul pot fi caractere grafice as sau secvente escape. ¸ Dac˘ ¸irul este prea lung el poate fi scris ca o concatenare de sub¸iruri as s de dimensiune mai mic˘, concatenarea ¸irurilor realizˆndu-se cu oper- a s a atorul +, ca ˆ exemplul: "Ana " + " are " + " mere ". Sirul vid ın este "". Dup˘ cum vom vedea, orice ¸ir este de fapt o instant˘ a clasei String, a s ¸a definit˘ ˆ pachetul java.lang. a ın1.3.5 SeparatoriUn separator este un caracter care indic˘ sfˆr¸itul unei unit˘¸i lexicale ¸i a as at sınceputul alteia. In Java separatorii sunt urm˘torii: ( ) a [ ] ; , . .Instructiunile unui program se separ˘ cu punct ¸i virgul˘. ¸ a s a1.3.6 OperatoriOperatorii Java sunt, cu mici deosebiri, cei din C++: • atribuirea: = • operatori matematici: +, -, *, /, %, ++, -- . Este permis˘ notatia prescurtat˘ de forma lval op= rval: x += 2 n a ¸ a -= 3 Exist˘ operatori pentru autoincrementare ¸i autodecrementare (post ¸i a s s pre): x++, ++x, n--, --n Evaluarea expresiilor logice se face prin metoda scurtcircuitului: evalu- area se opre¸te ˆ momentul ˆ care valoarea de adev˘r a expresiei este s ın ın a sigur determinat˘. a • operatori logici: &&(and), ||(or), !(not) • operatori relationali: <, <=, >, <=, ==, != ¸ • operatori pe biti: &(and), |(or), ^ (xor), ~ (not) ¸ • operatori de translatie: <<, >>, >>> (shift la dreapta f˘r˘ semn) ¸ a a
  21. 21. 20 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN • operatorul if-else: expresie-logica ? val-true : val-false • operatorul , (virgul˘) folosit pentru evaluarea secvential˘ a operatiilor: a ¸ a ¸ int x=0, y=1, z=2; • operatorul + pentru concatenarea ¸irurilor: s String s1="Ana"; String s2="mere"; int x=10; System.out.println(s1 + " are " + x + " " + s2); • operatori pentru conversii (cast) : (tip-de-data) int a = (int)’a’; char c = (char)96; int i = 200; long l = (long)i; //widening conversion long l2 = (long)200; int i2 = (int)l2; //narrowing conversion1.3.7 ComentariiIn Java exist˘ trei feluri de comentarii: a • Comentarii pe mai multe linii, ˆ ınchise ˆ ıntre /* ¸i */. s • Comentarii pe mai multe linii care ¸in de documentatie, ˆ t ¸ ınchise ˆ ıntre /** ¸i */. Textul dintre cele dou˘ secvente este automat mutat ˆ s a ¸ ın documentatia aplicatiei de c˘tre generatorul automat de documentatie ¸ ¸ a ¸ javadoc. • Comentarii pe o singur˘ linie, care incep cu //. a Observatii: ¸ • Nu putem scrie comentarii ˆ interiorul altor comentarii. ın • Nu putem introduce comentarii ˆ interiorul literalilor caracter sau ¸ir ın s de caractere. • Secventele /* ¸i */ pot s˘ apar˘ pe o linie dup˘ secventa // dar ˆsi ¸ s a a a ¸ ı¸ pierd semnificatia. La fel se ˆ ¸ ıntampl˘ cu secventa // ˆ comentarii care a ¸ ın incep cu /* sau */.
  22. 22. 1.4. TIPURI DE DATE SI VARIABILE ¸ 211.4 Tipuri de date ¸i variabile s1.4.1 Tipuri de dateIn Java tipurile de date se impart ˆ dou˘ categorii: tipuri primitive ¸i ın a stipuri referint˘. Java porne¸te de la premiza c˘ ”orice este un obiect”, ¸a s aprin urmare tipurile de date ar trebui s˘ fie de fapt definite de clase ¸i toate a svariabilele ar trebui s˘ memoreze instante ale acestor clase (obiecte). In a ¸principiu acest lucru este adev˘rat, ˆ a, pentru usurinta program˘rii, mai a ıns˘ ¸ aexist˘ ¸i a¸a numitele tipurile primitive de date, care sunt cele uzuale : as s • aritmetice –ˆ ıntregi: byte (1 octet), short (2), int (4), long (8) – reale: float (4 octeti), double (8) • caracter: char (2 octeti) ¸ • logic: boolean (true ¸i false) sIn alte limbaje de programare formatul ¸i dimensiunea tipurilor primitive de sdate pot depinde de platforma pe care ruleaz˘ programul. In Java acest lucru anu mai este valabil, orice dependent˘ de o anumit˘ platform˘ specific˘ fiind ¸a a a aeliminat˘. a Vectorii, clasele ¸i interfetele sunt tipuri referint˘. Valoarea unei variabile s ¸ ¸ade acest tip este, spre deosebire de tipurile primitive, o referint˘ (adres˘ de ¸a amemorie) c˘tre valoarea sau multimea de valori reprezentat˘ de variabila a ¸ arespectiv˘. a Exist˘ trei tipuri de date din limbajul C care nu sunt suportate de lim- abajul Java. Acestea sunt: pointer, struct ¸i union. Pointerii au fost seliminati din cauz˘ c˘ erau o surs˘ constant˘ de erori, locul lor fiind luat de ¸ a a a atipul referint˘, iar struct ¸i union nu ˆsi mai au rostul atˆt timp cˆt tipurile ¸a s ı¸ a acompuse de date sunt formate ˆ Java prin intermediul claselor. ın
  23. 23. 22 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN1.4.2 VariabileVariabilele pot fi de tip primitiv sau referinte la obiecte (tip referint˘). In- ¸ ¸adiferent de tipul lor, pentru a putea fi folosite variabilele trebuie declarate ¸i, seventual, initializate. ¸ • Declararea variabilelor: Tip numeVariabila; • Initializarea variabilelor: Tip numeVariabila = valoare; ¸ • Declararea constantelor: final Tip numeVariabila; Evident, exist˘ posibilitatea de a declara ¸i initializa mai multe variabile a s ¸sau constante de acela¸i tip ˆ s ıntr-o singur˘ instructiune astfel: a ¸ Tip variabila1[=valoare1], variabila2[=valoare2],...; Conventia de numire a variabilelor ˆ Java include, printre altele, urm˘toarele ¸ ın acriterii: • variabilele finale (constante) se scriu cu majuscule; • variabilele care nu sunt constante se scriu astfel: prima liter˘ mic˘ iar a a dac˘ numele variabilei este format din mai multi atomi lexicali, atunci a ¸ primele litere ale celorlalti atomi se scriu cu majuscule. ¸ Exemple: final double PI = 3.14; final int MINIM=0, MAXIM = 10; int valoare = 100; char c1=’j’, c2=’a’, c3=’v’, c4=’a’; long numarElemente = 12345678L; String bauturaMeaPreferata = "apa"; In functie de locul ˆ care sunt declarate variabilele se ˆ ¸ ın ımpart ˆ urm˘toatele ın acategorii: a. Variabile membre, declarate ˆ interiorul unei clase, vizibile pentru ın toate metodele clasei respective cˆt ¸i pentru alte clase ˆ functie de a s ın ¸ nivelul lor de acces (vezi ”Declararea variabilelor membre”).
  24. 24. 1.4. TIPURI DE DATE SI VARIABILE ¸ 23 b. Parametri metodelor, vizibili doar ˆ metoda respectiv˘. ın a c. Variabile locale, declarate ˆ ıntr-o metod˘, vizibile doar ˆ metoda re- a ın spectiv˘. a d. Variabile locale, declarate ˆ ıntr-un bloc de cod, vizibile doar ˆ blocul ın respectiv. e. Parametrii de la tratarea exceptiilor (vezi ”Tratarea exceptiilor”). ¸ ¸class Exemplu { //Fiecare variabila corespunde situatiei data de numele ei //din enumerarea de mai sus int a; public void metoda(int b) { a = b; int c = 10; for(int d=0; d < 10; d++) { c --; } try { a = b/c; } catch(ArithmeticException e) { System.err.println(e.getMessage()); } }} Observatii: • Variabilele declarate ˆ ıntr-un for, r˘mˆn locale corpului ciclului: a a for(int i=0; i<100; i++) { //domeniul de vizibilitate al lui i } i = 101;//incorect • Nu este permis˘ ascunderea unei variabile: a
  25. 25. 24 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN int x=1; { int x=2; //incorect }1.5 Controlul executiei ¸Instructiunile Java pentru controlul executiei sunt foarte asem˘n˘toare celor ¸ ¸ a adin limbajul C ¸i pot fi ˆ artite ˆ urm˘toarele categorii: s ımp˘ ¸ ın a • Instructiuni de decizie: if-else, switch-case ¸ • Instructiuni de salt: for, while, do-while ¸ • Instructiuni pentru tratarea exceptiilor: try-catch-finally, throw ¸ ¸ • Alte instructiuni: break, continue, return, label: ¸1.5.1 Instructiuni de decizie ¸if-elseif (expresie-logica) { ...}if (expresie-logica) { ...} else { ...} switch-caseswitch (variabila) { case valoare1: ... break; case valoare2:
  26. 26. 1.5. CONTROLUL EXECUTIEI ¸ 25 ... break; ... default: ...} Variabilele care pot fi testate folosind instructiunea switch nu pot fi decˆt ¸ ade tipuri primitive.1.5.2 Instructiuni de salt ¸forfor(initializare; expresie-logica; pas-iteratie) { //Corpul buclei}for(int i=0, j=100 ; i < 100 && j > 0; i++, j--) { ...}Atˆt la initializare cˆt ¸i ˆ pasul de iteratie pot fi mai multe instructiuni a ¸ a s ın ¸ ¸desp˘rtite prin virgul˘. a¸ a whilewhile (expresie-logica) { ...} do-whiledo { ...}while (expresie-logica);
  27. 27. 26 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN1.5.3 Instructiuni pentru tratarea exceptiilor ¸ ¸Instructiunile pentru tratarea exceptiilor sunt try-catch-finally, respectiv ¸ ¸throw ¸i vor fi tratate ˆ capitolul ”Exceptii”. s ın ¸1.5.4 Alte instructiuni ¸ • break: p˘r˘se¸te fortat corpul unei structuri repetitive. aa s ¸ • continue: termina fortat iteratia curent˘ a unui ciclu ¸i trece la urm˘toarea ¸ ¸ a s a iteratie. ¸ • return [valoare]: termin˘ o metod˘ ¸i, eventual, returneaz˘ o valo- a as a rare. • numeEticheta: : Define¸te o etichet˘. s a De¸i ˆ Java nu exist˘ goto, se pot defini totu¸i etichete folosite ˆ expresii s ın a s ınde genul: break numeEticheata sau continue numeEticheta, utile pentrua controla punctul de ie¸ire dintr-o structur˘ repetitiv˘, ca ˆ s a a ınexemplul demai jos: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++;}1.6 Vectori1.6.1 Crearea unui vectorCrearea unui vector presupune realizarea urm˘toarelor etape: a
  28. 28. 1.6. VECTORI 27 • Declararea vectorului - Pentru a putea utiliza un vector trebuie, ˆ ınainte de toate, sa-l declar˘m. Acest lucru se face prin expresii de forma: a Tip[] numeVector; sau Tip numeVector[]; ca ˆ exemplele de mai jos: ın int[] intregi; String adrese[]; • Instantierea ¸ Declararea unui vector nu implic˘ ¸i alocarea memoriei necesare pentru as retinerea elementelor. Operatiunea de alocare a memoriei, numit˘ ¸i ¸ ¸ a s instantierea vectorului, se realizeaz˘ ˆ ¸ a ıntotdeauna prin intermediul op- eratorului new. Instantierea unui vector se va face printr-o expresie de ¸ genul: numeVector = new Tip[nrElemente]; unde nrElemente reprezint˘ num˘rul maxim de elemente pe care le a a poate avea vectorul. In urma instantierii vor fi alocati: nrElemente ∗ ¸ ¸ dimensiune(T ip) octeti necesari memor˘rii elementelor din vector, unde ¸ a prin dimensiune(T ip) am notat num˘rul de octeti pe care se reprezint˘ a ¸ a 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 instantierea unui vector pot fi f˘cute simultan astfel: s ¸ a Tip[] numeVector = new Tip[nrElemente];
  29. 29. 28 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN • Initializarea (optional) Dup˘ declararea unui vector, acesta poate fi ¸ ¸ a initializat, adic˘ elementele sale pot primi ni¸te valori initiale, evident ¸ a s ¸ dac˘ este cazul pentru a¸a ceva. In acest caz instantierea nu mai trebuie a s ¸ facut˘ explicit, alocarea memoriei f˘cˆndu-se automat ˆ functie de a a a ın ¸ num˘ rul de elemente cu care se initializeaz˘ vectorul. a ¸ a String culori[] = {"Rosu", "Galben", "Verde"}; int []factorial = {1, 1, 2, 6, 24, 120}; Primul indice al unui vector este 0, deci pozitiile unui vector cu n ele- ¸ ıntre 0 ¸i n − 1. Nu sunt permise constructii de genulmente vor fi cuprinse ˆ s ¸Tip numeVector[nrElemente], alocarea memoriei f˘cˆndu-se doar prin in- a atermediul opearatorului new. int v[10]; //ilegal int v[] = new int[10]; //corect1.6.2 Tablouri multidimensionaleIn Java tablourile multidimensionale sunt de fapt vectori de vectori. Deexemplu, crearea ¸i instantierea unei matrici vor fi realizate astfel: s ¸ Tip matrice[][] = new Tip[nrLinii][nrColoane]; matrice[i] este linia i a matricii ¸i reprezint˘ un vector cu nrColoane s aelemente iar matrice[i][j] este elementul de pe linia i ¸i coloana j. s1.6.3 Dimensiunea unui vectorCu ajutorul variabilei length se poate afla num˘rul de elemente al unui avector. int []a = new int[5]; // a.length are valoarea 5 int m[][] = new int[5][10]; // m[0].length are valoarea 10Pentru a ˆ ¸elege modalitatea de folosire a lui length trebuie mentionat c˘ ınt ¸ afiecare vector este de fapt o instant˘ a unei clase iar length este o variabil˘ ¸a apublic˘ a acelei clase, ˆ care este retinut num˘rul maxim de elemente al a ın ¸ avectorului.
  30. 30. 1.6. VECTORI 291.6.4 Copierea vectorilorCopierea elementelor unui vector a ˆıntr-un alt vector b se poate face, fieelement cu element, fie cu ajutorul metodei System.arraycopy, ca ˆ exem- ınplele de mai jos. Dup˘ cum vom vedea, o atribuire de genul b = a are alt˘ a asemnificatie decˆt copierea elementelor lui a ˆ b ¸i nu poate fi folosit˘ ˆ ¸ a ın s a ınacest 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;1.6.5 Sortarea vectorilor - clasa ArraysIn Java s-a pus un accent deosebit pe implementarea unor structuri de date¸i algoritmi care s˘ simplifice proceseul de crearea a unui algoritm, program-s aatorul trebuind s˘ se concentreze pe aspectele specifice problemei abordate. aClasa java.util.Arrays ofer˘ diverse metode foarte utile ˆ lucrul cu vec- a ıntori cum ar fi: • sort - sorteaz˘ ascendent un vector, folosind un algoritm de tip Quick- a 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 - c˘utarea binar˘ a unei anumite valori ˆ a a ıntr-un vector sortat;
  31. 31. 30 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN • equals - testarea egalit˘¸ii valorilor a doi vectori (au acelea¸i num˘r at s a de elemente ¸i pentru fiecare indice valorile corespunz˘toare din cei doi s a vectori sunt egale) • fill - atribuie fiec˘rui element din vector o valoare specificat˘. a a1.6.6 Vectori cu dimensiune variabil˘ ¸i eterogeni asImplement˘ri ale vectorilor cu num˘r variabil de elemente sunt oferite de a aclase specializate cum ar fi Vector sau ArrayList din pachetul java.util.Astfel de obiecte descriu vectori eterogeni, ale c˘ror elemente au tipul Object, a¸i vor fi studiati ˆ capitolul ”Colectii”.s ¸ ın ¸1.7 Siruri de caractere ¸In Java, un ¸ir de caractere poate fi reprezentat printr-un vector format sdin elemente de tip char, un obiect de tip String sau un obiect de tipStringBuffer. Dac˘ un ¸ir de caractere este constant (nu se dore¸te schimbarea continutului a s s ¸s˘ pe parcursul executiei programului) atunci el va fi declarat de tipul String, a ¸altfel va fi declarat de tip StringBuffer. Diferenta principal˘ ˆ ¸ a ıntre acesteclase este c˘ StringBuffer pune la dispozitie metode pentru modificarea a ¸continutului ¸irului, cum ar fi: append, insert, delete, reverse. ¸ sUzual, cea mai folosit˘ modalitate de a lucra cu ¸iruri este prin intermediul a sclasei String, care are ¸i unele particularit˘¸i fat˘ de restul claselor menite s˘ s at ¸a asimplifice cˆt mai mult folosirea ¸irurilor de caractere. Clasa StringBuffer a sva fi utilizat˘ predominant ˆ aplicatii dedicate proces˘rii textelor cum ar fi a ın ¸ aeditoarele de texte. Exemple echivalente de declarare a unui ¸ir:s String s = "abc"; String s = new String("abc"); char data[] = {’a’, ’b’, ’c’}; String s = new String(data); Observati prima variant˘ de declarare a ¸irului s din exemplul de mai sus ¸ a s- de altfel, cea mai folosit˘ - care prezint˘ o particularitate a clasei String a afata de restul claselor Java referitoare la instantierea obiectelor sale. ¸ ¸
  32. 32. ˘1.8. FOLOSIREA ARGUMENTELOR DE LA LINIA DE COMANDA 31 Concatenarea ¸irurilor de caractere se face prin intermediul operatorului s+ sau, ˆ cazul ¸irurilor de tip StringBuffer, folosind metoda append. ın s String s1 = "abc" + "xyz"; String s2 = "123"; String s3 = s1 + s2;In Java, operatorul de concatenare + este extrem de flexibil, ˆ sensul c˘ ın apermite concatenarea ¸irurilor cu obiecte de orice tip care au o reprezentare sde tip ¸ir de caractere. Mai jos, sunt cˆteva exemple: s a System.out.print("Vectorul v are" + v.length + " elemente"); String x = "a" + 1 + "b"Pentru a l˘muri putin lucrurile, ceea ce execut˘ compilatorul atunci cˆnd a ¸ a aˆ alne¸te o secvent˘ de genul String x = "a" + 1 + "b" este:ıntˆ s ¸a String x = new StringBuffer().append("a").append(1). append("b").toString() Atentie ˆ a la ordinea de efectuare a operatiilor. Sirul s=1+2+"a"+1+2 ¸ ıns˘ ¸ ¸va avea valoarea "3a12", primul + fiind operatorul matematic de adunareiar al doilea +, cel de concatenare a ¸irurilor. s1.8 Folosirea argumentelor de la linia de co- mand˘ a1.8.1 Transmiterea argumentelorO aplicatie Java poate primi oricˆte argumente de la linia de comanda ˆ ¸ a ınmomentul lans˘rii ei. Aceste argumente sunt utile pentru a permite utiliza- atorului s˘ specifice diverse optiuni legate de functionarea aplicatiei sau s˘ a ¸ ¸ ¸ afurnizeze anumite date initiale programului. ¸ Atentie ¸ Programele care folosesc argumente de la linia de comand˘ nu sunt 100% apure Java, deoarece unele sisteme de operare, cum ar fi Mac OS, nu au ˆ ınmod normal linie de comand˘.a
  33. 33. 32 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN Argumentele de la linia de comand˘ sunt introduse la lansarea unei aplicatii, a ¸fiind specificate dup˘ numele aplicatiei ¸i separate prin spatiu. De exemplu, a ¸ s ¸s˘ presupunem c˘ aplicatia Sortare ordoneaz˘ lexicografic (alfabetic) liniile a a ¸ aunui fi¸ier ¸i prime¸te ca argument de intrare numele fi¸ierului pe care s˘ s s s s aˆ sorteze. Pentru a ordona fi¸ierul "persoane.txt", aplicatia va fi lansat˘ıl s ¸ aastfel: java Sortare persoane.txtA¸adar, formatul general pentru lansarea unei aplicatii care prime¸te argu- s ¸ smente de la linia de comand˘ este: a java NumeAplicatie [arg0 arg1 . . . argn] In cazul ˆ care sunt mai multe, argumentele trebuie separate prin spatii ın ¸iar dac˘ unul dintre argumente contine spatii, atunci el trebuie pus ˆ a ¸ ¸ ıntreghilimele. Evident, o aplicatie poate s˘ nu primeasc˘ nici un argument sau ¸ a apoate s˘ ignore argumentele primite de la linia de comand˘. a a1.8.2 Primirea argumentelorIn momentul lans˘rii unei aplicatii interpretorul parcurge linia de comand˘ cu a ¸ acare a fost lansat˘ aplicattia ¸i, ˆ cazul ˆ care exist˘, transmite programului a ¸ s ın ın aargumentele specificate sub forma unui vector de ¸iruri. Acesta este primit sde aplicatie ca parametru al metodei main. Reamintim c˘ formatul metodei ¸ amain din clasa principal˘ este: a public static void main (String args[])Vectorul args primit ca parametru de metoda main va contine toate argu- ¸mentele transmise programului de la linia de comand˘. aIn cazul apelului java Sortare persoane.txt vectorul args va contine un ¸singur element pe prima s˘ pozitie: args[0]="persoane.txt". a ¸ Vectoru args este instantiat cu un num˘r de elemente egal cu num˘rul ar- ¸ a agumentelor primite de la linia de comand˘. A¸adar, pentru a afla num˘rul de a s aargumente primite de program este suficient s˘ afl˘m dimensiunea vectorului a aargs prin intermediul atributului length:
  34. 34. ˘1.8. FOLOSIREA ARGUMENTELOR DE LA LINIA DE COMANDA 33 public static void main (String args[]) { int numarArgumente = args.length ; } In cazul ˆ care aplicatia presupune existenta unor argumente de la linia ın ¸ ¸de comand˘, ˆ a acestea nu au fost transmise programului la lansarea sa, vor a ıns˘ap˘rea exceptii (erori) de tipul ArrayIndexOutOfBoundsException. Tratarea a ¸acestor exceptii este prezentat˘ ˆ capitolul ”Exceptii”. ¸ a ın ¸Din acest motiv, este necesar s˘ test˘m dac˘ programul a primit argumentele a a ade la linia de comand˘ necesare pentru functionarea sa ¸i, ˆ caz contrar, s˘ a ¸ s ın aafi¸eze un mesaj de avertizare sau s˘ foloseasc˘ ni¸te valori implicite, ca ˆ s a a s ınexemplul de mai jos:public class Salut { 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 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 contine¸pe prima pozitie numele aplicatiei, ˆ ¸ ¸ ıntrucˆt ˆ Java numele aplicatiei este a ın ¸chiar numele clasei principale, adic˘ a clasei ˆ care se gase¸te metoda main. a ın s S˘ consider˘ ˆ continuare un exemplu simplu ˆ care se dore¸te afi¸area a a ın ın s spe ecran a argumentelor primite de la linia de comand˘: apublic class Afisare { public static void main (String[] args) { for (int i = 0; i < args.length; i++) System.out.println(args[i]);
  35. 35. 34 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN }} Un apel de genul java Afisare Hello Java va produce urm˘torul rezul- atat (aplicatia a primit 2 argumente): ¸ Hello Java Apelul java Afisare "Hello Java" va produce ˆ a alt rezultat (aplicatia ıns˘ ¸a primit un singur argument): Hello Java1.8.3 Argumente numericeArgumentele de la linia de comand˘ sunt primite sub forma unui vector de a¸iruri (obiecte de tip String). In cazul ˆ care unele dintre acestea reprezint˘s ın avalori numerice ele vor trebui convertite din ¸iruri ˆ numere. Acest lucru s ınse realizeaz˘ cu metode de tipul parseTipNumeric aflate ˆ clasa corespun- a ınzatoare tipului ˆ care vrem s˘ facem conversia: Integer, Float, Double, ın aetc. S˘ consider˘m, de exemplu, c˘ aplicatia Power ridic˘ un numar real la o a a a ¸ aputere ˆıntreag˘, argumentele fiind trimise de la linia de comand˘ sub forma: a a java Power "1.5" "2" //ridica 1.5 la puterea 2Conversia celor dou˘ argumente ˆ numere se va face astfel: a ınpublic class Power { 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 exceptii (erori) de tipul ¸NumberFormatException ˆ cazul ˆ care ¸irul primit ca parametru nu reprezint˘ ın ın s aun numar de tipul respectiv. Tratarea acestor exceptii este prezentat˘ ˆ ¸ a ıncapitolul ”Exceptii”. ¸

×