Tässä luvussa tutustutaan ensimmäiseen Java-ohjelmaan, sen kääntämiseen ja suorittamiseen. Tavallisia ohjelmia kutsutaan sovelluksiksi (application). Myös Internetissä käytettävästä ohjelmasta, sovelmasta (applet) nähdään esimerkki.
public class Hoi{ public static void main(String[] args){ System.out.println("Hoi maailma!"); } }Tuo arvoituksellisen näköinen teksti on Java-ohjelma "Hoi maailma" -tekstin tulostamiseen. Ohjelmassa on paljon asioita, jotka opitaan vasta myöhemmin. Seuraavan selityksen joidenkin kohtien on tarkoituskin jäädä vielä epäselviksi!
public class Hoi{ ... }Jokainen Java-ohjelma on jossakin luokassa (class). Esimerkkiluokka on julkinen (public). Luokkia käytetään hyvin monin tavoin: sovelluksen ns. pääohjelma on jossakin luokassa, sovelmat toteutetaan luokkina, luokkiin voidaan kerätä välinekirjastoja, luokkien avulla voidaan toteuttaa ns. abstrakteja tietotyyppejä, luokkien avulla mallinnetaan erilaisia rakennehierarkioita, .... Voidaan sanoa, että lähes kaikki, mitä Javassa on, ohjelmoidaan jonkin luokan sisään!
public static void main(String[] args){ ... }Luokassa voidaan määritellä ns. metodeita (method). Metodi on jokin algoritmi. Algoritmi voi laskea ja palauttaa jonkin arvon tai sitten se vain "tekee jotakin".
Sovelluksen pääohjelma ohjelmoidaan aina() ylläolevan kaltaiseksi metodiksi: Se on aina julkinen (public), luokan oma (static), arvoa palauttamaton (void) ja nimeltään "main". Pääohjelmametodilla on aina parametrina String-taulukko, jonka nimi voi olla esim. "args". Tämän taulukon avulla pääohjelma saa käyttöönsä ns. komentoriviparametrit. Tähän palataan myöhemmin.
System.out.println("Hoi maailma!");Javan tulostusoperaatio on aika pitkä kirjoitettava. Seuraavaa selitystä ei ole vielä syytä ymmärtää, mutta korvaansa voi jo totutella siinä esiintyviin sanoihin:
Automaattisesti käytössä oleva pakkaus java.lang sisältää luokan System, jossa on PrintStream-tyyppinen kenttä out. Kaikille PrintStream-luokan ilmentymille on käytössä metodi println(String).
"Hoi maailma!"on merkkijono-olio, String-luokan eräs ilmentymä.
Laaditaan ensin jollakin editorilla (vaikkapa mikroemacsilla, komento ue Hoi.java) ohjelmatiedosto, "pääohjelmaluokka" Hoi.java:
public class Hoi{ public static void main(String[] args){ System.out.println("Hoi maailma!"); } }Tämä tiedosto käännetään Javan välikielelle (Bytecode) komennolla javac:
javac Hoi.javaJos kääntäjä ei havaitse mitään virheitä, syntyy välikielinen ns. class-tiedosto:
Hoi.classKääntäjä tuottaa ohjelmatiedostossa "Hoi.java" olleen luokan "Hoi" nimen mukaan tiedoston "Hoi.class". Jos tiedostossa "Hoi.java" olisi useampia luokkia, niistä jokaisesta syntyisi oma class-tiedosto, jonka nimen alku on luokan nimi. (Jos tiedostossa on useampia luokkia, vain yksi niistä voi olla "public" ja juuri tuon luokan on oltava saman niminen kuin java-tiedoston nimen alkuosa.)
Tiedosto Hoi.class on suoritettava Bytecode-kielinen ohjelma. Se voidaan suorittaa tulkilla java:
java HoiKomennon seurauksena kuvaruudulle tulostuu odotetusti:
Hoi maailma!
Suorittaisitko mistä tahansa löytyneen millaisen tahansa ohjelman omassa koneessasi? (Oikea vastaus on: EN!)
Seuraavassa on pikku sovelma, jolla hiiri voi syödä juustoa:
Sovelman laatimista ei ole vielä tarkoitus opetella. Nyt riittää ymmärtää, että
Jos "kiellosta huolimatta" haluat katsoa sovelman koodia, tiedä että se on ohjelmoitu Javan versiolla 1.0.2. Uudempi kääntäjä 1.1.3 vähän rutisee, mutta kääntää kumminkin ...