SlideShare ist ein Scribd-Unternehmen logo
1 von 462
Downloaden Sie, um offline zu lesen
Curs practic de Java

   Cristian Fr˘sinaru
              a
Cuprins

1 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
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 . . . . . . . . . . . . .        .   .   .   .   .   .   34

2 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
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 . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   75

3 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 . . . . . . . .
                               ¸                       . . . . .           .   .   .   .   .   .   .   92

4 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
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 . . . . . . . . . . . . . . . . . . . . . . . . . . .                     .   .   119

5 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 . . . . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   . 142

6 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
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 . . . . . . . .
                                 ¸                                                            .   .   .   .   .   159

7 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               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 172

8 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 . . . . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   196

9 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
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 . . . . . . . . . . . . . . . .             .   .   .   .   .   .   265

10 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
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                                             .   .   .   .   .   .   .   .   .   .   .   293

11 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
8                                                                                        CUPRINS

12 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                                     .   .   .   .   .   .   .   .   .   .   . 378

13 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             ¸      ¸           .   .   .   .   .   .   .   .   .   . 397

14 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
CUPRINS                                                                                             9

15 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 . . . .
                      ¸                                      .   .   .   .   .   .   .   .   .   . 443

16 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
10   CUPRINS
Capitolul 1

Introducere ˆ Java
            ın

1.1      Ce este Java ?
Java este o tehnologie inovatoare lansat˘ de compania Sun Microsystems ˆ
                                         a                                  ın
1995, care a avut un impact remarcabil asupra ˆ    ıntregii comunit˘¸i a dez-
                                                                   at
voltatorilor de software, impunˆndu-se prin calit˘¸i deosebite cum ar fi sim-
                                a                 at
plitate, 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 pe
baza c˘ruia sunt construite o serie de platforme destinate implement˘rii de
       a                                                               a
aplicatii pentru toate segmentele industriei software.
      ¸


1.1.1     Limbajul de programare Java
Inainte de a prezenta ˆ detaliu aspectele tehnice ale limbajului Java, s˘ am-
                        ın                                                 a
intim caracteristicile sale principale, care l-au transformat ˆ
                                                              ıntr-un interval de
timp 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
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               s

1.1.2      Platforme de lucru Java
Limbajul de programare Java a fost folosit la dezvoltarea unor tehnologii ded-
icate rezolv˘rii unor probleme din cele mai diverse domenii. Aceste tehnologii
             a
au fost grupate ˆ a¸a numitele platforme de lucru, ce reprezint˘ seturi de
                   ın s                                            a
libr˘rii scrise ˆ limbajul Java, precum ¸i diverse programe utilitare, folosite
    a           ın                       s
pentru dezvoltarea de aplicatii sau componente destinate unei anume cate-
                              ¸
gorii de utilizatori.
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             a
Internet 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
                                  s
In 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
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 s
de 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 a
tat de o succesiune de instructiuni specifice unui anumit procesor ¸i unei an-
                                 ¸                                      s
umite platforme de lucru reprezentate ˆ format binar astfel ˆ at s˘ poat˘
                                             ın                     ıncˆ a       a
fi 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                       s
de lucru. In timp ce codul ma¸in˘ este executat direct de c˘tre procesor ¸i
                                   s a                            a              s
poate 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                                              a
care 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     a
anumit calculator, pe acesta trebuie s˘ fie instalat˘ o ma¸in˘ virtual˘ Java.
                                           a            a     s a         a
Acest lucru este realizat automat de c˘tre distributia J2SDK.
                                           a            ¸


1.2      Primul program
Crearea oric˘rei aplicatii Java presupune efectuarea urm˘torilor pa¸i:
            a          ¸                                a          s


     1. Scriererea codului surs˘
                               a



class FirstApp {
  public static void main( String args[]) {
    System.out.println("Hello world!");
  }
}
1.2. PRIMUL PROGRAM                                                         15

    Toate aplicatiile Java contin o clas˘ principal˘(primar˘) ˆ care trebuie
                ¸             ¸         a          a       a ın
s˘ se gaseasc˘ metoda main. Clasele aplicatiei se pot gasi fie ˆ
 a           a                               ¸                 ıntr-un singur
fi¸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                                                  a
sie nefiind acceptat˘. Este recomandat ca fi¸ierul care contine codul surs˘
                     a                       s              ¸               a
al clasei primare s˘ aib˘ acela¸i nume cu cel al clasei, de¸i acest lucru nu
                   a     a     s                           s
este obligatoriu. S˘ presupunem c˘ am salvat exemplul de mai sus ˆ fi¸ierul
                   a              a                                 ın s
C: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           ¸                  a
aplicatiei sau pentru orice fi¸ier/fi¸iere cu extensia java. Compilatorul creeaz˘
      ¸                      s      s                                         a
cˆ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.java
In 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
       a
intrare 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                       s
astfel:
  java FirstApp
Rularea unei aplicatii care nu folose¸te interfat˘ grafic˘, se va face ˆ
                   ¸                 s          ¸a      a             ıntr-o
fereastr˘ sistem.
        a
16                              CAPITOLUL 1. INTRODUCERE ˆ JAVA
                                                         IN


     Atentie
         ¸
     Un apel de genul java c:introFirstApp.class este gre¸it!
                                                           s




1.3       Structura lexical˘ a limbajului Java
                           a
1.3.1      Setul de caractere
Limbajului Java lucreaz˘ ˆ mod nativ folosind setul de caractere Unicode.
                          a ın
Acesta este un standard international care ˆ
                                 ¸          ınlocuie¸te vechiul set de caractere
                                                    s
ASCII ¸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 a
era posibil˘ reprezentarea a doar 256 de caractere. Primele 256 caractere
            a
Unicode corespund celor ASCII, referirea la celelalte f˘cˆndu-se prin uxxxx,
                                                        a a
unde xxxx reprezint˘ codul caracterului.
                     a
    O alt˘ caracteristic˘ a setului de caractere Unicode este faptul c˘ ˆ
          a             a                                               a ıntreg
intervalul de reprezentare a simbolurilor este divizat ˆ subintervale numite
                                                        ın
blocuri, cˆteva exemple de blocuri fiind: Basic Latin, Greek, Arabic, Gothic,
            a
Currency, 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 cheie
Cuvintele rezervate ˆ Java sunt, cu cˆteva exceptii, cele din C++ ¸i au fost
                    ın               a          ¸                 s
enumerate ˆ tabelul de mai jos. Acestea nu pot fi folosite ca nume de clase,
           ın
˘
1.3. STRUCTURA LEXICALA A LIMBAJULUI JAVA                                     17

interfete, 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      a


1.3.3     Identificatori
Sunt secvente nelimitate de litere ¸i cifre Unicode, ˆ
           ¸                       s                 ıncepˆnd cu o liter˘. Dup˘
                                                          a             a     a
cum am mai spus, identificatorii nu au voie s˘ fie identici cu cuvintele rezer-
                                                a
vate.


1.3.4     Literali
Literalii 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).
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
˘
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 ın

1.3.5    Separatori
Un 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        a

1.3.6    Operatori
Operatorii 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
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 conversion

1.3.7      Comentarii
In 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 */.
1.4. TIPURI DE DATE SI VARIABILE
                    ¸                                                          21

1.4      Tipuri de date ¸i variabile
                        s
1.4.1     Tipuri de date
In Java tipurile de date se impart ˆ dou˘ categorii: tipuri primitive ¸i
                                      ın     a                              s
tipuri referint˘. Java porne¸te de la premiza c˘ ”orice este un obiect”,
                ¸a               s                   a
prin urmare tipurile de date ar trebui s˘ fie de fapt definite de clase ¸i toate
                                          a                             s
variabilele 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˘               ¸           a
exist˘ ¸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)
                          s

In alte limbaje de programare formatul ¸i dimensiunea tipurilor primitive de
                                        s
date pot depinde de platforma pe care ruleaz˘ programul. In Java acest lucru
                                            a
nu mai este valabil, orice dependent˘ de o anumit˘ platform˘ specific˘ fiind
                                   ¸a             a         a        a
eliminat˘.
         a


   Vectorii, clasele ¸i interfetele sunt tipuri referint˘. Valoarea unei variabile
                     s         ¸                       ¸a
de acest tip este, spre deosebire de tipurile primitive, o referint˘ (adres˘ de
                                                                    ¸a       a
memorie) c˘tre valoarea sau multimea de valori reprezentat˘ de variabila
            a                         ¸                            a
respectiv˘.
         a


    Exist˘ trei tipuri de date din limbajul C care nu sunt suportate de lim-
          a
bajul Java. Acestea sunt: pointer, struct ¸i union. Pointerii au fost
                                                  s
eliminati din cauz˘ c˘ erau o surs˘ constant˘ de erori, locul lor fiind luat de
        ¸           a a             a         a
tipul referint˘, iar struct ¸i union nu ˆsi mai au rostul atˆt timp cˆt tipurile
             ¸a             s           ı¸                  a        a
compuse de date sunt formate ˆ Java prin intermediul claselor.
                                 ın
22                              CAPITOLUL 1. INTRODUCERE ˆ JAVA
                                                         IN

1.4.2      Variabile
Variabilele pot fi de tip primitiv sau referinte la obiecte (tip referint˘). In-
                                               ¸                         ¸a
diferent de tipul lor, pentru a putea fi folosite variabilele trebuie declarate ¸i,
                                                                               s
eventual, 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                                 a
criterii:

     • 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   a
categorii:

     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”).
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
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 a
din 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-else

if (expresie-logica) {
  ...
}

if (expresie-logica) {
   ...
} else {
   ...
}

     switch-case

switch (variabila) {
  case valoare1:
     ...
    break;
  case valoare2:
1.5. CONTROLUL EXECUTIEI
                    ¸                                                      25

      ...
      break;
    ...
    default:
      ...
}

   Variabilele care pot fi testate folosind instructiunea switch nu pot fi decˆt
                                                  ¸                         a
de tipuri primitive.

1.5.2         Instructiuni de salt
                     ¸
for

for(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


      while

while (expresie-logica) {
  ...
}



      do-while

do {
  ...
}
while (expresie-logica);
26                               CAPITOLUL 1. INTRODUCERE ˆ JAVA
                                                          IN

1.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                    ın
de genul: break numeEticheata sau continue numeEticheta, utile pentru
a controla punctul de ie¸ire dintr-o structur˘ repetitiv˘, ca ˆ
                         s                   a           a      ınexemplul de
mai 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       Vectori
1.6.1      Crearea unui vector
Crearea unui vector presupune realizarea urm˘toarelor etape:
                                            a
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];
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 genul
mente vor fi cuprinse ˆ       s                                   ¸
Tip numeVector[nrElemente], alocarea memoriei f˘cˆndu-se doar prin in-
                                                     a a
termediul opearatorului new.
     int v[10];                   //ilegal
     int v[] = new int[10];       //corect

1.6.2      Tablouri multidimensionale
In Java tablourile multidimensionale sunt de fapt vectori de vectori. De
exemplu, 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           a
elemente iar matrice[i][j] este elementul de pe linia i ¸i coloana j.
                                                         s

1.6.3      Dimensiunea unui vector
Cu ajutorul variabilei length se poate afla num˘rul de elemente al unui
                                              a
vector.
     int []a = new int[5];
     // a.length are valoarea 5

     int m[][] = new int[5][10];
     // m[0].length are valoarea 10
Pentru a ˆ ¸elege modalitatea de folosire a lui length trebuie mentionat c˘
         ınt                                                        ¸        a
fiecare vector este de fapt o instant˘ a unei clase iar length este o variabil˘
                                   ¸a                                        a
public˘ a acelei clase, ˆ care este retinut num˘rul maxim de elemente al
      a                 ın             ¸          a
vectorului.
1.6. VECTORI                                                              29

1.6.4    Copierea vectorilor
Copierea elementelor unui vector a ˆıntr-un alt vector b se poate face, fie
element cu element, fie cu ajutorul metodei System.arraycopy, ca ˆ exem-
                                                                 ın
plele de mai jos. Dup˘ cum vom vedea, o atribuire de genul b = a are alt˘
                     a                                                   a
semnificatie decˆt copierea elementelor lui a ˆ b ¸i nu poate fi folosit˘ ˆ
         ¸      a                            ın s                     a ın
acest scop.

  int a[] = {1, 2, 3, 4};
  int b[] = new int[4];

  // Varianta 1
  for(int i=0; i<a.length; i++)
    b[i] = a[i];

  // Varianta 2
  System.arraycopy(a, 0, b, 0, a.length);

  // Nu are efectul dorit
  b = a;

1.6.5    Sortarea vectorilor - clasa Arrays
In Java s-a pus un accent deosebit pe implementarea unor structuri de date
¸i algoritmi care s˘ simplifice proceseul de crearea a unui algoritm, program-
s                  a
atorul trebuind s˘ se concentreze pe aspectele specifice problemei abordate.
                  a
Clasa java.util.Arrays ofer˘ diverse metode foarte utile ˆ lucrul cu vec-
                                a                             ın
tori 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;
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                                          a

1.6.6      Vectori cu dimensiune variabil˘ ¸i eterogeni
                                         as
Implement˘ri ale vectorilor cu num˘r variabil de elemente sunt oferite de
           a                            a
clase 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
               s
din elemente de tip char, un obiect de tip String sau un obiect de tip
StringBuffer.
    Dac˘ un ¸ir de caractere este constant (nu se 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 aceste
clase este c˘ StringBuffer pune la dispozitie metode pentru modificarea
            a                                    ¸
continutului ¸irului, cum ar fi: append, insert, delete, reverse.
    ¸         s
Uzual, cea mai folosit˘ modalitate de a lucra cu ¸iruri este prin intermediul
                       a                             s
clasei String, care are ¸i unele particularit˘¸i fat˘ de restul claselor menite s˘
                        s                    at ¸a                               a
simplifice cˆt mai mult folosirea ¸irurilor de caractere. Clasa StringBuffer
            a                      s
va fi utilizat˘ predominant ˆ aplicatii dedicate proces˘rii textelor cum ar fi
             a               ın        ¸                   a
editoarele 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                a
fata de restul claselor Java referitoare la instantierea obiectelor sale.
  ¸                                               ¸
˘
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         a
permite concatenarea ¸irurilor cu obiecte de orice tip care au o reprezentare
                       s
de 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 adunare
iar al doilea +, cel de concatenare a ¸irurilor.
                                      s


1.8     Folosirea argumentelor de la linia de co-
        mand˘ a
1.8.1    Transmiterea argumentelor
O aplicatie Java poate primi oricˆte argumente de la linia de comanda ˆ
         ¸                         a                                      ın
momentul lans˘rii ei. Aceste argumente sunt utile pentru a permite utiliza-
               a
torului s˘ specifice diverse optiuni legate de functionarea aplicatiei sau s˘
         a                     ¸                  ¸              ¸         a
furnizeze anumite date initiale programului.
                          ¸


   Atentie
        ¸
   Programele care folosesc argumente de la linia de comand˘ nu sunt 100%
                                                           a
pure Java, deoarece unele sisteme de operare, cum ar fi Mac OS, nu au ˆ  ın
mod normal linie de comand˘.a
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       ¸                    a
unui 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                               ¸             a
astfel:
     java Sortare persoane.txt
A¸adar, formatul general pentru lansarea unei aplicatii care prime¸te argu-
 s                                                  ¸             s
mente 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                            ¸       ¸                         ıntre
ghilimele. Evident, o aplicatie poate s˘ nu primeasc˘ nici un argument sau
                            ¸          a             a
poate s˘ ignore argumentele primite de la linia de comand˘.
        a                                                 a

1.8.2      Primirea argumentelor
In momentul lans˘rii unei aplicatii interpretorul parcurge linia de comand˘ cu
                  a                ¸                                       a
care a fost lansat˘ aplicattia ¸i, ˆ cazul ˆ care exist˘, transmite programului
                  a       ¸ s ın           ın          a
argumentele specificate sub forma unui vector de ¸iruri. Acesta este primit
                                                      s
de aplicatie ca parametru al metodei main. Reamintim c˘ formatul metodei
          ¸                                                  a
main 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˘.
                                                   a
In 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                        a
gumentelor primite de la linia de comand˘. A¸adar, pentru a afla num˘rul de
                                        a s                        a
argumente primite de program este suficient s˘ afl˘m dimensiunea vectorului
                                            a a
args prin intermediul atributului length:
˘
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    a
de la linia de comand˘ necesare pentru functionarea sa ¸i, ˆ caz contrar, s˘
                       a                     ¸           s ın               a
afi¸eze un mesaj de avertizare sau s˘ foloseasc˘ ni¸te valori implicite, ca ˆ
  s                                    a       a s                         ın
exemplul 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    s
pe ecran a argumentelor primite de la linia de comand˘:  a

public class Afisare {
  public static void main (String[] args) {
    for (int i = 0; i < args.length; i++)
      System.out.println(args[i]);
34                             CAPITOLUL 1. INTRODUCERE ˆ JAVA
                                                        IN

     }
}
    Un apel de genul java Afisare Hello Java va produce urm˘torul rezul-
                                                           a
tat (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 Java

1.8.3        Argumente numerice
Argumentele 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                                   a
valori numerice ele vor trebui convertite din ¸iruri ˆ numere. Acest lucru
                                                s     ın
se realizeaz˘ cu metode de tipul parseTipNumeric aflate ˆ clasa corespun-
             a                                               ın
zatoare tipului ˆ care vrem s˘ facem conversia: Integer, Float, Double,
                 ın            a
etc.
    S˘ consider˘m, de exemplu, c˘ aplicatia Power ridic˘ un numar real la o
     a          a                  a        ¸             a
putere ˆıntreag˘, argumentele fiind trimise de la linia de comand˘ sub forma:
               a                                                  a
     java Power "1.5" "2" //ridica 1.5 la puterea 2
Conversia celor dou˘ argumente ˆ numere se va face astfel:
                   a           ın
public 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                                    a
un numar de tipul respectiv. Tratarea acestor exceptii este prezentat˘ ˆ
                                                    ¸                 a ın
capitolul ”Exceptii”.
                ¸
Capitolul 2

Obiecte ¸i clase
        s

2.1     Ciclul de viat˘ al unui obiect
                     ¸a
2.1.1    Crearea obiectelor
In Java, ca ˆ orice limbaj de programare orientat-obiect, crearea obiectelor
            ın
se realizeaz˘ prin instantierea unei clase ¸i implic˘ urm˘toarele lucruri:
            a            ¸                 s        a    a
   • Declararea
     Presupune specificarea tipului acelui obiect, cu alte cuvinte specificarea
     clasei acestuia (vom vedea c˘ tipul unui obiect poate fi ¸i o interfat˘).
                                 a                            s          ¸a

        NumeClasa numeObiect;

   • Instantierea
             ¸
     Se realizeaz˘ prin intermediul operatorului new ¸i are ca efect crearea
                 a                                    s
     efectiv˘ a obiectului cu alocarea spatiului de memorie corespunz˘tor.
            a                             ¸                           a

        numeObiect = new NumeClasa();

   • Initializarea
         ¸
     Se realizeaz˘ prin intermediul constructorilor clasei respective. Initializarea
                 a                                                        ¸
     este de fapt parte integrant˘ a procesului de instantiere, ˆ sensul c˘
                                   a                         ¸     ın           a
     imediat dup˘ alocarea memoriei ca efect al operatorului new este apelat
                  a
     constructorul specificat. Parantezele rotunde de dup˘ numele clasei in-
                                                             a
     dic˘ faptul c˘ acolo este de fapt un apel la unul din constructorii clasei
         a        a
     ¸i nu simpla specificare a numelui clasei.
     s
     Mai general, instantierea ¸i initializarea apar sub forma:
                          ¸     s    ¸

                                      35
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java

Weitere ähnliche Inhalte

Was ist angesagt?

Introducere in filosofia obiectuala
Introducere in filosofia obiectualaIntroducere in filosofia obiectuala
Introducere in filosofia obiectualaAurel Rusu
 
36477674 curs-master-at-200900
36477674 curs-master-at-20090036477674 curs-master-at-200900
36477674 curs-master-at-200900Marina Zima
 
Curs masterat 2010
Curs masterat 2010Curs masterat 2010
Curs masterat 2010crhai
 
Matematici speciale -codruta-chis
Matematici speciale -codruta-chisMatematici speciale -codruta-chis
Matematici speciale -codruta-chisSorina Maria Fusian
 
Applications of Artificial Intelligence in Advanced Logic Synthesis
Applications of Artificial Intelligence in Advanced Logic SynthesisApplications of Artificial Intelligence in Advanced Logic Synthesis
Applications of Artificial Intelligence in Advanced Logic SynthesisCodrin Pruteanu
 
Ecaterina Tzaralunga.Viata in jurul Mediteranei si proiectul romania
Ecaterina Tzaralunga.Viata in jurul Mediteranei si proiectul romaniaEcaterina Tzaralunga.Viata in jurul Mediteranei si proiectul romania
Ecaterina Tzaralunga.Viata in jurul Mediteranei si proiectul romaniataralunga
 
Manual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redManual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redQuickmobile
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueQuickmobile
 
Initiere operare pc
Initiere operare pcInitiere operare pc
Initiere operare pcELENA NITA
 
curs utilizarea-calculatorului
curs utilizarea-calculatoruluicurs utilizarea-calculatorului
curs utilizarea-calculatoruluicomsys00
 
Manual instructiuni-samsung-s5530-titan-grey
Manual instructiuni-samsung-s5530-titan-greyManual instructiuni-samsung-s5530-titan-grey
Manual instructiuni-samsung-s5530-titan-greyQuickmobile
 
Manual instructiuni-blackberry-9300-3g-black
Manual instructiuni-blackberry-9300-3g-blackManual instructiuni-blackberry-9300-3g-black
Manual instructiuni-blackberry-9300-3g-blackQuickmobile
 

Was ist angesagt? (14)

Carte C 2003
Carte C 2003Carte C 2003
Carte C 2003
 
Introducere in filosofia obiectuala
Introducere in filosofia obiectualaIntroducere in filosofia obiectuala
Introducere in filosofia obiectuala
 
36477674 curs-master-at-200900
36477674 curs-master-at-20090036477674 curs-master-at-200900
36477674 curs-master-at-200900
 
Curs masterat 2010
Curs masterat 2010Curs masterat 2010
Curs masterat 2010
 
Matematici speciale -codruta-chis
Matematici speciale -codruta-chisMatematici speciale -codruta-chis
Matematici speciale -codruta-chis
 
Applications of Artificial Intelligence in Advanced Logic Synthesis
Applications of Artificial Intelligence in Advanced Logic SynthesisApplications of Artificial Intelligence in Advanced Logic Synthesis
Applications of Artificial Intelligence in Advanced Logic Synthesis
 
Ecaterina Tzaralunga.Viata in jurul Mediteranei si proiectul romania
Ecaterina Tzaralunga.Viata in jurul Mediteranei si proiectul romaniaEcaterina Tzaralunga.Viata in jurul Mediteranei si proiectul romania
Ecaterina Tzaralunga.Viata in jurul Mediteranei si proiectul romania
 
Manual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redManual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-red
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
 
Initiere operare pc
Initiere operare pcInitiere operare pc
Initiere operare pc
 
curs utilizarea-calculatorului
curs utilizarea-calculatoruluicurs utilizarea-calculatorului
curs utilizarea-calculatorului
 
Manual instructiuni-samsung-s5530-titan-grey
Manual instructiuni-samsung-s5530-titan-greyManual instructiuni-samsung-s5530-titan-grey
Manual instructiuni-samsung-s5530-titan-grey
 
curs-ubuntu
curs-ubuntucurs-ubuntu
curs-ubuntu
 
Manual instructiuni-blackberry-9300-3g-black
Manual instructiuni-blackberry-9300-3g-blackManual instructiuni-blackberry-9300-3g-black
Manual instructiuni-blackberry-9300-3g-black
 

Andere mochten auch

Exercises in modern english grammar
Exercises in modern english grammarExercises in modern english grammar
Exercises in modern english grammarSerghei Urban
 
дистанционного обучения
дистанционного обучениядистанционного обучения
дистанционного обученияSerghei Urban
 
REFORMAREA SISTEMULUI EDUCAЮIONAL
REFORMAREA SISTEMULUI EDUCAЮIONALREFORMAREA SISTEMULUI EDUCAЮIONAL
REFORMAREA SISTEMULUI EDUCAЮIONALSerghei Urban
 
17 ru informatica corlat
17 ru informatica corlat17 ru informatica corlat
17 ru informatica corlatSerghei Urban
 
Evaluarea formativă
Evaluarea formativăEvaluarea formativă
Evaluarea formativăSerghei Urban
 
Curs practic de_java
Curs practic de_javaCurs practic de_java
Curs practic de_javastones1
 

Andere mochten auch (9)

Exercises in modern english grammar
Exercises in modern english grammarExercises in modern english grammar
Exercises in modern english grammar
 
Win server
Win serverWin server
Win server
 
дистанционного обучения
дистанционного обучениядистанционного обучения
дистанционного обучения
 
Kiyosaki success.am
Kiyosaki success.amKiyosaki success.am
Kiyosaki success.am
 
REFORMAREA SISTEMULUI EDUCAЮIONAL
REFORMAREA SISTEMULUI EDUCAЮIONALREFORMAREA SISTEMULUI EDUCAЮIONAL
REFORMAREA SISTEMULUI EDUCAЮIONAL
 
17 ru informatica corlat
17 ru informatica corlat17 ru informatica corlat
17 ru informatica corlat
 
Evaluarea formativă
Evaluarea formativăEvaluarea formativă
Evaluarea formativă
 
Curs practic de_java
Curs practic de_javaCurs practic de_java
Curs practic de_java
 
Java script
Java scriptJava script
Java script
 

Ähnlich wie Cristian frasinaru curs-practic_de_java

Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_javaCristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_javaBujor Elena
 
Cristian frasinaru curs practic de java
Cristian frasinaru   curs practic de javaCristian frasinaru   curs practic de java
Cristian frasinaru curs practic de javaCorniciuc Oana
 
Curs ubuntu
Curs ubuntuCurs ubuntu
Curs ubuntucrys72f
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueQuickmobile
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue8qisfgvs
 
Manual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redManual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redQuickmobile
 
Programare RSS Atom şi Podcast - cuprins şi introducere
Programare RSS Atom şi Podcast - cuprins şi introducereProgramare RSS Atom şi Podcast - cuprins şi introducere
Programare RSS Atom şi Podcast - cuprins şi introducereTraian Anghel
 
Sabin Buraga -- "Semantic Web. Fundamente şi aplicaţii"
Sabin Buraga -- "Semantic Web. Fundamente şi aplicaţii"Sabin Buraga -- "Semantic Web. Fundamente şi aplicaţii"
Sabin Buraga -- "Semantic Web. Fundamente şi aplicaţii"Sabin Buraga
 
marketing strategic
marketing strategicmarketing strategic
marketing strategicaly4love
 
Manual programare-cnc-freza-mitica-vlad-fanuc
Manual programare-cnc-freza-mitica-vlad-fanucManual programare-cnc-freza-mitica-vlad-fanuc
Manual programare-cnc-freza-mitica-vlad-fanucMiticavlad Neamitica
 
Manual instructiuni-sony-ericsson-x8-black-e15i
Manual instructiuni-sony-ericsson-x8-black-e15iManual instructiuni-sony-ericsson-x8-black-e15i
Manual instructiuni-sony-ericsson-x8-black-e15iQuickmobile
 
Management de proiect editia ii v1
Management de proiect editia ii   v1Management de proiect editia ii   v1
Management de proiect editia ii v1Oxana Ghenciu
 
Manual utilizare se_w350i_ug_ro
Manual utilizare se_w350i_ug_roManual utilizare se_w350i_ug_ro
Manual utilizare se_w350i_ug_roQuickmobile
 
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-black
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-blackManual instructiuni-sony-ericsson-u8i-vivaz-pro-black
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-blackQuickmobile
 
Manual instructiuni-lg-gt400-viewty-white
Manual instructiuni-lg-gt400-viewty-whiteManual instructiuni-lg-gt400-viewty-white
Manual instructiuni-lg-gt400-viewty-whiteQuickmobile
 
120 analiza diagnostic ca cerinta a managementului modern www.lucrari-proie...
120 analiza diagnostic ca cerinta a managementului modern   www.lucrari-proie...120 analiza diagnostic ca cerinta a managementului modern   www.lucrari-proie...
120 analiza diagnostic ca cerinta a managementului modern www.lucrari-proie...Lucrari de licenta
 
Manual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violetManual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violetQuickmobile
 
Manual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violetManual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violetQuickmobile
 
Manual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violetManual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violetQuickmobile
 

Ähnlich wie Cristian frasinaru curs-practic_de_java (20)

Cristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_javaCristian frasinaru curs-practic_de_java
Cristian frasinaru curs-practic_de_java
 
Cristian frasinaru curs practic de java
Cristian frasinaru   curs practic de javaCristian frasinaru   curs practic de java
Cristian frasinaru curs practic de java
 
Curs ubuntu
Curs ubuntuCurs ubuntu
Curs ubuntu
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
 
Manual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redManual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-red
 
Programare RSS Atom şi Podcast - cuprins şi introducere
Programare RSS Atom şi Podcast - cuprins şi introducereProgramare RSS Atom şi Podcast - cuprins şi introducere
Programare RSS Atom şi Podcast - cuprins şi introducere
 
Sabin Buraga -- "Semantic Web. Fundamente şi aplicaţii"
Sabin Buraga -- "Semantic Web. Fundamente şi aplicaţii"Sabin Buraga -- "Semantic Web. Fundamente şi aplicaţii"
Sabin Buraga -- "Semantic Web. Fundamente şi aplicaţii"
 
marketing strategic
marketing strategicmarketing strategic
marketing strategic
 
Limajul c
Limajul cLimajul c
Limajul c
 
Manual programare-cnc-freza-mitica-vlad-fanuc
Manual programare-cnc-freza-mitica-vlad-fanucManual programare-cnc-freza-mitica-vlad-fanuc
Manual programare-cnc-freza-mitica-vlad-fanuc
 
Manual instructiuni-sony-ericsson-x8-black-e15i
Manual instructiuni-sony-ericsson-x8-black-e15iManual instructiuni-sony-ericsson-x8-black-e15i
Manual instructiuni-sony-ericsson-x8-black-e15i
 
Management de proiect editia ii v1
Management de proiect editia ii   v1Management de proiect editia ii   v1
Management de proiect editia ii v1
 
Manual utilizare se_w350i_ug_ro
Manual utilizare se_w350i_ug_roManual utilizare se_w350i_ug_ro
Manual utilizare se_w350i_ug_ro
 
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-black
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-blackManual instructiuni-sony-ericsson-u8i-vivaz-pro-black
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-black
 
Manual instructiuni-lg-gt400-viewty-white
Manual instructiuni-lg-gt400-viewty-whiteManual instructiuni-lg-gt400-viewty-white
Manual instructiuni-lg-gt400-viewty-white
 
120 analiza diagnostic ca cerinta a managementului modern www.lucrari-proie...
120 analiza diagnostic ca cerinta a managementului modern   www.lucrari-proie...120 analiza diagnostic ca cerinta a managementului modern   www.lucrari-proie...
120 analiza diagnostic ca cerinta a managementului modern www.lucrari-proie...
 
Manual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violetManual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violet
 
Manual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violetManual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violet
 
Manual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violetManual instructiuni-lg-km570-arena-2-violet
Manual instructiuni-lg-km570-arena-2-violet
 

Mehr von Serghei Urban

инт тех до_ пособие
инт тех до_ пособиеинт тех до_ пособие
инт тех до_ пособиеSerghei Urban
 
Boyicev o. zashiti_svoyi_kompyuter_n
Boyicev o. zashiti_svoyi_kompyuter_nBoyicev o. zashiti_svoyi_kompyuter_n
Boyicev o. zashiti_svoyi_kompyuter_nSerghei Urban
 
Revista 03.didactica pro
Revista 03.didactica proRevista 03.didactica pro
Revista 03.didactica proSerghei Urban
 
крис касперски компьютерные вирусы изнутри и снаружи [2006, rus]
крис касперски   компьютерные вирусы изнутри и снаружи [2006, rus]крис касперски   компьютерные вирусы изнутри и снаружи [2006, rus]
крис касперски компьютерные вирусы изнутри и снаружи [2006, rus]Serghei Urban
 
A basic english grammar exercises
A basic english grammar exercisesA basic english grammar exercises
A basic english grammar exercisesSerghei Urban
 
Boyicev o. zashiti_svoyi_kompyuter_n.a4
Boyicev o. zashiti_svoyi_kompyuter_n.a4Boyicev o. zashiti_svoyi_kompyuter_n.a4
Boyicev o. zashiti_svoyi_kompyuter_n.a4Serghei Urban
 
Modernizarea standardelor
Modernizarea standardelorModernizarea standardelor
Modernizarea standardelorSerghei Urban
 
Cinci probleme fundamentale
Cinci probleme fundamentaleCinci probleme fundamentale
Cinci probleme fundamentaleSerghei Urban
 
Evaluarea rezultatelor scolare revista 33 34
Evaluarea rezultatelor scolare revista 33 34Evaluarea rezultatelor scolare revista 33 34
Evaluarea rezultatelor scolare revista 33 34Serghei Urban
 
методичка по Word 40 стр.
методичка по Word 40 стр.методичка по Word 40 стр.
методичка по Word 40 стр.Serghei Urban
 
Educatie interculturala
Educatie interculturalaEducatie interculturala
Educatie interculturalaSerghei Urban
 
Tema 6 siruri seriidefunctii
Tema 6 siruri seriidefunctiiTema 6 siruri seriidefunctii
Tema 6 siruri seriidefunctiiSerghei Urban
 
Microsoft word 2000 справочник 181стр.
Microsoft word 2000 справочник 181стр.Microsoft word 2000 справочник 181стр.
Microsoft word 2000 справочник 181стр.Serghei Urban
 

Mehr von Serghei Urban (20)

инт тех до_ пособие
инт тех до_ пособиеинт тех до_ пособие
инт тех до_ пособие
 
Bobrovckii
BobrovckiiBobrovckii
Bobrovckii
 
Boyicev o. zashiti_svoyi_kompyuter_n
Boyicev o. zashiti_svoyi_kompyuter_nBoyicev o. zashiti_svoyi_kompyuter_n
Boyicev o. zashiti_svoyi_kompyuter_n
 
Revista 03.didactica pro
Revista 03.didactica proRevista 03.didactica pro
Revista 03.didactica pro
 
крис касперски компьютерные вирусы изнутри и снаружи [2006, rus]
крис касперски   компьютерные вирусы изнутри и снаружи [2006, rus]крис касперски   компьютерные вирусы изнутри и снаружи [2006, rus]
крис касперски компьютерные вирусы изнутри и снаружи [2006, rus]
 
Moodle!7
Moodle!7Moodle!7
Moodle!7
 
A basic english grammar exercises
A basic english grammar exercisesA basic english grammar exercises
A basic english grammar exercises
 
Boyicev o. zashiti_svoyi_kompyuter_n.a4
Boyicev o. zashiti_svoyi_kompyuter_n.a4Boyicev o. zashiti_svoyi_kompyuter_n.a4
Boyicev o. zashiti_svoyi_kompyuter_n.a4
 
Tice usb 1
Tice usb 1Tice usb 1
Tice usb 1
 
Modernizarea standardelor
Modernizarea standardelorModernizarea standardelor
Modernizarea standardelor
 
Cinci probleme fundamentale
Cinci probleme fundamentaleCinci probleme fundamentale
Cinci probleme fundamentale
 
книга с++
книга с++книга с++
книга с++
 
Evaluarea rezultatelor scolare revista 33 34
Evaluarea rezultatelor scolare revista 33 34Evaluarea rezultatelor scolare revista 33 34
Evaluarea rezultatelor scolare revista 33 34
 
Algoritmi
AlgoritmiAlgoritmi
Algoritmi
 
Metoda bulelor
Metoda bulelorMetoda bulelor
Metoda bulelor
 
Manual limbaj c
Manual limbaj cManual limbaj c
Manual limbaj c
 
методичка по Word 40 стр.
методичка по Word 40 стр.методичка по Word 40 стр.
методичка по Word 40 стр.
 
Educatie interculturala
Educatie interculturalaEducatie interculturala
Educatie interculturala
 
Tema 6 siruri seriidefunctii
Tema 6 siruri seriidefunctiiTema 6 siruri seriidefunctii
Tema 6 siruri seriidefunctii
 
Microsoft word 2000 справочник 181стр.
Microsoft word 2000 справочник 181стр.Microsoft word 2000 справочник 181стр.
Microsoft word 2000 справочник 181стр.
 

Cristian frasinaru curs-practic_de_java

  • 1. Curs practic de Java Cristian Fr˘sinaru a
  • 2. Cuprins 1 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. 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 . . . . . . . . . . . . . . . . . . . 34 2 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. 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 . . . . . . . . . . . . . . . . . . . . . 75 3 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 . . . . . . . . ¸ . . . . . . . . . . . . 92 4 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. 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 5 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 6 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. 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 . . . . . . . . ¸ . . . . . 159 7 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 . . . . . . . . . . . . . . . . . . 172 8 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 . . . . . . . . . . . . . . . . . . . . . . . . 196 9 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. 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 . . . . . . . . . . . . . . . . . . . . . . 265 10 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. 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 . . . . . . . . . . . 293 11 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. 8 CUPRINS 12 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 . . . . . . . . . . . 378 13 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 ¸ ¸ . . . . . . . . . . 397 14 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. CUPRINS 9 15 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 . . . . ¸ . . . . . . . . . . 443 16 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. 10 CUPRINS
  • 12. Capitolul 1 Introducere ˆ Java ın 1.1 Ce este Java ? Java este o tehnologie inovatoare lansat˘ de compania Sun Microsystems ˆ a ın 1995, care a avut un impact remarcabil asupra ˆ ıntregii comunit˘¸i a dez- at voltatorilor de software, impunˆndu-se prin calit˘¸i deosebite cum ar fi sim- a at plitate, 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 pe baza c˘ruia sunt construite o serie de platforme destinate implement˘rii de a a aplicatii pentru toate segmentele industriei software. ¸ 1.1.1 Limbajul de programare Java Inainte de a prezenta ˆ detaliu aspectele tehnice ale limbajului Java, s˘ am- ın a intim caracteristicile sale principale, care l-au transformat ˆ ıntr-un interval de timp 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. 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 s 1.1.2 Platforme de lucru Java Limbajul de programare Java a fost folosit la dezvoltarea unor tehnologii ded- icate rezolv˘rii unor probleme din cele mai diverse domenii. Aceste tehnologii a au fost grupate ˆ a¸a numitele platforme de lucru, ce reprezint˘ seturi de ın s a libr˘rii scrise ˆ limbajul Java, precum ¸i diverse programe utilitare, folosite a ın s pentru dezvoltarea de aplicatii sau componente destinate unei anume cate- ¸ gorii de utilizatori.
  • 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 a Internet 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 s In 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. 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 s de 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 a tat de o succesiune de instructiuni specifice unui anumit procesor ¸i unei an- ¸ s umite platforme de lucru reprezentate ˆ format binar astfel ˆ at s˘ poat˘ ın ıncˆ a a fi 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 s de lucru. In timp ce codul ma¸in˘ este executat direct de c˘tre procesor ¸i s a a s poate 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 a care 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 a anumit calculator, pe acesta trebuie s˘ fie instalat˘ o ma¸in˘ virtual˘ Java. a a s a a Acest lucru este realizat automat de c˘tre distributia J2SDK. a ¸ 1.2 Primul program Crearea oric˘rei aplicatii Java presupune efectuarea urm˘torilor pa¸i: a ¸ a s 1. Scriererea codului surs˘ a class FirstApp { public static void main( String args[]) { System.out.println("Hello world!"); } }
  • 16. 1.2. PRIMUL PROGRAM 15 Toate aplicatiile Java contin o clas˘ principal˘(primar˘) ˆ care trebuie ¸ ¸ a a a ın s˘ se gaseasc˘ metoda main. Clasele aplicatiei se pot gasi fie ˆ a a ¸ ıntr-un singur fi¸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 a sie nefiind acceptat˘. Este recomandat ca fi¸ierul care contine codul surs˘ a s ¸ a al clasei primare s˘ aib˘ acela¸i nume cu cel al clasei, de¸i acest lucru nu a a s s este obligatoriu. S˘ presupunem c˘ am salvat exemplul de mai sus ˆ fi¸ierul a a ın s C: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 ¸ a aplicatiei sau pentru orice fi¸ier/fi¸iere cu extensia java. Compilatorul creeaz˘ ¸ s s a cˆ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.java In 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 a intrare 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 s astfel: java FirstApp Rularea unei aplicatii care nu folose¸te interfat˘ grafic˘, se va face ˆ ¸ s ¸a a ıntr-o fereastr˘ sistem. a
  • 17. 16 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN Atentie ¸ Un apel de genul java c:introFirstApp.class este gre¸it! s 1.3 Structura lexical˘ a limbajului Java a 1.3.1 Setul de caractere Limbajului Java lucreaz˘ ˆ mod nativ folosind setul de caractere Unicode. a ın Acesta este un standard international care ˆ ¸ ınlocuie¸te vechiul set de caractere s ASCII ¸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 a era posibil˘ reprezentarea a doar 256 de caractere. Primele 256 caractere a Unicode corespund celor ASCII, referirea la celelalte f˘cˆndu-se prin uxxxx, a a unde xxxx reprezint˘ codul caracterului. a O alt˘ caracteristic˘ a setului de caractere Unicode este faptul c˘ ˆ a a a ıntreg intervalul de reprezentare a simbolurilor este divizat ˆ subintervale numite ın blocuri, cˆteva exemple de blocuri fiind: Basic Latin, Greek, Arabic, Gothic, a Currency, 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 cheie Cuvintele rezervate ˆ Java sunt, cu cˆteva exceptii, cele din C++ ¸i au fost ın a ¸ s enumerate ˆ tabelul de mai jos. Acestea nu pot fi folosite ca nume de clase, ın
  • 18. ˘ 1.3. STRUCTURA LEXICALA A LIMBAJULUI JAVA 17 interfete, 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 a 1.3.3 Identificatori Sunt secvente nelimitate de litere ¸i cifre Unicode, ˆ ¸ s ıncepˆnd cu o liter˘. Dup˘ a a a cum am mai spus, identificatorii nu au voie s˘ fie identici cu cuvintele rezer- a vate. 1.3.4 Literali Literalii 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. 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. ˘ 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 ın 1.3.5 Separatori Un 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 a 1.3.6 Operatori Operatorii 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. 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 conversion 1.3.7 Comentarii In 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. 1.4. TIPURI DE DATE SI VARIABILE ¸ 21 1.4 Tipuri de date ¸i variabile s 1.4.1 Tipuri de date In Java tipurile de date se impart ˆ dou˘ categorii: tipuri primitive ¸i ın a s tipuri referint˘. Java porne¸te de la premiza c˘ ”orice este un obiect”, ¸a s a prin urmare tipurile de date ar trebui s˘ fie de fapt definite de clase ¸i toate a s variabilele 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˘ ¸ a exist˘ ¸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) s In alte limbaje de programare formatul ¸i dimensiunea tipurilor primitive de s date pot depinde de platforma pe care ruleaz˘ programul. In Java acest lucru a nu mai este valabil, orice dependent˘ de o anumit˘ platform˘ specific˘ fiind ¸a a a a eliminat˘. a Vectorii, clasele ¸i interfetele sunt tipuri referint˘. Valoarea unei variabile s ¸ ¸a de acest tip este, spre deosebire de tipurile primitive, o referint˘ (adres˘ de ¸a a memorie) c˘tre valoarea sau multimea de valori reprezentat˘ de variabila a ¸ a respectiv˘. a Exist˘ trei tipuri de date din limbajul C care nu sunt suportate de lim- a bajul Java. Acestea sunt: pointer, struct ¸i union. Pointerii au fost s eliminati din cauz˘ c˘ erau o surs˘ constant˘ de erori, locul lor fiind luat de ¸ a a a a tipul referint˘, iar struct ¸i union nu ˆsi mai au rostul atˆt timp cˆt tipurile ¸a s ı¸ a a compuse de date sunt formate ˆ Java prin intermediul claselor. ın
  • 23. 22 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN 1.4.2 Variabile Variabilele pot fi de tip primitiv sau referinte la obiecte (tip referint˘). In- ¸ ¸a diferent de tipul lor, pentru a putea fi folosite variabilele trebuie declarate ¸i, s eventual, 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 a criterii: • 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 a categorii: 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. 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. 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 a din 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-else if (expresie-logica) { ... } if (expresie-logica) { ... } else { ... } switch-case switch (variabila) { case valoare1: ... break; case valoare2:
  • 26. 1.5. CONTROLUL EXECUTIEI ¸ 25 ... break; ... default: ... } Variabilele care pot fi testate folosind instructiunea switch nu pot fi decˆt ¸ a de tipuri primitive. 1.5.2 Instructiuni de salt ¸ for for(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 while while (expresie-logica) { ... } do-while do { ... } while (expresie-logica);
  • 27. 26 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN 1.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 ın de genul: break numeEticheata sau continue numeEticheta, utile pentru a controla punctul de ie¸ire dintr-o structur˘ repetitiv˘, ca ˆ s a a ınexemplul de mai 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 Vectori 1.6.1 Crearea unui vector Crearea unui vector presupune realizarea urm˘toarelor etape: a
  • 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. 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 genul mente vor fi cuprinse ˆ s ¸ Tip numeVector[nrElemente], alocarea memoriei f˘cˆndu-se doar prin in- a a termediul opearatorului new. int v[10]; //ilegal int v[] = new int[10]; //corect 1.6.2 Tablouri multidimensionale In Java tablourile multidimensionale sunt de fapt vectori de vectori. De exemplu, 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 a elemente iar matrice[i][j] este elementul de pe linia i ¸i coloana j. s 1.6.3 Dimensiunea unui vector Cu ajutorul variabilei length se poate afla num˘rul de elemente al unui a vector. int []a = new int[5]; // a.length are valoarea 5 int m[][] = new int[5][10]; // m[0].length are valoarea 10 Pentru a ˆ ¸elege modalitatea de folosire a lui length trebuie mentionat c˘ ınt ¸ a fiecare vector este de fapt o instant˘ a unei clase iar length este o variabil˘ ¸a a public˘ a acelei clase, ˆ care este retinut num˘rul maxim de elemente al a ın ¸ a vectorului.
  • 30. 1.6. VECTORI 29 1.6.4 Copierea vectorilor Copierea elementelor unui vector a ˆıntr-un alt vector b se poate face, fie element cu element, fie cu ajutorul metodei System.arraycopy, ca ˆ exem- ın plele de mai jos. Dup˘ cum vom vedea, o atribuire de genul b = a are alt˘ a a semnificatie decˆt copierea elementelor lui a ˆ b ¸i nu poate fi folosit˘ ˆ ¸ a ın s a ın acest scop. int a[] = {1, 2, 3, 4}; int b[] = new int[4]; // Varianta 1 for(int i=0; i<a.length; i++) b[i] = a[i]; // Varianta 2 System.arraycopy(a, 0, b, 0, a.length); // Nu are efectul dorit b = a; 1.6.5 Sortarea vectorilor - clasa Arrays In Java s-a pus un accent deosebit pe implementarea unor structuri de date ¸i algoritmi care s˘ simplifice proceseul de crearea a unui algoritm, program- s a atorul trebuind s˘ se concentreze pe aspectele specifice problemei abordate. a Clasa java.util.Arrays ofer˘ diverse metode foarte utile ˆ lucrul cu vec- a ın tori 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. 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 a 1.6.6 Vectori cu dimensiune variabil˘ ¸i eterogeni as Implement˘ri ale vectorilor cu num˘r variabil de elemente sunt oferite de a a clase 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 s din elemente de tip char, un obiect de tip String sau un obiect de tip StringBuffer. Dac˘ un ¸ir de caractere este constant (nu se 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 aceste clase este c˘ StringBuffer pune la dispozitie metode pentru modificarea a ¸ continutului ¸irului, cum ar fi: append, insert, delete, reverse. ¸ s Uzual, cea mai folosit˘ modalitate de a lucra cu ¸iruri este prin intermediul a s clasei String, care are ¸i unele particularit˘¸i fat˘ de restul claselor menite s˘ s at ¸a a simplifice cˆt mai mult folosirea ¸irurilor de caractere. Clasa StringBuffer a s va fi utilizat˘ predominant ˆ aplicatii dedicate proces˘rii textelor cum ar fi a ın ¸ a editoarele 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 a fata de restul claselor Java referitoare la instantierea obiectelor sale. ¸ ¸
  • 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 a permite concatenarea ¸irurilor cu obiecte de orice tip care au o reprezentare s de 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 adunare iar al doilea +, cel de concatenare a ¸irurilor. s 1.8 Folosirea argumentelor de la linia de co- mand˘ a 1.8.1 Transmiterea argumentelor O aplicatie Java poate primi oricˆte argumente de la linia de comanda ˆ ¸ a ın momentul lans˘rii ei. Aceste argumente sunt utile pentru a permite utiliza- a torului s˘ specifice diverse optiuni legate de functionarea aplicatiei sau s˘ a ¸ ¸ ¸ a furnizeze anumite date initiale programului. ¸ Atentie ¸ Programele care folosesc argumente de la linia de comand˘ nu sunt 100% a pure Java, deoarece unele sisteme de operare, cum ar fi Mac OS, nu au ˆ ın mod normal linie de comand˘.a
  • 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 ¸ a unui 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 ¸ a astfel: java Sortare persoane.txt A¸adar, formatul general pentru lansarea unei aplicatii care prime¸te argu- s ¸ s mente 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 ¸ ¸ ıntre ghilimele. Evident, o aplicatie poate s˘ nu primeasc˘ nici un argument sau ¸ a a poate s˘ ignore argumentele primite de la linia de comand˘. a a 1.8.2 Primirea argumentelor In momentul lans˘rii unei aplicatii interpretorul parcurge linia de comand˘ cu a ¸ a care a fost lansat˘ aplicattia ¸i, ˆ cazul ˆ care exist˘, transmite programului a ¸ s ın ın a argumentele specificate sub forma unui vector de ¸iruri. Acesta este primit s de aplicatie ca parametru al metodei main. Reamintim c˘ formatul metodei ¸ a main 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˘. a In 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 a gumentelor primite de la linia de comand˘. A¸adar, pentru a afla num˘rul de a s a argumente primite de program este suficient s˘ afl˘m dimensiunea vectorului a a args prin intermediul atributului length:
  • 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 a de la linia de comand˘ necesare pentru functionarea sa ¸i, ˆ caz contrar, s˘ a ¸ s ın a afi¸eze un mesaj de avertizare sau s˘ foloseasc˘ ni¸te valori implicite, ca ˆ s a a s ın exemplul 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 s pe ecran a argumentelor primite de la linia de comand˘: a public class Afisare { public static void main (String[] args) { for (int i = 0; i < args.length; i++) System.out.println(args[i]);
  • 35. 34 CAPITOLUL 1. INTRODUCERE ˆ JAVA IN } } Un apel de genul java Afisare Hello Java va produce urm˘torul rezul- a tat (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 Java 1.8.3 Argumente numerice Argumentele 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 a valori numerice ele vor trebui convertite din ¸iruri ˆ numere. Acest lucru s ın se realizeaz˘ cu metode de tipul parseTipNumeric aflate ˆ clasa corespun- a ın zatoare tipului ˆ care vrem s˘ facem conversia: Integer, Float, Double, ın a etc. S˘ consider˘m, de exemplu, c˘ aplicatia Power ridic˘ un numar real la o a a a ¸ a putere ˆıntreag˘, argumentele fiind trimise de la linia de comand˘ sub forma: a a java Power "1.5" "2" //ridica 1.5 la puterea 2 Conversia celor dou˘ argumente ˆ numere se va face astfel: a ın public 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 a un numar de tipul respectiv. Tratarea acestor exceptii este prezentat˘ ˆ ¸ a ın capitolul ”Exceptii”. ¸
  • 36. Capitolul 2 Obiecte ¸i clase s 2.1 Ciclul de viat˘ al unui obiect ¸a 2.1.1 Crearea obiectelor In Java, ca ˆ orice limbaj de programare orientat-obiect, crearea obiectelor ın se realizeaz˘ prin instantierea unei clase ¸i implic˘ urm˘toarele lucruri: a ¸ s a a • Declararea Presupune specificarea tipului acelui obiect, cu alte cuvinte specificarea clasei acestuia (vom vedea c˘ tipul unui obiect poate fi ¸i o interfat˘). a s ¸a NumeClasa numeObiect; • Instantierea ¸ Se realizeaz˘ prin intermediul operatorului new ¸i are ca efect crearea a s efectiv˘ a obiectului cu alocarea spatiului de memorie corespunz˘tor. a ¸ a numeObiect = new NumeClasa(); • Initializarea ¸ Se realizeaz˘ prin intermediul constructorilor clasei respective. Initializarea a ¸ este de fapt parte integrant˘ a procesului de instantiere, ˆ sensul c˘ a ¸ ın a imediat dup˘ alocarea memoriei ca efect al operatorului new este apelat a constructorul specificat. Parantezele rotunde de dup˘ numele clasei in- a dic˘ faptul c˘ acolo este de fapt un apel la unul din constructorii clasei a a ¸i nu simpla specificare a numelui clasei. s Mai general, instantierea ¸i initializarea apar sub forma: ¸ s ¸ 35