Java IDE ja ensimmäinen ohjelma

Java on oliopohjainen ohjelmointikieli. Syntaksiltaan se muistuttaa pitkälti C++aa.

Kuten edellä todettiin, nykyään ohjelmoinnissa pääosin käytetään integroituja ohjelmointiympäristöjä niiden monipuolisuuden ja sisältämien aputoimintojen vuoksi. Ohjelmoija on usein varsin vapaa valitsemaan itse omat ohjelmointityökalunsa, joten ohjelmointiympäristö on kokeneille koodareille usein mieltymys- ja tottumiskysymys.

Kurssin esimerkkiympäristönä käytämme NetBeansia. NetBeans on saatavilla kaikille käyttöjärjestelmille avoimen lähdekoodin lisenssillä (Apache 2.0). NetBeansin asennuspaketit löydät täältä.

Asenna JDK (katso edellinen luku) ennen NetBeansia. NetBeansin asennusohjelman pitäisi löytää Java automaattisesti asennuksen aikana. Asennusohjelmassa on mahdollisuus vaihtaa tarjottu JDK toiseen, mutta tämä ei ole yleensä tarpeen. Käy aktivoimassa Java SE -liitännäinen (plugin) Tools | Plugins | Installed -valinnan kautta ennen kuin aloitat Java-ohjelmoinnin.

Aloitetaan!

Ensimmäisenä ohjelmana tehdään ensimmäisten ohjelmien Kerninghamin ja Richien tunnetuksi tekemä klassikko eli niin sanottu Hei maailma -ohjelma - Hello World!. Kurssin esimerkit ovat usein englanniksi, koska kurssista on käynnissä kaksi kieliversiota. Oman koodisi voit kirjoittaa myös suomeksi, kunhan kielivalinta on johdonmukainen. Hello Worldin etuna on se, että sen avulla on helppo tutustua sekä ohjelmointikielen syntaksiin että ohjelmointiympäristön peruskäyttöön. Lisäksi se tarjoaa mahdollisuuden testata, että ohjelmointiympäristö on oikein asennettu ja toimiva.

NetBeans-kuvake

Ohjelman kirjoittamiseksi tarvitaan tässä kohtaa vain yksi kooditiedosto eli aloitamme sillä, että NetBeans toimii koodieditorina. Avaa siis NetBeans. Uusi tiedosto syntyy joko uusi tiedosto (New file) -kuvaketta painamalla tai valitsemalla valikosta File->New File.

pic1 tai pic2

Tämän jälkeen valitse Other->Java File->Next. Nimeä tiedosto ja valitse sille sopiva kansio. Java-lähdekooditiedosto on hyvä nimetä aina sen päätason luokan (tai rajapinnan) mukaan. Esimerkiksi jos päätason luokka on nimeltään TheBestClassEver, kooditiedoston nimeksi tulee TheBestClassEver.java. Ole tarkkana pienten ja suurten kirjainten kanssa. theBestClassEver.java ei käy, koska ensimmäinen kirjan on pieni eikä iso.

Kurssin ohjelmakoodeille kannattaa päättää jokin koottu kansio niin ne löytyvät siististi yhdestä paikasta. Projektia ei tarvitse määritellä. Lopuksi Finish luo tiedoston ja siihen kätevästi valmiin pohjan.

pic3 pic4

Koodipohjana syntyy seuraava:

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Other/File.java to edit this template
 */

 /**
  *
  * @author Terhi
  */
 public class HelloWorld {

     /**
      * @param args the command line arguments
      */
     public static void main(String args[]) {
         // TODO code application logic here
     }
 }

Suositus: String args[]String[] args

Netbeansin valmiiksi luomassa koodipohjassa main-funktion parametri on ilmaistu C-kielestä periytyvässä muodossa String args[]. Javassa kuitenkin on vallitseva käytäntö, että taulukon hakasulut merkitään tyypin eikä nimen perään, ja oikeaoppisempi muoto olisi String[] args. Koodiesimerkeissä käytetään tätä jälkimmäistä käytäntöä. Noudata myös itse samaa tapaa!

Javan alkeet -video (kesto 44:26).

Javan alkeet

Javan koodikommenttilohkot ovat samanlaisia kuin C++:ssakin eli tutut // kommenttirivi ovat rivikommentteja eli //:sta rivin loppuun. /* */ jättävät sisäänsä lohkokommentin. Lohkokommentit eivät voi olla sisäkkäisiä ja rivien edessä olevat asteriskit ovat luettavuutta parantamassa. /** alkava lohkokomentti on myöhemmin opittava Javadoc-kommenttilohko. Javadocilla on mahdollista luoda suoraan koodista rajapintadokumentaatio.

Itse ohjelma kirjoitetaan luokan sisään. Jokaisessa Java-ohjelmassa on aina vähintään yksi luokka. Luokka esitellään avainsanalla class jota seuraa luokan nimi (HelloWorld). Lisäksi alussa on näkyvyysmääre, yleisimmin public. Luokan otsikkoa seuraa luokan runko {}, jonka sisälle itse luokan toteutus kirjoitetaan. Java-luokan perusrakenne on siis:

public class Name {
    <jäsenmuuttujat, joskus kutsutaan myös attribuuteiksi>
    <jäsenfunktiot eli metodit>
}

Jokaisessa Java-ohjelmassa on oltava metodi nimeltä main eli pääohjelma. Se on aina muotoa public static void main(String[] args). Pureudutaan lyhyesti loitsun osiin:

  • public näkyvyysmääre, joka määrittelee kuka metodia voi kutsua ja mistä kutsu voidaan tehdä. Pääohjelman ollessa julkinen Java pystyy käynnistämään ohjelman.

  • static määrittelee jäsenfunktion luokkafunktioksi ja tarvitaan, jotta pääohjelma voidaan käynnistää luomatta luokasta oliota.

  • void metodin paluuarvo. Pääohjelma ei palauta mitään eli paluuarvo on void.

  • main metodin nimi. Tätä metodia ei kutsuta ohjelmasta käsin vaan Java käynnistää pääohjelman itse.

  • String[] args ohjelman komentoriviltä saamat parametrit eli taulukollinen merkkijonoja. Palataan tähän tarkemmin hiukan myöhemmin.

Kirjoitetaan sitten toiminnallisuus ohjelmalle. Haluamme tulostaa ruudulle ohjelmasta tekstin “Hello World!”. Kirjoitetaan siis pääohjelmalle toiminnallisuutta funktiolohkon sisään. Tulostamista varten tarvitaan Javan pakkauksesta java.lang tarkoitukseen sopiva luokka. Tällainen on System. Java.lang määrittelee kielen tarpeisiin joukon perusluokkia (esim. System, String ja Double) ja se on mukana ohjelmissa automaattisesti. Pakkauksiin palaamme tarkemmin myöhemmin. Kirjoita nyt System.out mainisi sisään. Huomaat, että NetBeans auttaa oikean metodin valinnassa.

NetBeansin jäsenfunktiolistaus

Valitse NetBeansin ehdotuksista merkkijonon tulostamiseen sopiva metodi ja laita se tulostamaan haluttu teksti. Merkkijonoliteraalit ovat Javassa syntaksiltaan samanlaisia kuin C++:ssa eli "tämä on merkkijonoliteraali".

Kun olet lisännyt koodisi main-funktioon oikean metodikutsun eli System.out.println("Hello World!"), voimme kääntää ja ajaa ohjelman. NetBeansissa yksittäisen tiedoston saa ajettua valitsemalla Run->Run File. On kuitenkin tärkeää osata kääntää ja ajaa ohjelmia komentoriviltä (Terminal tai Console Linuxissa, Terminal macOS:ssä ja Command Prompt tai PowerShell Windowsissa). Mene komentorivillä kansioon, johon asetit NetBeansin tallentamaan koodisi. Java-kielisen ohjelman ajaminen koostuu kahdesta vaiheesta. Ensin lähdekoodi käännetään tavukoodiksi (bytecode). Tämän jälkeen tavukoodi suoritetaan tulkin avustuksella Javan virtuaalikoneessa (Java Virtual Machine eli JVM). JVM mahdollistaa Javan siirrettävyyden eri alustoille eli sama tavukoodi on suoritettavissa missä tahansa, kunhan JVM on saatavilla. Tutustutaan JVM:iin vähän syvällisemmin myöhemmin. Komento javac tiedosto.java esim. javac HelloWorld.java kääntää lähdekoodin tavukoodiksi. Onnistuneen käännöksen tuloksena kansioon syntyy tavukooditiedosto tiedosto.class esim. HelloWorld.class. Tavukoodi annetaan tulkattavaksi antamalla tulkille luokan nimi komennolla java tiedosto esim. java HelloWorld.

Komentorivi, jossa ajettu javac ja java

Syntaksivirheet:

Kokeile, mitä tapahtuu, kun kirjoitat NetBeansissa virheelliset koodirivit System.out.printl("One); ja System.out.printl("One) koodiisi. Miten NetBeans huomauttaa virheistäsi?

Ohjelman suorittaminen NetBeansissa:

Yksi kooditiedosto voidaan ajaa NetBeansissa valitsemalla Run->Run file. Missä NetBeans näyttää ohjelman suorituksen tai mahdolliset virheet?

Ohjelman kääntäminen ja suorittaminen komentoriviltä:

Koodi käännetään ja ajetaan komentoriviltä