java sommario 2-03-2007 18:37 Pagina V Indice INTRODUZIONE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XV 1 Nozioni fondamentali su Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Origini di Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Relazione di Java con C e C++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Relazione di Java con C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Contributo di Java a Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Applet Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Sicurezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Portabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Bytecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Caratteristiche di Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Programmazione orientata agli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Incapsulamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Polimorfismo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Ereditarietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Java Development Kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Un primo semplice programma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Inserimento del programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Compilazione del programma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Il primo programma di esempio riga per riga . . . . . . . . . . . . . . . . . . . . . . . . 13 Un secondo semplice programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Progetto 1.1 Conversione di galloni in litri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Due istruzioni di controllo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 java sommario VI 2-03-2007 18:37 Pagina VI Indice Istruzione if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Ciclo for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Creare blocchi di codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Punto e virgola e posizionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Progetto 1.2 Perfezionamento del convertitore galloni-litri. . . . . . . . . . . . . . . . . . . . 28 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Parole chiave di Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Identificatori in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Modulo 1 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2 Introduzione ai tipi di dati e operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Importanza dei tipi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Tipi primitivi di Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Interi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Tipi in virgola mobile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Tipo boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Progetto 2.1 Quanto è lontano il fulmine? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Valori letterali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Costanti esadecimali e ottali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Sequenze di escape dei caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Valori letterali stringa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Approfondimento sulle variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Inizializzazione di una variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Inizializzazione dinamica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Area di validità e durata delle variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Operatori aritmetici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Incremento e decremento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Operatori relazionali e logici. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Operatori logici abbreviati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Operatore di assegnazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Assegnazioni abbreviate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Conversione del tipo nelle assegnazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Conversione esplicita di tipi incompatibili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Precedenza degli operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Progetto 2.2 Visualizzare una tabella della verità per gli operatori logici . . . . . . . . . 61 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Conversione del tipo nelle espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Spaziatura e parentesi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Modulo 2 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 java sommario 2-03-2007 18:37 Pagina VII Fondamenti di Java 3 Istruzioni di controllo del programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Immettere caratteri dalla tastiera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Istruzione if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Istruzioni if nidificate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Scala if-else-if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Istruzione switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Istruzioni switch nidificate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Progetto 3.1 Iniziare a creare un sistema di guida per Java . . . . . . . . . . . . . . . . . . . . 77 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Ciclo for. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Alcune variazioni del ciclo for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Parti mancanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Cicli senza corpo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Dichiarazioni delle variabili di controllo del ciclo nel ciclo for . . . . . . . . . . 85 Ciclo for avanzato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Ciclo while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Ciclo do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Progetto 3.2 Migliorare il sistema di guida per Java . . . . . . . . . . . . . . . . . . . . . . . . . 90 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Utilizzare break per uscire da un ciclo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Utilizzare break come forma di goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Utilizzare continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Progetto 3.3 Terminare il sistema di guida per Java. . . . . . . . . . . . . . . . . . . . . . . . . 101 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Cicli nidificati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Modulo 3 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 4 Introduzione a classi,oggetti e metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Nozioni fondamentali sulle classi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Forma generica di una classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Definizione di una classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Modalità di creazione degli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Variabili di riferimento e assegnazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Aggiunta di un metodo alla classe Vehicle . . . . . . . . . . . . . . . . . . . . . . . . . 115 Ritorno al chiamante da un metodo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Restituzione di un valore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Utilizzo dei parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Aggiunta di un metodo con parametri a Vehicle. . . . . . . . . . . . . . . . . . . . . 122 Progetto 4.1 Creazione di una classe di guida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Costruttori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Costruttori con parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Aggiunta di un costruttore alla classe Vehicle . . . . . . . . . . . . . . . . . . . . . . 131 VII java sommario VIII 2-03-2007 18:37 Pagina VIII Indice Operatore new rivisitato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Garbage collection e finalizzatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Metodo finalize( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Progetto 4.2 Dimostrare la finalizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Parola chiave this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Modulo 4 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 5 Altri tipi di dati e operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Array unidimensionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Ordinare un array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Array multidimensionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Array bidimensionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Array irregolari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Array di tre o più dimensioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Inizializzazione di array multidimensionali . . . . . . . . . . . . . . . . . . . . . . . . 151 Sintassi alternativa per la dichiarazione di array. . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Assegnazione di riferimenti agli array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Utilizzo del membro length. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Progetto 5.1 Una classe Queue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Ciclo for in stile for-each. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Iterazione negli array multidimensionali . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Applicazione del ciclo for avanzato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Creazione di stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Gestione di oggetti String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Array di stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Stringhe invariabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Utilizzo di argomenti della riga di comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Operatori sui bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Operatori AND, OR, XOR e NOT sui bit . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Operatori di scorrimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Assegnazioni abbreviate sui bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Progetto 5.2 Una classe ShowBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Operatore ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Modulo 5 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 6 Approfondimento su metodi e classi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Controllo dell’accesso ai membri delle classi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Specificatori di accesso in Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Progetto 6.1 Perfezionamento della classe Queue . . . . . . . . . . . . . . . . . . . . . . . . . . 195 java sommario 2-03-2007 18:37 Pagina IX Fondamenti di Java Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Passare oggetti ai metodi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Modalità di passaggio degli argomenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Restituzione degli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Overload dei metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Overload dei costruttori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Progetto 6.2 Overload del costruttore Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Ricorsione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Comprensione di static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Blocchi static. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Progetto 6.3 Quick sort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Introduzione alle classi nidificate e interne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Vararg: argomenti di lunghezza variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Nozioni di base su vararg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Overload dei metodi vararg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Vararg e ambiguità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Modulo 6 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 7 Ereditarietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Nozioni di base sull’ereditarietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Accesso ai membri ed ereditarietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Costruttori ed ereditarietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Utilizzo di super per chiamare i costruttori di superclasse . . . . . . . . . . . . . 243 Utilizzo di super per accedere ai membri di superclasse. . . . . . . . . . . . . . . . . . . . . . 248 Progetto 7.1 Estensione della classe Vehicle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Creazione di una gerarchia a più livelli. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Momento di chiamata dei costruttori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Riferimenti di superclasse e oggetti sottoclasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Overriding dei metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Supporto del polimorfismo nei metodi con overridde . . . . . . . . . . . . . . . . . . . . . . . 264 Motivi per l’overridde dei metodi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Applicazione dell’override dei metodi a TwoDShape . . . . . . . . . . . . . . . . 266 Utilizzo di classi astratte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Utilizzo di final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 final impedisce l’overriding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 final impedisce l’ereditarietà. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Utilizzo di final con i membri dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Classe Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Modulo 7 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 8 Pacchetti e interfacce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Pacchetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 IX java sommario X 2-03-2007 18:37 Pagina X Indice Definizione di un pacchetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Individuazione di pacchetti e CLASSPATH . . . . . . . . . . . . . . . . . . . . . . . . 283 Un breve esempio sui pacchetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Accesso a membri e pacchetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Esempio di accesso ai pacchetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Comprensione dei membri protetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Importazione di pacchetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Pacchetti della libreria di classi di Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Interfacce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Implementazione delle interfacce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Utilizzo dei riferimenti di interfaccia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Progetto 8.1 Creazione di un’interfaccia Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Variabili nelle interfacce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Estensione delle interfacce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Modulo 8 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 9 Gestione delle eccezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Gerarchia di eccezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Nozioni di base sulla gestione delle eccezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Utilizzo di try e catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Un semplice esempio di eccezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 Conseguenze di un’eccezione non intercettata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Eccezioni per la corretta gestione degli errori . . . . . . . . . . . . . . . . . . . . . . 316 Utilizzo di più istruzioni catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Intercettazione di eccezioni di sottoclasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Nidificazione dei blocchi try . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Generazione di un’eccezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Rigenerazione di un’eccezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Approfondimento su Throwable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Utilizzo di finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Utilizzo di throws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Eccezioni integrate in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Creazione di sottoclassi di eccezioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Progetto 9.1 Aggiunta di eccezioni alla classe Queue . . . . . . . . . . . . . . . . . . . . . . . 333 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Modulo 9 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 10 Utilizzo dell’I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 I/O di Java basato sui flussi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Flussi di byte e flussi di caratteri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Classi a flusso di byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 Classi a flusso di caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Flussi predefiniti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Utilizzo dei flussi di byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 java sommario 2-03-2007 18:37 Pagina XI Fondamenti di Java Lettura dell’input da console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Scrittura dell’output su console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Lettura e scrittura di file con flussi di byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Input da un file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Scrittura su un file. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Lettura e scrittura di dati binari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Progetto 10.1 Utility di confronto dei file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 File ad accesso casuale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Utilizzo dei flussi di caratteri Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Input da console con i flussi di caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Output su console con i flussi di caratteri. . . . . . . . . . . . . . . . . . . . . . . . . . 364 I/O su file con i flussi di caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 Utilizzo di FileWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 Utilizzo di FileReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Utilizzo dei wrapper di tipo in Java per la conversione di stringhe numeriche . . . . 369 Progetto 10.2 Creazione di un sistema di guida basato su disco . . . . . . . . . . . . . . . 372 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 Modulo 10 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 11 Programmazione multithread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Nozioni fondamentali sul multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Classe Thread e interfaccia Runnable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Creazione di un thread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 Alcuni semplici miglioramenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Progetto 11.1 Estensione di Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 Creazione di più thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Determinazione della conclusione di un thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 Priorità dei thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Sincronizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 Utilizzo di metodi sincronizzati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 Istruzione synchronized. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Comunicazione tra thread con notify( ), wait( ) e notifyAll( ) . . . . . . . . . . . . . . . . . 407 Esempio di utilizzo di notify( ), wait( ) e notifyAll( ) . . . . . . . . . . . . . . . . 408 Sospensione, ripresa e interruzione dei thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Progetto 11.2 Utilizzo del thread principale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 Modulo 11 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 12 Enumerazioni, autoboxing e importazione statica. . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Enumerazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Nozioni fondamentali sulle enumerazioni . . . . . . . . . . . . . . . . . . . . . . . . . 423 Enumerazioni di Java come tipi di classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 Metodi values( ) e valueOf( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 XI java sommario XII 2-03-2007 18:37 Pagina XII Indice Costruttori, metodi, variabili di istanza ed enumerazioni . . . . . . . . . . . . . . . . . . . . . 428 Due limitazioni importanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Eredità di enum nelle enumerazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 Progetto 12.1 Semaforo computerizzato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 Autoboxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 Wrapper di tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 Nozioni fondamentali sull’autoboxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 Autoboxing e metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Autoboxing/unboxing nelle espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 Avvertenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 Importazione statica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 Annotazioni (o metadati). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 Modulo 12 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 13 Elementi generici. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 Nozioni fondamentali sugli elementi generici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 Un semplice esempio di elemento generico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 Utilizzo degli elementi generici solo con gli oggetti . . . . . . . . . . . . . . . . . 459 Differenze tra tipi generici in base agli argomenti di tipo . . . . . . . . . . . . . 459 Classe generica con due parametri di tipo . . . . . . . . . . . . . . . . . . . . . . . . . 459 Forma generale di una classe generica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Tipi vincolati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 Utilizzo di argomenti jolly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 Caratteri jolly vincolati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 Metodi generici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Costruttori generici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 Interfacce generiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 Progetto 13.1 Creare una coda generica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Tipi raw e codice precedente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 Cancellazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 Errori di ambiguità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Alcune limitazioni generiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 Impossibilità di istanziare i parametri di tipo . . . . . . . . . . . . . . . . . . . . . . . 488 Limitazioni sui membri statici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 Limitazioni sugli array generici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 Limitazioni sulle eccezioni generiche. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 Modulo 13 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 14 Applet, eventi e argomenti vari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 Nozioni fondamentali sulle applet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 Organizzazione delle appleted elementi essenziali . . . . . . . . . . . . . . . . . . . . . . . . . . 497 Architettura delle applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 Struttura completa di un’applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 java sommario 2-03-2007 18:37 Pagina XIII Fondamenti di Java Inizializzazione e conclusione delle applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 Richiesta di repainting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 Metodo update( ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 Progetto 14.1 Una semplice applet banner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 Utilizzo della finestra di stato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 Passaggio di parametri alle applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 La classe Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 Gestione degli eventi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 Modello di eventi di delega . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 Eventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Origini degli eventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Listener di eventi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Classi di eventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 Interfacce dei listener di eventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 Utilizzo del modello di eventi di delega . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 Gestione degli eventi del mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 Una semplice applet con evento del mouse . . . . . . . . . . . . . . . . . . . . . . . . 515 Altre parole chiave di Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Modificatori transient e volatile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 instanceof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 strictfp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 Metodi nativi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 Modulo 14 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 15 Introduzione a Swing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 Origini e filosofia di progettazione di Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 Componenti e contenitori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 Componenti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 Contenitori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 Riquadri contenitore di primo livello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528 Gestori di layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528 Un primo semplice programma Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 Il primo esempio Swing riga per riga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531 Utilizzare JButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 Utilizzare JTextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 Creare un JCheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 Lavorare con JList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 Progetto 15.1 Utility di confronto dei file basata su Swing . . . . . . . . . . . . . . . . . . . 552 Passo per passo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Utilizzare classi interne anonime per gestire gli eventi. . . . . . . . . . . . . . . . . . . . . . . 559 Creare un’applet Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 Per proseguire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 XIII java sommario XIV 2-03-2007 18:37 Pagina XIV Indice Modulo 15 – Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 A Risposte alle verifiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 Modulo 1: Nozioni fondamentali su Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 Modulo 2: Introduzione ai tipi di dati e operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 Modulo 3: Istruzioni di controllo del programma . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 Modulo 4: Introduzione a classi, oggetti e metodi . . . . . . . . . . . . . . . . . . . . . . . . . . 573 Modulo 5: Altri tipi di dati e operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 Modulo 6: Approfondimento su metodi e classi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 Modulo 7: Ereditarietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 Modulo 8: Pacchetti e interfacce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 Modulo 9: Gestione delle eccezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 Modulo 10: Utilizzo dell’I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 Modulo 11: Programmazione multithread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 Modulo 12: Enumerazioni, autoboxing e importazione statica. . . . . . . . . . . . . . . . . 598 Modulo 13: Elementi generici. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 Modulo 14: Applet, eventi e argomenti vari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607 Modulo 15: Introduzione a Swing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 B Utilizzo dei commentidi documentazione Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621 Tag di javadoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622 @author. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623 {@code} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623 @deprecated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623 {@docRoot} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623 @exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 {@inheritDoc} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 {@link}. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 {@linkplain}. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 {@literal} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 @param. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 @return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 @see . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 @serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 @serialData. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 @serialField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 @since. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 @throws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 {@value} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 @version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 Forma generica di un commento di documentazione . . . . . . . . . . . . . . . . . . . . . . . . 626 Output di javadoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627 Esempio che utilizza i commenti di documentazione . . . . . . . . . . . . . . . . . . . . . . . . 627 Indice analitico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629