Talentum Helsinki 2015
9., uudistettu painos Ensimmäinen painos julkaistu nimellä Java-ohjelmointi Pro Training 2015 Talentum Media Oy ja tekijät Kansi: Outi Pallari Taitto: Sirpa Puntti ISBN 978-952-14-2520-2 ISBN 978-952-14-2632-2 (sähkökirja) ISBN 978-952-14-2521-9 (verkkokirja) BALTO print, Liettua 2015 Palaute kirjasta: www.talentumshop.fi
Esipuhe Java on vakiinnuttanut asemansa ohjelmointikielten joukossa, vaikka kilpailu onkin kovaa. Javan voittokulku alkoi web-sivuilla ajettavista sovelmista, josta kielen käyttöalueet ovat laajenneet esimerkiksi verkkopalveluihin ja muihin palvelinpään ohjelmistoihin sekä matkapuhelimiin ja tabletteihin. Nyt sovelmat on jo lähes haudattu, muiden web-teknologioiden alle, mutta Java on silti vahvasti mukana monissa ohjelmistoprojekteissa. Javan nousu näkyy luonnollisesti myös kirjatarjonnassa. Tämän Javakirjan syntyhistoria juontaa kesään 2000, jolloin allekirjoittaneilta tiedusteltiin, voisimmeko tehdä Java-kirjan. Haasteeseen tarttuessamme opetimme vielä molemmat Java-ohjelmointia Jyväskylän yliopiston informaatioteknologian tiedekunnassa. Silloin emme voineet aavistaa, millaisen suosion kirja saisi, sillä käsissäsi on jo kirjan yhdeksäs, uudistettu painos. Kirja on suunnattu sekä ohjelmointia aloitteleville että jo hieman pidemmälle ehtineille. Kirjan ensimmäisen painoksen tavoitteena oli opettaa Java-ohjelmointia kielen perusteista lähtien. Tämä alkutavoite lienee saavutettu, sillä kirjaa on käytetty jo useana vuotena paitsi Javan opiskeluun niin myös ohjelmoinnin perusopetuksessa, ja saadut kokemukset ovat olleet myönteisiä. Kirja on kirjoitettu lukijaa ajatellen helposti omaksuttavaksi, vaikka asiat joskus olisivatkin vaikeita. Otamme erityisen mielellämme vastaan kaiken palautteen kirjasta. Tällä alalla kehityskulku on huimaa, joten lukijaa kehotetaankin seuraamaan kirjan kotisivuja, jonne kokoamme painosten välillä merkittävimmät asiat osoitteeseen http://javakirja.fi. Vantaalla ja Jyväskylässä 1.3.2015 mika.vesterholm@iki.fi Jorma Kyppö jorma@it.jyu.fi 5
JAVA-OHJELMOINTI Esipuhe ensimmäiseen painokseen Yhteistyöni in kanssa juontaa juurensa kolmen vuoden taakse. Tuolloin hän ryhtyi ohjelmoimaan Javalla kehittämääni kolmen pelaajan shakkipeliä, johon Javan olioihin perustuva ohjelmointifilosofia istui täydellisesti. Mikan tapa työskennellä valkeni allekirjoittaneelle nopeasti. Hänen tapoihinsa ei kuulu ainoastaan tarttua kursailematta vaikeaankin aiheeseen vaan myös tehdä aina hieman enemmän kuin on pyydetty. Tämä on harvinainen ominaisuus. Mikan tyyliin kuuluu myös uusien luovien näkökulmien haku aiheeseen kuin aiheeseen, mikä antaa ihanteellisen lähtökohdan tiimityöskentelyyn tutkijalle, joka tarvitsee tuekseen itsenäiseen työskentelyyn kykenevän kollegan. Kun tätä kirjaa ryhdyttiin työstämään, oli mielessäni huomattavasti vaatimattomampi teos. Mika on perehtynyt syvällisemmin kirjan aihealueeseen, ja työn edistyessä kävikin varsin pian ilmi, että lopputuloksesta tulisi huomattavasti laajempi. Tämä oppikirja on pitkälti Mikan luomus, ja allekirjoittanut voi vain todeta, että oli ilo olla mukana kirjoittamassa kuitenkin muutamaa lukua ja muutoinkin edesauttaa sellaisen Java-kirjan syntymistä, josta toivon mukaan on vielä paljon iloa myös lukijoille. Jyväskylässä 2.1.2001 Jorma Kyppö Yliassistentti, tietojenkäsittelytieteiden laitos Esipuhe toiseen painokseen Tämän kirjan toisen painoksen työstäminen aloitettiin välittömästi ensimmäisen painoksen valmistuttua noin vuosi sitten. Uusia Javaan liittyviä asioita lisättiin ja parannusehdotuksia kirjattiin muistiin sekä lukijoiden käyttöön kotisivuilleni. Suurimmat rakenteelliset muutokset on kokenut kirjan alkuosa, jossa lähdetään nyt liikkeelle yleisesti suunnittelusta, ja vasta sen jälkeen aletaan opiskella Javan alkeita. Alkeiden osuutta on lisätty, jotta kirja soveltuisi entistä paremmin ohjelmoinnin perusteiden opettamiseen. Joitakin termejä on vaihdettu parempiin, Javan uusia ominaisuuksia on lisätty mukaan ja käytettäväksi tietokannaksi on vaihdettu osittain ilmainen MySQL. Toisessa painoksessa työvälineenä on JBuilderin versio 6, kun se ensimmäisessä pai- 6
ESIPUHE noksessa oli vielä JBuilder 4. Väliin on siis vuoden aikana jäänyt jo versio 5. Muutosvauhti kuvastaa sitä, miten Java kehittyy ja valtaa uusia alueita! Haluan myös kiittää lukijoita, jotka ovat lähettäneet kommentteja ja huomioita kirjasta. Otamme edelleenkin ideoita ja kommentteja mielellään vastaan. Vantaalla 1.5.2002 Esipuhe kolmanteen painokseen Se, että kirjoitamme jo toista esipuhetta saman vuoden aikana, kertoo kirjan vastanneen lukijoiden odotuksia ja motivoi kehittämään sitä edelleen. Merkittävimmin tämän painoksen muutoksiin ja korjauksiin vaikuttivat kokemukset, joita saimme kirjan käytöstä ohjelmoinnin perusopetuksessa Jyväskylän yliopistossa kuluneen syksyn aikana. Haluammekin erityisesti kiittää opetuksesta vastannutta lehtori Pertti Hirvosta arvokkaista kommenteista. Rakenteellisesti kirja on pysynyt melkein ennallaan. Uusina asioina kirjaan on sisällytetty Javan metapiirteet sekä Javaan tulossa olevat geneeriset tyypit. Aloittelijan taivalta helpottamaan liitteeksi on lisätty yleisiä virhetilanteita ratkaisuehdotuksineen, ja rompulla on pieni opas komentokehotteen käytöstä. Opiskelun tukemiseksi kirjaan on lisätty yli 50 uutta harjoitustehtävää. JBuilder on vaihdettu uunituoreeseen versioon 8, ja kirjan rompulla on nyt myös Sun Microsystemsin Java 2 SDK. Ikaalisissa ja Jyväskylässä 31.12.2002 ja Jorma Kyppö Esipuhe viidenteen painokseen Tämä vuosi on historiallinen sekä Javan että kirjan osalta. Molemmista ilmestyy viides, merkittävästi uudistunut versio. Javan 5.0 versioon on lisätty uusia ohjelmointia helpottavia ominaisuuksia, kuten primitiivityyppien automaattinen käärintä, paranneltu for-silmukka sekä geneeriset tyypit. Nämä uudet 7
JAVA-OHJELMOINTI asiat on lisätty myös kirjaan, minkä seurauksena sen rakenteeseen on tehty joitakin muutoksia. Uutuutena on lisäksi Java-ohjelmien optimointia koskeva osuus. Kirjan tiedot Java 2 Standard Edition 5.0:sta perustuvat kirjoitushetken tietoihin. Kerään tarvittaessa tietoja viimehetken muutoksista kotisivuilleni. Jotta kirja säilyttäisi luettavuutensa, on rompun käyttöä laajennettu. Siellä on lisämateriaalina sellaiset asiat, joita ei ole enää painettuna kirjassa esimerkiksi luku vanhoista AWT-käyttöliittymistä. Myös ohjelmat on päivitetty uusimpiin versioihin. Kiitokset tämän painoksen osalta kuuluvat aktiivisille lukijoille, jotka ovat lähettäneet meille hyödyllisiä kommentteja ja parannusehdotuksia. Erityiskiitos palautteesta kuuluu jälleen lehtori Pertti Hirvoselle. Vantaalla 1.5.2004 Esipuhe kuudenteen painokseen Javan kymmenvuotissynttärit on juhlittu ja sen kunniaksi myös kirjaa on jälleen uudistettu. Painokseen on lisätty esimerkkejä ja etenkin säikeistä kertovaa lukua on päivitetty J2SE 5.0:n muutosten osalta. Mukaan on otettu muotoiltu tulostus, Scanner-luokka tietojen lukemiseen sekä säännölliset lausekkeet. Kirjan työkaluna on nyt ilmainen Eclipse, joka on yksi parhaista työkaluista Java-ohjelmien tekemiseen. Olemme jälleen saaneet lukijoilta palautetta, jonka ansiosta tekstiin on tehty tarkennuksia. Kiitos tästä kaikille! Vantaalla 8.4.2006 Esipuhe seitsemänteen painokseen Seitsemännessä painoksessa käytössä on Java SE 6, jonka uusia ominaisuuksia on lisätty kirjaan. Verkkopalvelujen rakentamisesta kertovaa lukua on uudistettu ja mukana on nyt myös JavaServer Faces eli JSF-teknologia. Tietokantalukuun on otettu mukaan Java Persistence API ja kirjassa käytetään nyt JDK:n 8
ESIPUHE mukana tulevaa Java DB -tietokantaa. Kolmas lisäys on luku Java Enterprise Edition -teknologiasta. Luvun painopiste on www-sovelluspalvelujen (Web Services) toteuttamisessa. Vantaalla 6.4.2008 Esipuhe kahdeksanteen painokseen Kahdeksanteen painokseen on tehty pieniä korjauksia. Muun muassa sisäluokkiin liittyvää terminologiaa on tarkennettu ja mukaan on liitetty uusi esimerkki. Kirjan oheisrompun sisältö on myös päivitetty. Vantaalla 21.2.2010 Esipuhe yhdeksänteen painokseen Yhdeksäs painos on kokenut osin suuriakin muutoksia, esimerkiksi käyttöliittymiä ja web-sovelluksia koskevat luvut on kirjoitettu lähes uudelleen teknologioiden uudistumisen myötä. Kirjaan on lisätty Java SE 7:n uutuudet, kuten merkkijonojen käyttö switch-lauseessa, timatti-operaattori sekä resurssit sulkeva try ja monen poikkeustyypin käsittely samassa catch-lohkossa. Java SE 8:ssa kieleen lisättiin tuki funktionaaliselle ohjelmoinnille, jolle on kirjassa varattu oma lukunsa. Rinnakkaisuutta koskevassa luvussa käsitellään tehtävien ajastamista ja Java SE 8:ssa lisättyjä tehtävien rinnakkaistamista helpottavia metodeja. Tiedostojen käsittelyn yhteydessä käydään läpi myös Javan uuden IO-kirjaston mukainen tiedostojen käsittely. Kirjaan on myös lisätty JUnit-testaustyökalun esittely ja kirjan lopussa käydään läpi joitakin avoimen lähdekoodin työkaluja ja kirjastoja. Oheisromppu on korvattu kirjan verkkosivuilla. Vantaalla 1.3.2015 9