Manuale pratico di Java - · PDF fileManuale pratico di Java La teoria integrata dalla...

942
Manuale pratico di Java La teoria integrata dalla pratica: dalle basi del linguaggio alla programmazione distribuita, un percorso collaudato per apprendere la tecnologia Java P. Aiello L. Bettini L. Dozio A. Gini A. Giovannini M. Manzini M. Molino G. Morello G. Puliti S. Rossini N. Venditti

Transcript of Manuale pratico di Java - · PDF fileManuale pratico di Java La teoria integrata dalla...

  • Manuale pratico di Java

    La teoria integrata dalla pratica:dalle basi del linguaggio alla programmazione distribuita,

    un percorso collaudato per apprendere la tecnologia Java

    P. Aiello L. Bettini L. Dozio A. Gini A. Giovannini M. Manzini

    M. Molino G. Morello G. Puliti S. Rossini N. Venditti

  • Manuale pratico di JavaLa teoria integrata dalla pratica: dalle basi del linguaggio alla programmazione distribuita,un percorso collaudato per apprendere la tecnologia Java

    I materiali di approfondimento e gli esempi cui si fa riferimento nel testo sono disponibiliallindirizzo http://www.mokabyte.it/mokabook

    MokaByte srlvia Baracca, 13250127 Firenzehttp://www.mokabyte.ite-mail: [email protected]

    2001 Hops Libriviale Montenero, 4420135 Milanohttp://www.hopslibri.come-mail: [email protected]

    ISBN 88-8378-039-6

    Immagine di copertina: grafica Hops Libri da unidea di Lorenzo PaciniRedazione e impaginazione: Francesco Saliola su progetto tipografico Hops Libri

    Tutti i diritti sono riservati a norma di legge e a norma delle convenzioni internazionali.Nomi e marchi citati nel testo sono generalmente depositati o registrati dalle rispettivecase produttrici.

    Hops Libri uniniziativa di Metafora srl

  • Indice generale

    Prefazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi

    1 Introduzione a Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Java: il linguaggio e la tecnologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    Breve storia di Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Java il linguaggio portabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    Sviluppo di applicazioni Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4JDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Applet Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Tool del JDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    La prima applicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2 Il linguaggio Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    La programmazione a oggetti in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Classi, variabili e metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Strutturazione del codice: ereditariet, implementazione di interfacce . . . . . . . . . . . . . . 15I packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Parole chiave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24Controllo del flusso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25Overloading e overriding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29I costruttori di classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Istanziazione delle variabili di classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    Polimorfismo e programmazione dinamica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    Operatori in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

  • iv Indice generale

    Cosa sono le eccezioni e come si gestiscono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Propagazione delle eccezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Tipi di eccezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    Appendice: programmare con le interfacce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Interfacce e polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Ereditariet multipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Composizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49Interfacce che estendono altre interfacce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Interfacce e creazione di oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Vantaggi delle interfacce nello sviluppo del software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    3 Programmazione concorrente e gestione del multithreading in Java . . . . . . . . . . . 55Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    Processi e multitasking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    I thread e la Java Virtual Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    La programmazione concorrente in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Creazione e terminazione di un thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Linterfaccia Runnable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Identificazione del thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    Maggior controllo sui thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Una fine tranquilla: uscire da run() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Bisogno di riposo: il metodo sleep() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Gioco di squadra: il metodo yield() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69La legge non uguale per tutti: la priorit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70E lultimo chiuda la porta: il metodo join() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Interruzione di un thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75Metodi deprecati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

    La sincronizzazione dei thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Condivisione di dati fra thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Competizione fra thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Lock e sincronizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83Visibilit del lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87Class lock e sincronizzazione di metodi statici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

    Comunicazione fra thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Condivisione di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Utilizzo dei metodi wait() e notify() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Il metodo notifyAll() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

  • Indice generale v

    Deamon thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    I gruppi di thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Informazioni sui thread e sui gruppi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Thread group e priorit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Thread group e sicurezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97La classe ThreadLocal . . . . . . . . . . . . . . . . .