Indice

Introduzione XXIX
PARTE I
1 Storia ed evoluzione di Java 1
1.1 Le origini di J ava 1
La nascita della programmazione moderna: C 2
C++: il passo successivo 3
La scena è pronta per J ava 4
1.2 La creazione di J ava 5
La connessione con C# 7
1.3 In che modo J ava ha cambiato Internet 7
Applet J ava 7
Sicurezza 8
Portabilità 8
1.4 La magia di J ava: il bytecode 8
1.5 Servlet: J ava lato server 9
1.6 Le parole chiave di J ava 10
Semplice 10
A oggetti 10
Robusto 11
Multithread 11
Neutro rispetto all’architettura 12
Interpretato e ad alte prestazioni 12
LibroJava.indb V 2/1/2012 11:59:14 AM
VI Indice
Distribuito 12
Dinamico 12
1.7 L’evoluzione di J ava 12
J ava SE 7 14
Una cultura di innovazione 16
2 Panoramica su Java 17
2.1 Programmazione a oggetti 17
Due paradigmi 17
Astrazione 18
I tre principi della OOP 19
Incapsulamento 19
Ereditarietà 20
Polimorfismo 21
Polimorfismo, incapsulamento ed ereditarietà lavorano insieme 23
2.2 Un primo semplice programma 24
Dentro il programma 24
Compilazione del programma 25
Il primo programma di esempio in dettaglio 25
2.3 Un secondo breve programma 28
2.4 Due dichiarazioni di controllo 29
La dichiarazione if 30
Il ciclo for 31
2.5 Utilizzo dei blocchi di codice 32
2.6 Questioni lessicali 34
Spazi 34
Identificatori 34
Letterali 34
Commenti 35
Separatori 35
Le parole chiave di J ava 35
2.7 Le librerie di classi di J ava 36
3 Tipi di dati, variabili e array 37
3.1 J ava è un linguaggio rigorosamente tipizzato 37
3.2 Tipi primitivi 37
3.3 Interi 38
byte 39
short 39
int 39
long 39
3.4 Tipi a virgola mobile 40
float 41
double 41
3.5 Caratteri 41
3.6 Booleani 43
LibroJava.indb VI 2/1/2012 11:59:14 AM
Indice VII
3.7 I letterali in dettaglio 44
Letterali interi 44
Letterali a virgola mobile 45
Letterali booleani 46
Letterali carattere 46
Letterali stringa 47
3.8 Variabili 48
Dichiarazione di una variabile 48
Inizializzazione dinamica 48
Ambito e durata delle variabili 49
3.9 Conversione di tipi e casting 52
Conversioni automatiche di J ava 52
Casting di tipi incompatibili 52
3.10 Promozione automatica dei tipi nelle espressioni 54
Le regole per la promozione di tipi 54
3.11 Array 55
Array a una dimensione 56
Array a più dimensioni 58
Sintassi alternativa per la dichiarazione di array 63
3.12 Stringhe 64
3.13 Nota per i programmatori C/C++sui puntatori 64
4 Operatori 65
4.1 Operatori aritmetici 65
Operatori aritmetici di base 65
L’operatore modulo 67
Operatori di assegnazione e aritmetici composti 67
Incremento e decremento 69
4.2 Operatori a livello di bit 70
Operatori logici a livello di bit 72
NOT a livello di bit 72
AND a livello di bit 72
OR a livello di bit 72
XOR a livello di bit 73
Utilizzo degli operatori logici a livello di bit 73
Spostamento a sinistra 74
Spostamento a destra 76
Spostamento a destra senza segno 77
Assegnazioni composte con operatori a livello di bit 79
4.3 Operatori relazionali 80
4.4 Operatori logici booleani 81
Operatori logici di corto circuito 82
4.5 L’operatore di assegnazione 83
4.6 L’operatore ? 84
4.7 Priorità degli operatori 85
4.8 Utilizzo delle parentesi 85
LibroJava.indb VII 2/1/2012 11:59:14 AM
VIII Indice
5 Dichiarazioni di controllo 87
5.1 Le dichiarazioni di selezione di J ava 87
if 87
if annidati 89
La scala if-else-if 89
switch 91
Dichiarazioni switch annidate 95
5.2 Dichiarazioni di iterazione 96
while 96
do-while 98
for 101
Dichiarazione di variabili di controllo di ciclo nel ciclo for 101
Utilizzo della virgola 103
Alcune varianti del ciclo for 104
La versione for-each del ciclo for 105
Scorrimento in array a più dimensioni 108
Applicazione di for migliorato 110
Cicli annidati 110
5.3 Dichiarazioni di salto 111
Utilizzo di break 111
Utilizzo di break per uscire da un ciclo 112
Utilizzo di break come forma di goto 113
Utilizzo di continue 116
return 117
6 Introduzione alle classi 119
6.1 Basi sulle classi 119
La forma generale di una classe 120
Una semplice classe 121
6.2 Dichiarazione di oggetti 124
new in dettaglio 125
6.3 Assegnazione di variabili di riferimento a oggetti 126
6.4 Introduzione ai metodi 127
Aggiunta di un metodo alla classe Box 127
Restituzione di un valore 129
Aggiunta di un metodo che accetta parametri 131
6.5 Costruttori 133
Costruttori parametrizzati 135
6.6 La parola chiave this 137
Nascondere variabili di istanza 137
6.7 Garbage collection 138
6.8 Il metodo finalize() 138
6.9 Una classe di stack 139
7 Metodi e classi in dettaglio 143
7.1 Sovraccarico di metodi 143
Sovraccarico di costruttori 147
LibroJava.indb VIII 2/1/2012 11:59:14 AM
Indice IX
7.2 Utilizzo di oggetti come parametri 149
7.3 Il passaggio di argomenti in dettaglio 151
7.4 Restituzione di oggetti 154
7.5 Ricorsione 155
7.6 Introduzione al controllo di accesso 157
7.7 La parola chiave static 161
7.8 La parola chiave final 163
7.9 Rivisitazione degli array 163
7.10 Introduzione a classi annidate e interne 165
7.11 La classe String 168
7.12 Utilizzo degli argomenti della riga di comando 171
7.13 Vararg: argomenti a lunghezza variabile 172
Sovraccarico di metodi vararg 175
Vararg e ambiguità 177
8 Ereditarietà 179
8.1 Fondamenti sull’ereditarietà 179
Accesso di membri ed ereditarietà 181
Un esempio più pratico 182
8.2 Utilizzo di super 185
Utilizzo di super per chiamare i costruttori della superclasse 186
Un secondo utilizzo di super 189
8.3 Creazione di una gerarchia a più livelli 190
8.4 Quando si chiamano i costruttori 194
8.5 Sovrapposizione di metodi 195
8.6 Esecuzione dinamica dei metodi 198
Perché sovrapporre metodi 200
Applicazione della sovrapposizione di metodi 200
8.7 Utilizzo di classi astratte 202
8.8 Utilizzo di final con l’ereditarietà 205
Utilizzo di final per impedire la sovrapposizione 205
Utilizzo di final per impedire l’ereditarietà 206
8.9 La classe Object 206
9 Package e interfacce 209
9.1 Package 209
Definizione di un package 210
Ricerca di package e CLASSPATH 211
Un breve esempio di package 211
9.2 Protezione dell’accesso 213
Un esempio di accesso 214
9.3 Importazione di package 217
9.4 Interfacce 219
Definizione di un’interfaccia 220
Implementazione di interfacce 221
Accedere alle implementazioni mediante riferimenti a interfacce 222
Implementazioni parziali 223
LibroJava.indb IX 2/1/2012 11:59:14 AM
X Indice
Interfacce annidate 224
Applicazione di interfacce 225
Variabili nelle interfacce 228
È possibile estendere le interfacce 230
10 Gestione delle eccezioni 233
10.1 Basi sulla gestione di eccezioni 233
10.2 Tipi di eccezioni 234
10.3 Eccezioni non intercettate 235
10.4 Utilizzo di try e catch 236
Visualizzazione della descrizione di un’eccezione 238
10.5 Clausole catch multiple 239
10.6 Dichiarazioni try annidate 240
10.7 Throw 243
10.8 Throws 244
10.9 Finally 245
10.10 Le eccezioni incorporate di J ava 247
10.11 Creazione di sottoclassi di eccezioni 249
10.12 Eccezioni concatenate 251
10.13 Tre nuove funzioni per le eccezioni di J DK 7 253
10.14 Utilizzo delle eccezioni 254
11 Programmazione multithread 255
11.1 Il modello di thread di J ava 256
Priorità dei thread 257
Sincronizzazione 258
Messaggi 259
La classe Thread e l’interfaccia Runnable 259
11.2 Il thread principale 259
11.3 Creazione di un thread 262
Implementazione di Runnable 262
Estensione di Thread 264
Scelta di un approccio 265
11.4 Creazione di più thread 266
11.5 Utilizzo di isAlive() e join() 267
11.6 Priorità dei thread 270
11.7 Sincronizzazione 271
Utilizzo di metodi sincronizzati 271
La dichiarazione synchronized 273
11.8 Comunicazione tra thread 275
Blocco 280
11.9 Sospensione, ripresa e arresto di thread 282
Sospendere, riprendere e arrestare thread
nel modo moderno 285
11.10 Lo stato di un thread 287
11.11 Utilizzo del multithreading 289
LibroJava.indb X 2/1/2012 11:59:14 AM
Indice XI
12 Enumerazioni, autoboxing e annotazioni (metadati) 291
12.1 Enumerazioni 291
Basi sulle enumerazioni 292
I metodi values() e valueOf() 294
Le enumerazioni J ava sono tipi classi 296
Le enumerazioni ereditano enum 298
Un altro esempio di enumerazione 300
12.2 Wrapper di tipo 301
Character 302
Boolean 302
Wrapper per i tipi numerici 303
12.3 Autoboxing 304
Autoboxing e metodi 305
Autoboxing e unboxing si verificano nelle espressioni 306
Autoboxing e unboxing di valori Boolean
e Character 308
Precauzioni 309
12.4 Annotazioni (metadati) 310
Fondamenti sulle annotazioni 310
Specifica di una politica di ritenzione 311
Ottenimento delle annotazioni durante l’esecuzione mediante
la riflessione 312
Un secondo esempio di riflessione 315
Ottenimento di tutte le annotazioni 316
L’interfaccia AnnotatedElement 318
Utilizzo di valori predefiniti 318
Annotazioni marker 320
Annotazioni con membro singolo 321
Le annotazioni incorporate 322
@Retention 322
@Documented 322
@Target 323
@Inherited 323
@Override 323
@Deprecated 324
@SafeVarargs 324
@SuppressWarnings 324
Alcune limitazioni 324
13 I/O, applet e altro 325
13.1 Fondamenti su I/O 325
Flussi 326
Flussi di byte e flussi di caratteri 326
Le classi di flussi di byte 326
Le classi di flussi di caratteri 328
I flussi predefiniti 328
13.2 Lettura dell’input da console 329
Lettura di caratteri 330
LibroJava.indb XI 2/1/2012 11:59:15 AM
XII Indice
Lettura di stringhe 331
13.3 Scrittura nell’output di console 332
13.4 La classe PrintWriter 333
13.5 Lettura e scrittura di file 334
13.6 Chiusura automatica di un file 341
13.7 Basi sulle applet 345
13.8 I modificatori transient e volatile 348
13.9 Utilizzo di instanceof 349
13.10 strictfp 351
13.11 Metodi nativi 352
13.12 Problemi con i metodi nativi 356
13.13 Utilizzo di assert 356
Opzioni per attivazione e disattivazione di asserzioni 359
13.14 Importazione statica 359
13.15 Chiamata di costruttori sovraccaricati con this() 362
14 Generic 367
14.1 Cosa sono i generic 368
14.2 Un semplice esempio di generic 368
I generic funzionano solo con gli oggetti 372
I tipi generic differiscono in base agli argomenti di tipo 373
In che modo i generic migliorano la sicurezza di tipo 373
14.3 Una classe generic con due parametri di tipo 375
14.4 La forma generale di una classe generic 377
14.5 Tipi limitati 377
14.6 Utilizzo di argomenti jolly 380
J olly limitati 383
14.7 Creazione di un metodo generic 389
Costruttori generic 391
14.8 Interfacce generic 392
14.9 Tipi raw e codice legacy 394
14.10 Gerarchie di classi generic 397
Utilizzo di una superclasse generic 397
Confronti di tipo durante il runtime in una gerarchia generic 401
Casting 403
Ridefinizione di metodi in una classe generic 404
14.11 Inferenza di tipo con i generic 405
14.12 Erasure 407
Metodi bridge 409
14.13 Errori di ambiguità 411
14.14 Alcune limitazioni dei generic 412
Non è possibile istanzare i parametri di tipo 412
Limitazioni sui membri statici 413
Limitazioni sugli array generic 413
Limitazioni per le eccezioni generic 414
LibroJava.indb XII 2/1/2012 11:59:15 AM
Indice XIII
PARTE II
15 Gestione delle stringhe 415
15.1 I costruttori di String 416
15.2 Lunghezza di una stringa 418
15.3 Operazioni speciali sulle stringhe 419
Letterali stringa 419
Concatenamento di stringhe 419
Concatenamento di stringhe con altri tipi di dati 420
Conversione di stringhe e toString() 421
15.4 Estrazione di caratteri 422
charAt() 422
getChars() 423
getBytes() 423
toCharArray() 423
15.5 Confronto di stringhe 424
equals() e equalsIgnoreCase() 424
regionMatches() 425
startsWith() e endsWith() 425
equals() e ==a confronto 426
compareTo() 426
15.6 Ricerca nelle stringhe 428
15.7 Modifica di una stringa 430
substring() 430
concat() 431
replace() 431
trim() 432
15.8 Conversione di dati con valueOf() 433
15.9 Trasformazione da maiuscole a minuscole 433
15.10 Altri metodi di String 434
15.11 StringBuffer 434
Costruttori di StringBuffer 436
length() e capacity() 436
ensureCapacity() 437
setLength() 437
charAt() e setCharAt() 438
getChars() 438
append() 439
insert() 439
reverse() 440
delete() e deleteCharAt() 440
replace() 441
substring() 442
Altri metodi di StringBuffer 442
15.12 StringBuilder 443
LibroJava.indb XIII 2/1/2012 11:59:15 AM
XIV Indice
16 java.lang 445
16.1 Wrapper di tipi primitivi 446
Number 446
Double e Float 447
isInfinite() e isNaN() 451
Byte, Short, Integer e Long 451
Conversione dei numeri in stringhe e viceversa 459
Character 461
Aggiunte a Character per il supporto dei punti di codice Unicode 464
Boolean 466
16.2 Void 467
16.3 Process 467
16.4 Runtime 468
Gestione della memoria 469
16.5 ProcessBuilder 472
16.6 System 475
Utilizzo di currentTimeMillis() per cronometrare l’esecuzione
dei programmi 476
Utilizzo di arraycopy() 477
Proprietà ambientali 478
16.7 Object 479
16.8 Utilizzo di clone() e dell’interfaccia Cloneable 479
16.9 Class 482
16.10 ClassLoader 485
16.11 Math 485
Funzioni trigonometriche 485
Funzioni esponenziali 486
Funzioni di arrotondamento 487
Metodi matematici diversi 488
16.12 StrictMath 490
16.13 Compiler 490
16.14 Thread, ThreadGroup e Runnable 490
L’intefaccia Runnable 490
Thread 490
ThreadGroup 493
16.15 ThreadLocal e InheritableThreadLocal 498
16.16 Package 498
16.17 RuntimePermission 500
16.18 Throwable 500
16.19 SecurityManager 500
16.20 StackTraceElement 500
16.21 Enum 501
16.22 ClassValue 502
16.23 L’interfaccia CharSequence 502
16.24 L’interfaccia Comparable 503
16.25 L’interfaccia Appendable 503
16.26 L’interfaccia Iterable 504
16.27 L’interfaccia Readable 504
LibroJava.indb XIV 2/1/2012 11:59:15 AM
Indice XV
16.28 L’interfaccia AutoCloseable 504
16.29 L’interfaccia Thread.UncaughtExceptionHandler 505
16.30 I subpackage java.lang 505
java.lang.annotation 505
java.lang.instrument 505
java.lang.invoke 506
java.lang.management 506
java.lang.ref 506
java.lang.reflect 506
17 java.util ● Parte 1: il Collections Framework 507
17.1 Panoramica sulle collection 508
17.2 J DK 5 ha cambiato il Collections Framework 509
I generic hanno modificato profondamente
il Collections Framework 510
L’autoboxing facilita l’utilizzo dei tipi primitivi 510
Il ciclo for in stile for-each 510
17.3 Le interfacce di collection 511
L’interfaccia Collection 511
L’interfaccia List 514
L’interfaccia Set 515
L’interfaccia SortedSet 516
L’interfaccia NavigableSet 516
L’interfaccia Queue 518
L’interfaccia Deque 519
17.4 Le classi di collection 521
La classe ArrayList 522
Ottenere un array da un ArrayList 525
La classe LinkedList 526
La classe HashSet 528
La classe LinkedHashSet 529
La classe TreeSet 530
La classe ArrayDeque 532
La classe EnumSet 533
17.5 Accesso a una collection mediante un iteratore 535
Utilizzo di un iteratore 536
L’alternativa for-each agli iteratori 538
17.6 Memorizzazione di classi definite dall’utente in collection 539
17.7 L’interfaccia RandomAccess 541
17.8 Lavoro con le mappe 541
Le interfacce per le mappe 541
L’interfaccia Map 541
L’interfaccia SortedMap 543
L’interfaccia NavigableMap 544
L’interfaccia Map.Entry 546
Le classi per le mappe 547
La classe HashMap 547
LibroJava.indb XV 2/1/2012 11:59:15 AM
XVI Indice
La classe TreeMap 549
La classe LinkedHashMap 551
La classe IdentityHashMap 552
La classe EnumMap 552
17.9 Comparatori 552
Utilizzo di un comparatore 553
17.10 Gli algoritmi delle collection 556
17.11 Arrays 562
17.12 Perché le collection generic 567
17.13 Le classi e le interfacce legacy 571
L’interfaccia Enumeration 571
Vector 572
Stack 576
Dictionary 578
Hashtable 579
Properties 583
Utilizzo di store() e load() 587
17.14 Riflessioni sulle collection 588
18 java.util ● Parte 2: altre classi utili 589
18.1 StringTokenizer 589
18.2 BitSet 591
18.3 Date 594
18.4 Calendar 596
18.5 GregorianCalendar 600
18.6 TimeZone 601
18.7 SimpleTimeZone 602
18.8 Locale 603
18.9 Random 605
18.10 Observable 607
L’interfaccia Observer 608
Un esempio di Observer 608
18.11 Timer e TimerTask 611
18.12 Currency 614
18.13 Formatter 615
I costruttori di Formatter 615
I metodi di Formatter 616
Basi sulla formattazione 616
Formattazione di stringhe e caratteri 619
Formattazione di numeri 619
Formattazione di data e ora 620
Gli specificatori %n e %% 622
Specifica di una larghezza di campo minima 623
Specifica della precisione 624
Utilizzo dei flag di formato 626
Giustificazione dell’output 626
I flag spazio, +, 0 e ( 627
00_java_sommario.indd XVI 2/9/2012 2:58:27 PM
Indice XVII
Il flag virgola 628
Il flag # 628
L’opzione maiuscola 628
Utilizzo di un indice di argomento 629
Chiusura di un Formatter 631
La connessione printf() di J ava 632
18.14 Scanner 632
I costruttori di Scanner 632
Fondamenti sulla scansione 633
Alcuni esempi di Scanner 637
Impostazione dei delimitatori 641
Altre funzioni di Scanner 643
18.15 Le classi ResourceBundle, ListResourceBundle e
PropertyResourceBundle 644
18.16 Classi e interfacce diverse 649
18.17 I sottopackage di java.util 650
java.util.concurrent, java.util.concurrent.atomic
e java.util.concurrent.locks 650
java.util.jar 650
java.util.logging 650
java.util.prefs 650
java.util.regex 650
java.util.spi 650
java.util.zip 650
19 Input/Output: java.io 651
19.1 Classi e interfacce di I/O 652
19.2 File 652
Directory 656
Utilizzo di FilenameFilter 657
L’alternativa listFiles() 658
Creazione di directory 658
19.3 Le interfacce AutoCloseable, Closeable e Flushable 659
19.4 Eccezioni di I/O 659
19.5 Due modi per chiudere un flusso 660
19.6 Le classi Stream 661
19.7 I flussi di byte 662
InputStream 662
OutputStream 662
FileOutputStream 666
ByteArrayInputStream 668
ByteArrayOutputStream 670
Flussi di byte memorizzati nel buffer 672
BufferedInputStream 672
BufferedOutputStream 674
PushbackInputStream 674
SequenceInputStream 676
LibroJava.indb XVII 2/1/2012 11:59:15 AM
XVIII Indice
PrintStream 678
DataOutputStream e DataInputStream 681
RandomAccessFile 683
19.8 I flussi di caratteri 684
Reader 684
Writer 684
FileReader 686
FileWriter 686
CharArrayReader 688
CharArrayWriter 689
BufferedReader 690
BufferedWriter 692
PushbackReader 692
PrintWriter 694
19.9 La classe Console 695
19.10 Serializzazione 697
Serializable 697
Externalizable 698
ObjectOutput 698
ObjectOutputStream 699
ObjectInput 700
ObjectInputStream 700
Un esempio di serializzazione 701
19.11 Vantaggi dei flussi 703
20 NIO 705
20.1 Le classi NIO 705
20.2 Fondamenti per NIO 706
Buffer 706
Canali 708
Set di caratteri e selettori 710
20.3 Miglioramenti aggiunti a NIO da J DK 7 711
L’interfaccia Path 711
Le classi Files 712
La classe Paths 715
Le interfacce di attributi di file 716
Le classi FileSystem, FileSystems e FileStore 718
20.4 Utilizzo del sistema NIO 718
Utilizzo di NIO per l’I/O basato su canali 719
Lettura di un file mediante un canale 719
Scrittura di un file mediante un canale 725
Copia di un file mediante NIO 729
Utilizzo di NIO per l’I/O basato su flussi 730
Utilizzo di NIO per operazioni su percorso e file system 732
Ottenere informazioni su un percorso e un file 733
Elenco dei contenuti di una directory 735
Utilizzo di walkFileTree() per elencare un albero di directory 739
LibroJava.indb XVIII 2/1/2012 11:59:15 AM
Indice XIX
20.5 Esempi basati su canali precedenti a J DK 7 741
Lettura di un file precedente a J DK 7 742
FileChannel getChannel() 742
Scrittura di un file precedente a J DK 7 745
21 Reti 749
21.1 Fondamenti sulle reti 749
20.2 Le classi e le interfacce di rete 751
20.3 InetAddress 751
Metodi factory 752
Metodi di istanza 753
20.4 Inet4Address e Inet6Address 753
20.5 Socket client TCP/IP 754
20.6 URL 757
20.7 URLConnection 759
21.8 HttpURLConnection 762
21.9 La classe URI 765
21.10 Cookie 765
21.11 Socket server TCP/IP 765
21.12 Datagrammi 766
DatagramSocket 766
DatagramPacket 767
Un esempio di datagramma 768
22 La classe Applet 771
22.1 Due tipi di applet 771
22.2 Fondamenti sulle applet 772
La classe Applet 773
22.3 Architettura delle applet 775
22.4 Una struttura di applet 776
Inizializzazione e terminazione di applet 778
init() 778
start() 778
paint() 778
stop() 778
destroy() 779
Ridefinizione di update() 779
22.5 Metodi di visualizzazione per le applet 779
22.6 Richiesta di aggiornamento grafico 781
Una semplice applet per un banner 783
22.7 Utilizzo della finestra di stato 785
22.8 Il tag HTML APPLET 786
22.9 Passaggio di parametri ad applet 787
Miglioramento della applet per il banner 789
22.10 getDocumentBase() e getCodeBase() 791
22.11 AppletContext e showDocument() 792
LibroJava.indb XIX 2/1/2012 11:59:15 AM
XX Indice
22.12 L’interfaccia AudioClip 793
22.13 L’interfaccia AppletStub 794
22.14 Invio in output alla console 794
23 Gestione degli eventi 795
23.1 Due meccanismi per la gestione di eventi 796
23.2 Il modello di delegazione degli eventi 796
Eventi 797
Origini di eventi 797
Rilevatori di eventi 798
23.3 Classi di eventi 798
La classe ActionEvent 800
La classe AdjustmentEvent 801
La classe ComponentEvent 802
La classe ContainerEvent 802
La classe FocusEvent 803
La classe InputEvent 803
La classe ItemEvent 804
La classe KeyEvent 805
La classe MouseEvent 806
La classe MouseWheelEvent 808
La classe TextEvent 809
La classe WindowEvent 809
23.4 Origini di eventi 810
23.5 Interfacce di rilevatori di eventi 811
L’interfaccia ActionListener 812
L’interfaccia AdjustmentListener 812
L’interfaccia ComponentListener 812
L’interfaccia ContainerListener 813
L’interfaccia FocusListener 813
L’interfaccia ItemListener 813
L’interfaccia KeyListener 813
L’interfaccia MouseListener 813
L’interfaccia MouseMotionListener 814
L’interfaccia MouseWheelListener 814
L’interfaccia TextListener 814
L’interfaccia WindowFocusListener 814
L’interfaccia WindowListener 814
23.6 Utilizzo del modello di delegazione degli eventi 815
Gestione degli eventi di mouse 815
Gestione degli eventi di tastiera 818
23.7 Classi adapter 822
23.8 Classi interne 824
Classi interne anonime 825
LibroJava.indb XX 2/1/2012 11:59:15 AM
Indice XXI
24 Introduzione ad AWT: finestre, grafiche e testo 827
24.1 Classi AWT 828
24.2 Basi sulle finestre 830
Component 831
Container 831
Panel 831
Window 832
Frame 832
Canvas 832
24.3 Finestre di frame 832
Impostazione delle dimensioni della finestra 833
Impostazione del titolo di una finestra 833
Chiusura di una finestra di frame 833
24.4 Creazione di una finestra di frame in un’applet 833
Gestione di eventi in una finestra di frame 836
24.5 Creazione di un programma in finestre 840
24.6 Visualizzazione di informazioni in una finestra 842
24.7 Lavoro con la grafica 843
Disegno di linee 843
Disegno di rettangoli 844
Disegno di ellissi e cerchi 846
Disegno di archi 847
Disegno di poligoni 847
Dimensionamento di grafiche 848
24.8 Lavoro con i colori 850
Metodi di Color 851
Utilizzo di tonalità, saturazione e luminosità 851
getRed(), getGreen(), getBlue() 851
getRGB() 852
Impostazione del colore per le grafiche 852
Un’applet che mostra i colori 852
24.9 Impostazione della modalità di disegno 853
24.10 Lavoro con i font 854
Determinazione dei font disponibili 856
Creazione e selezione di un font 857
Ottenere informazioni sui font 860
24.11 Gestione dell’output di testo con FontMetrics 860
Visualizzazione di più righe di testo 862
Centratura del testo 864
Allineamento di testo su più righe 865
25 Utilizzo di controlli AWT, gestori di layout e menu 871
25.1 Basi sui controlli 872
Aggiunta ed eliminazione di controlli 872
Risposte ai controlli 872
HeadlessException 872
25.2 Etichette 873
LibroJava.indb XXI 2/1/2012 11:59:15 AM
XXII Indice
25.3 Utilizzo dei pulsanti 874
Gestione dei pulsanti 875
25.4 Applicazione di caselle di controllo 878
Gestione delle caselle di controllo 878
25.5 CheckboxGroup 880
25.6 Controlli di scelta 882
Gestione degli elenchi di scelta 883
25.7 Utilizzo degli elenchi 885
Gestione di elenchi 886
25.8 Gestione delle barre di scorrimento 887
Gestione delle barre di scorrimento 889
25.9 Utilizzo di TextField 891
Gestione di un TextField 893
25.10 Utilizzo di TextArea 894
25.11 I gestori di layout 896
FlowLayout 897
BorderLayout 899
Utilizzo di Insets 901
GridLayout 903
CardLayout 904
GridBagLayout 907
25.12 Barre di menu e menu 914
25.13 Finestre di dialogo 920
25.14 FileDialog 925
25.15 Gestione di eventi con l’estensione dei componenti AWT 927
Estensione di Button 927
Estensione di Checkbox 929
Estensione di un gruppo di caselle di controllo 930
Estensione di Choice 930
Estensione di List 931
Estensione di Scrollbar 932
25.16 Ridefinizione di paint() 933
26 Immagini 935
26.1 Formati di file 936
26.2 Basi sulle immagini: creazione, caricamento e visualizzazione 936
Creazione di un oggetto Image 936
Caricamento di un’immagine 937
Visualizzazione di un’immagine 937
26.3 ImageObserver 939
26.4 Buffering doppio 940
26.5 MediaTracker 943
26.6 ImageProducer 947
MemoryImageSource 947
26.7 ImageConsumer 949
PixelGrabber 949
26.8 ImageFilter 952
LibroJava.indb XXII 2/1/2012 11:59:16 AM
Indice XXIII
CropImageFilter 952
RGBImageFilter 955
ImageFilterDemo.java 955
PlugInFilter.java 957
LoadedImage.java 958
Grayscale.java 959
Invert.java 959
Contrast.java 960
Convolver.java 961
Blur.java 964
Sharpen.java 965
26.9 Animazione di celle 967
26.10 Altre classi per le immagini 970
27 Le concurrency utilities 971
27.1 I package API concorrenti 972
java.util.concurrent 972
java.util.concurrent.atomic 973
java.util.concurrent.locks 974
27.2 Utilizzo di oggetti di sincronizzazione 974
Semaforo 974
CountDownLatch 980
CyclicBarrier 982
Exchanger 985
27.3 Phaser 987
27.4 Utilizzo di un esecutore 996
Un semplice esempio di esecutore 997
Utilizzo di Callable e Future 999
27.5 L’enumerazione TimeUnit 1001
27.6 Le collection concorrenti 1003
27.7 Blocchi 1003
27.8 Operazioni atomiche 1006
27.9 Programmazione parallela con il Framework Fork/J oin 1008
Le principali classi Fork/J oin 1009
ForkJ oinTask<V> 1009
RecursiveAction 1010
RecursiveTask<V> 1010
ForkJ oinPool 1011
La strategia “divide et impera” 1012
Un semplice esempio di Fork/J oin 1013
L’impatto del livello di parallelismo 1016
Un esempio che utilizza RecursiveTask<V> 1020
Esecuzione di un’operazione in modo asincrono 1022
Annullamento di un’operazione 1023
Determinazione dello stato di completamento di un’operazione 1023
Riavvio di un’operazione 1023
Elementi da esaminare 1024
LibroJava.indb XXIII 2/1/2012 11:59:16 AM
XXIV Indice
Altre funzioni di ForkJ oinTask 1024
Altre funzioni di ForkJ oinPool 1025
Alcuni suggerimenti per Fork/J oin 1025
27.10 Le concurrency utilities e l’approccio tradizionale di J ava 1026
28 Espressioni regolari e altri package 1027
28.1 I package API J ava core 1027
28.2 Elaborazione di espressioni regolari 1029
Pattern 1030
Matcher 1030
Sintassi delle espressioni regolari 1031
Corrispondenza di schemi 1032
Utilizzo di jolly e quantificatori 1034
Lavoro con le classi di caratteri 1036
Utilizzo di replaceAll() 1036
Utilizzo di split() 1037
Due opzioni per la corrispondenza di schemi 1038
Esplorazione delle espressioni regolari 1038
28.3 Riflessione 1038
28.4 Remote Method Invocation (RMI) 1043
Una semplice applicazione client/server che utilizza l’RMI 1043
Fase uno: immissione e compilazione del codice sorgente 1043
Fase due: generazione manuale di uno stub se necessario 1045
Fase tre: installazione dei file sulle macchine client e server 1046
Fase quattro: avvio del registro RMI sulla macchina server 1046
Fase cinque: avvio del server 1046
Fase sei: avvio del client 1047
28.5 Formattazione di testo 1047
La classe DateFormat 1047
La classe SimpleDateFormat 1050
PARTE III
29 Java Beans 1053
29.1 Cosa sono i J ava Bean 1054
29.2 Vantaggi di J ava Beans 1054
29.3 Introspezione 1054
Schemi di design per le proprietà 1055
Proprietà semplici 1055
Proprietà indicizzate 1055
Schemi di design per eventi 1056
Metodi e schemi di design 1057
Utilizzo dell’interfaccia BeanInfo 1057
29.4 Proprietà vincolate e limitate 1057
29.5 Persistenza 1058
29.6 Personalizzatori 1058
LibroJava.indb XXIV 2/1/2012 11:59:16 AM
Indice XXV
29.7 L’API J ava Beans 1059
Introspector 1061
PropertyDescriptor 1061
EventSetDescriptor 1061
MethodDescriptor 1061
29.8 Un esempio di bean 1061
30 Introduzione a Swing 1065
30.1 Le origini di Swing 1066
30.2 Swing è realizzato sull’AWT 1066
30.3 Due funzioni fondamentali di Swing 1066
I componenti Swing sono leggeri 1066
Swing supporta un aspetto controllato 1067
30.4 La connessione con MVC 1067
30.5 Componenti e contenitori 1068
Componenti 1069
Contenitori 1069
I riquadri dei contenitori di massimo livello 1070
30.6 I package Swing 1070
30.7 Una semplice applicazione Swing 1071
30.8 Gestione degli eventi 1076
30.9 Creazione di un’applet Swing 1079
30.10 Disegno in Swing 1082
Basi sul disegno 1082
Calcolo dell’area disegnabile 1083
Un esempio di disegno 1084
31 Esplorazione di Swing 1087
31.1 J Label e ImageIcon 1088
31.2 J TextField 1089
31.3 I pulsanti Swing 1092
J Button 1092
J ToggleButton 1095
Caselle di controllo 1097
Pulsanti di scelta 1099
31.4 J TabbedPane 1102
31.5 J ScrollPane 1104
31.6 J List 1107
31.7 J ComboBox 1111
31.8 Alberi 1113
31.9 J Table 1117
31.10 Proseguimento dell’esplorazione di Swing 1120
32 Servlet 1121
32.1 Basi 1121
32.2 Il ciclo di vita di una servlet 1122
00_java_sommario.indd XXV 2/9/2012 2:19:05 PM
XXVI Indice
32.3 Opzioni per lo sviluppo di servlet 1123
32.4 Utilizzo di Tomcat 1123
32.5 Una semplice servlet 1125
Creazione e compiazione del codice sorgente della servlet 1126
Avvio di Tomcat 1126
Avvio di un browser web e richiesta della servlet 1126
32.6 L’API Servlet 1127
32.7 Il package javax.servlet 1127
L’interfaccia Servlet 1128
L’interfaccia ServletConfig 1129
L’interfaccia ServletContext 1129
L’interfaccia ServletRequest 1129
L’interfaccia ServletResponse 1130
La classe ServletInputStream 1131
La classe ServletOutputStream 1131
Le classi di eccezioni di servlet 1132
32.8 Lettura dei parametri di servlet 1132
32.9 Il package javax.servlet.http 1133
L’interfaccia HttpServletRequest 1134
L’interfaccia HttpServletResponse 1135
L’interfaccia HttpSession 1136
L’interfaccia HttpSessionBindingListener 1136
La classe Cookie 1137
La classe HttpServlet 1138
La classe HttpSessionEvent 1140
La classe HttpSessionBindingEvent 1140
32.10 Gestione di richieste e risposte HTTP 1141
Gestione di richieste HTTP GET 1141
Gestione di richieste HTTP POST 1142
32.11 Utilizzo dei cookie 1144
32.12 Tracciamento delle sessioni 1146
PARTE IV
33 Applet e servlet finanziarie 1149
34 Creazione di un download manager in Java 1151
Appendice
Utilizzo dei commenti della documentazione Java 1153
A.1 I tag javadoc 1153
@author 1155
{@code} 1155
@deprecated 1155
{@docRoot} 1155
@exception 1155
LibroJava.indb XXVI 2/1/2012 11:59:16 AM
Indice XXVII
{@inheritDoc} 1156
{@link} 1156
{@linkplain} 1156
{@literal} 1156
@param 1156
@return 1156
@see 1157
@serial 1157
@serialData 1157
@serialField 1157
@since 1157
@throws 1158
{@value} 1158
@version 1158
A.2 La forma generale di un commento di documentazione 1158
A.3 Output di javadoc 1159
A.4 Un esempio che utilizza i commenti di documentazione 1159
Indice analitico 1161
LibroJava.indb XXVII 2/1/2012 11:59:16 AM