Helsingin yliopisto / Tietojenkäsittelytieteen laitos
Copyright © Arto Wikla. Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin, kuten kaupallisilla tai muilla kursseilla, on kielletty.

2.1 Pieni ohjelma

(Muutettu viimeksi 7.9.2009, edellinen muutos 2.5.2005)

Tässä luvussa tutustutaan pienen pieneen Java-ohjelmaan, sen kääntämiseen ja suorittamiseen. Tavallisia ohjelmia kutsutaan sovelluksiksi (application). Myös internet-selaimella suoritettavasta ohjelmasta, sovelmasta (applet) nähdään pikkuriikkinen esimerkki.

Hoi maailma -sovellus

Ohjelmoinnin opiskelu usein aloitetaan tutustumalla pienen pieneen täydelliseen ohjelmaan, joka tulostaa maailmoja syleilevän tervehdyksen. Tämä kurssi ei ole poikkeus:

 
     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). Java-jargonissa "metodi" tarkoittaa nimettyä algoritmia. Yleisesti käytetty nimi tällaiselle on aliohjelma (subroutine). Metodi voi laskea ja palauttaa jonkin arvon tai vain "tehdä jotakin".

Sovelluksen pääohjelma ohjelmoidaan Java-kielessä aina ylläolevan kaltaiseksi metodiksi: Se on aina julkinen (public), luokkaan liittyvä (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. Näihin asiohin palataan myöhemmin.

 
         System.out.println("Hoi maailma!");
Javan tulostusoperaatio on valitettavan 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. PrintStream-luokan ilmentymille on käytössä metodi println(String), jolla voidaan tulostaa tekstiä esimerkiksi näyttöruudulle.

 
        "Hoi maailma!"
on merkkijono-olio, String-luokan eräs ilmentymä.

Ohjelman kirjoitus, käännös ja suoritus

Tässä esitellään ylläolevan sovelluksen toteuttaminen. tietojenkäsittelytieteen laitoksen Linux-järjestelmässä, mutta (kielen perusideoiden mukaisesti) vastaavalla tavalla pitäisi voida toimia muuallakin. Esimerkiksi Windows-järjestelmissä voidaan käyttää vaikkapa Notepad-editoria ja komentorivi-ikkunaa.

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.java
Jos kääntäjä ei havaitse mitään virheitä, syntyy välikielinen ns. class-tiedosto:
     Hoi.class
Kää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 suoritetaan Java-tulkilla komennolla java:

     java Hoi

Huomaa että komento ei saa olla muodossa java Hoi.class!

Komennon seurauksena ohjelma suoritetaan ja kuvaruudulle tulostuu odotetusti:

     Hoi maailma!



Esimerkki sovelmasta

Sovelma (applet) on Javan Bytecode-välikielelle käännetty ohjelma. Se liitetään jollekin WWW-sivulle ja sen suorittaa selaimen oma Bytecode-tulkki. Sovelman oikeuksia on sovellukseen verrattuna huomattavasti rajoitettu; esimerkiksi tiedostonkäsittely ei yleensä ole mahdollista.

Suorittaisitko mistä tahansa löytyneen millaisen tahansa ohjelman omassa koneessasi? (Oikea vastaus on: EN!)

Seuraavassa on pikku sovelma, jolla hiiri voi syödä juustoa:

SELAIN EI YMMÄRRÄ JAVAA!

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 vanhalla versiolla. Uudemmat kääntäjät vähän rutisevat, mutta kääntävät kuitenkin ...


Takaisin luvun 2 sisällysluetteloon.