ManualepraticodiJava: dallateoriaallaprogrammazione ManualepraticodiJava: dallateoriaallaprogrammazione linguaggio,networking,I/O interfaccegrafiche, programmazioneconcorrente ANDREAGINI–PAOLOAIELLO–LORENZOBETTINI–GIOVANNIPULITI ManualepraticodiJava:dallateoriaallaprogrammazione AndreaGini–PaoloAiello–LorenzoBettini–GiovanniPuliti ©MokaBytesrl viaBaracca,132 50127Firenze http://www.mokabyte.it e-mail:[email protected] ©2003,TecnicheNuove viaEritrea,21 20157Milano http://www.tecnichenuove.com Redazione: tel.0239090254–0239090257,fax0239090255 e-mail:[email protected] Vendite: tel.0239090251–0239090252,fax0239090373 e-mail:[email protected] ISBN88-481-1553-5 Immaginedicopertina:graficaHopsLibrisuprogettodiLorenzoPacini RealizzazioneeditorialeacuradiEscom–Milano Tuttiidirittisonoriservatianormadileggeeanormadelleconvenzioniinternazionali. Nomiemarchicitatineltestosonogeneralmentedepositatioregistratidallerispettive caseproduttrici. HopsLibrièunmarchioregistratoTecnicheNuovespa Indice generale Prefazione.......................................................................................................xv IntroduzioneaJava.......................................................................................xvii Lebasidellaprogrammazione.............................................................................xvii Programmaelinguaggiodiprogrammazione................................................xvii CompilatoreeVirtualMachine.....................................................................xviii Ilprimoapproccioconlaprogrammazione........................................................xix Icostruttidellaprogrammazione.......................................................................xxii StrutturabasediunprogrammaJava...........................................................xxii Commenti......................................................................................................xxiii Istruzioneelementare....................................................................................xxiii Sequenza.........................................................................................................xxiv Variabiliintere.................................................................................................xxv Strutturadicontrollodecisionale:ilcostruttoif-else.................................xxvi Strutturadicontrolloiterativa:l’istruzionewhile.......................................xxviii Programmidiesempio........................................................................................xxx Cosasipuòfareconquesticostrutti?...............................................................xxxii Capitolo1-Tipididati....................................................................................1 Tipiinteri..................................................................................................................1 Tipinumericifloatingpoint.....................................................................................2 Assegnamentodivariabilifloatingpoint............................................................3 Booleano...................................................................................................................3 Assegnamentosuvariabilibooleane...................................................................4 Caratteri....................................................................................................................5 Promozioniecasting................................................................................................5 Autoincrementoeautodecremento.........................................................................6 viIndicegenerale Capitolo2-Array..............................................................................................9 Dichiarazionediarray............................................................................................10 Assegnamento.........................................................................................................10 Dereferenziazione..................................................................................................11 Differenzatraassegnamentoedereferenziazione.................................................12 Inizializzazioneautomaticadiunvettore..............................................................14 Lunghezzadiunvettore........................................................................................14 Unesempiodimanipolazionedivettori...............................................................14 Vettorimultidimensionali......................................................................................16 Vettoriincompleti..................................................................................................17 Inizializzazioneautomaticadiunvettoremultidimensionale.........................18 Capitolo3-Strutturedicontrollodecisionali...............................................21 Condizionibooleane..............................................................................................21 Bloccodiistruzionievariabililocali......................................................................22 if–else...............................................................................................................23 if–elseannidati................................................................................................24 if–elseconcatenati...........................................................................................25 Ilcostruttoswitch–case........................................................................................26 Espressionicondizionali........................................................................................27 Capitolo4-Strutturedicontrolloiterative...................................................29 Ciclowhile..............................................................................................................29 Ciclodo–while......................................................................................................30 Ciclofor..................................................................................................................30 Usodelforconparametrimultipli...................................................................31 Ciclinidificati.........................................................................................................33 Usodibreak...........................................................................................................34 L’istruzionecontinue..............................................................................................34 Usodibreakecontinueinciclinidificati..............................................................35 Usodibreakecontinueconlabel.........................................................................35 Capitolo5-Usodeglioggetti.........................................................................37 Lametaforadeglioggetti.......................................................................................37 Lostatodiunoggettoeisuoiattributi............................................................38 Lemodalitàdiutilizzodiunoggetto...............................................................39 Lametaforadeglioggettinellaprogrammazione..................................................39 Creazionediunoggetto....................................................................................40 Ilcomportamentodiunoggettoeisuoimetodi.............................................42 Indicegeneralevii Gliattributidiunoggettoeilsuostato...........................................................42 Interazionecomplessatraoggetti.....................................................................43 Oggettidisistema...................................................................................................43 Stringhe..................................................................................................................44 LestringheeJava:creazione,concatenazioneeuguaglianza..........................44 Vettoridinamici......................................................................................................49 UsodiVector.....................................................................................................50 MetodifondamentalidiVector........................................................................50 Iterator...............................................................................................................51 Conversioneinarray.........................................................................................52 Unesempioriepilogativo..................................................................................52 Mappehash............................................................................................................53 Metodiprincipali..............................................................................................53 Estrazionedell’insiemedichiaviovalori.........................................................54 Wrapperclass.........................................................................................................54 Capitolo6-LeclassiinJava..........................................................................57 Incapsulamento......................................................................................................58 Dichiarazionedimetodo........................................................................................59 Dichiarazionedimetodoconparametri..........................................................60 Chiamataametodo:ladotnotation......................................................................60 Parametroattualeeparametroformale............................................................62 Passaggiodiparametribyvalueebyref..........................................................63 Visibilitàdellevariabili:variabililocali..................................................................64 Ricorsione...............................................................................................................65 Costruttore.............................................................................................................66 Finalizzatoriegarbagecollection.....................................................................67 Convenzionidinaming..........................................................................................68 Ereditarietà.............................................................................................................68 Overloading............................................................................................................70 Overriding..............................................................................................................72 Identificatorispecialithisesuper..........................................................................72 Bindingdinamico...................................................................................................74 Upcasting,downcastingeoperatoreinstanceof....................................................75 Equalseoperatore==............................................................................................76 Capitolo7-Costruttiavanzati.......................................................................77 Classiastratte..........................................................................................................77 Ilcontestostatico:variabiliemetodidiclasse.................................................79 viiiIndicegenerale Interfacce................................................................................................................80 Interfacceperdefinireilcomportamento........................................................80 Dichiarazioneeimplementazionediinterfacce...............................................82 Unesempioconcreto........................................................................................83 Tipiepolimorfismo................................................................................................85 Classieinterfacceinterne......................................................................................85 Ipackage.................................................................................................................86 Dichiarazionedipackage..................................................................................86 Compilazioneedesecuzione.............................................................................87 Dichiarazioneimport........................................................................................88 Convenzionidinamingdeipackage.................................................................89 PrincipalipackagedelJDK..............................................................................89 Modificatori............................................................................................................90 Moficatoridiaccesso.........................................................................................90 Final...................................................................................................................91 Native................................................................................................................92 Strictfp...............................................................................................................92 Transient,volatileesynchronized....................................................................92 Capitolo8-Eccezioni.....................................................................................93 Erroriedeccezioni.................................................................................................93 Gestionedelleeccezioni.........................................................................................94 Costruttotry–catch–finally...........................................................................95 Gerarchiadelleeccezioni..................................................................................96 Propagazione:l’istruzionethrows....................................................................97 Lanciodieccezioni:ilcostruttothrow.............................................................98 Catenedieccezioni...........................................................................................99 Eccezionidefinitedall’utente.........................................................................100 Esempioriepilogativo.....................................................................................101 Capitolo9-AssertinJava:tecnicheefilosofiad’uso.................................103 Cosasonoleassert...............................................................................................103 SherlockHolmeselafilosofiadelleAssert....................................................104 Sintassidelleassert..........................................................................................106 Compilazioneedesecuzionedicodiceconassert.........................................106 Abilitazioneedisabilitazioneselettiva............................................................108 Capitolo10-Input/Output..........................................................................109 Introduzione.........................................................................................................109 Indicegeneraleix Stream...................................................................................................................109 Leclassi................................................................................................................110 LaclasseOutputStream.......................................................................................111 Descrizioneclasse...........................................................................................111 Metodi.............................................................................................................111 LaclasseInputStream..........................................................................................112 Descrizioneclasse...........................................................................................112 Metodi.............................................................................................................112 Glistreampredefiniti...........................................................................................114 Esempi.............................................................................................................114 Streamfiltro..........................................................................................................116 LeclassiFilterOutputStreameFilterInputStream.............................................117 LeclassiDataOutputStreameDataInputStream...............................................117 DescrizioneclasseDataOutputStream...........................................................118 Costruttore......................................................................................................118 Metodi.............................................................................................................118 DescrizioneclasseDataInputStream..............................................................119 Costruttore......................................................................................................119 Metodi.............................................................................................................119 ClassiBufferedOutputStreameBufferedInputStream......................................120 DescrizioneclasseBufferedOutputStream....................................................121 Costruttori.......................................................................................................121 Metodi.............................................................................................................121 DescrizioneclasseBufferedInputStream.......................................................122 Costruttori.......................................................................................................122 Metodi.............................................................................................................122 Streamperl’accessoallamemoria.......................................................................122 DescrizioneclasseByteArrayInputStream.....................................................122 Costruttori.......................................................................................................122 Metodi.............................................................................................................123 DescrizioneclasseByteArrayOutputStream..................................................123 Costruttori.......................................................................................................123 Metodi.............................................................................................................123 DescrizioneclassePipedOutputStream.........................................................124 Costruttori.......................................................................................................125 Metodi.............................................................................................................125 DescrizioneclassePipedInputStream............................................................125 Costruttori.......................................................................................................125 Metodi.............................................................................................................125 xIndicegenerale Ifile.......................................................................................................................127 DescrizioneclasseFile....................................................................................127 Costruttori.......................................................................................................127 Metodi.............................................................................................................128 DescrizioneclasseRandomAccess.................................................................129 Costruttori.......................................................................................................129 Metodi.............................................................................................................130 LeclassiFileOutputStreameFileInputStream.............................................131 DescrizioneclasseFileOutputStream............................................................131 Costruttori.......................................................................................................131 Metodi.............................................................................................................132 DescrizioneclasseFileInputStream...............................................................132 Costruttori.......................................................................................................132 Metodi.............................................................................................................132 ClassiReadereWriter..........................................................................................133 LeclassiPrintStreamePrintWriter...............................................................134 Altreclassiemetodideprecati.............................................................................134 Capitolo11-Programmazioneconcorrente egestionedelmultithreadinJava................................................................135 Introduzione.........................................................................................................135 Processiemultitasking.........................................................................................135 Threademultithreading......................................................................................138 IthreadelaJavaVirtualMachine.......................................................................139 LaprogrammazioneconcorrenteinJava............................................................140 Creazioneeterminazionediunthread..........................................................141 L’interfacciaRunnable....................................................................................142 Identificazionedelthread...............................................................................146 Maggiorcontrollosuithread...............................................................................146 Unafinetranquilla:usciredarun()................................................................146 Bisognodiriposo:ilmetodosleep()...............................................................147 Giocodisquadra:ilmetodoyield()...............................................................148 Laleggenonèugualepertutti:lapriorità.....................................................149 El’ultimochiudalaporta:ilmetodojoin()...................................................151 Interruzionediunthread...............................................................................154 Metodideprecati.............................................................................................155 Lasincronizzazionedeithread............................................................................156 Condivisionedidatifrathread.......................................................................156 Competizionefrathread.................................................................................158