Javan perusteita Janne Käki 20.9.2006
Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä). Muuttujat ja metodit voi tietokoneen puolesta nimetä (melkein) ihan miten vaan, olennaista on vain, että samasta muuttujasta tai metodista käytetään johdonmukaisesti samaa nimeä. Java-kielessä on kuitenkin joitakin kymmeniä avainsanoja (public, private, int, void, true, null, return,...), jotka on varattu tiettyyn käyttöön. Näitä ei siis voi valita muuttujien nimiksi. Se, että muuttujat ja metodit nimetään fiksusti ja käyttötarkoitusta kuvaavasti, on tärkeää nimenomaan (ja vain) koodia lukevan ihmisen kannalta. Ohjelman suoritus on normaalisti (virheettömänä) täysin näkymätöntä. Siksi tarvitaan tulostuksia, jotta saisimme käsityksen siitä, mitä ohjelmassa tapahtuu mitä paremmat tulostukset, sitä parempi käsitys.
Erilaisia muuttujia public class Mursu { private String nimi; private int nopeus; public Mursu(String nimi, int nopeus) { this.nimi = nimi; this.nopeus = nopeus; attribuutit määrittävät olion tilan eli ominaisuuksien arvot parametrit antavat metodille sen suorituksen kannalta tarpeelliset lähtötiedot apumuuttujat mahdollistavat jonkin arvon muistamisen niin kauan kuin sitä tarvitaan public double liiku(double aika) { double matka = aika * this.nopeus; System.out.println(nimi + lyllersi + matka + km. ); return matka;
sijoitusoperaattori (ei yhtäsuuruusmerkki!) Sijoituslause int luku = (5 + 4) * 8-7; Luetaan oikealta vasemmalle. 1. Selvitetään oikeanpuoleisen lausekkeen arvo. 2. Sijoitetaan tämä arvo vasemmalla puolella mainittuun muuttujaan. laskuri = laskuri + 1; 2. Sijoitetaan tämä arvo laskurin uudeksi arvoksi. 1. Lasketaan yhteen laskurin nykyinen arvo ja yksi.
Palauttaminen vs. tulostaminen Metodi, joka palauttaa tekstin böö : Metodi, joka tulostaa tekstin böö : paluuarvon tyyppi ei palauta mitään public String palautaböö() { return böö ; public void tulostaböö() { System.out.println( böö ); antaa palautettavan arvon käyttöön sille, joka metodia kutsui tuottaa tekstin näytölle String bööteksti = palautaböö(); böö System.out.println(bööTeksti);
Attribuutit Oliokohtaiset Luokan yksittäisen ilmentymän eli olion ominaisuudet. Määrittelevät olion tilan. Yleensä yksityisiä, eli vain oliolla itsellään on suora pääsy käsiksi attribuuttien arvoihin. Luokkakohtaiset (static) Ominaisuuksia, jotka ovat kaikkien luokasta luotujen olioiden yhteisessä käytössä. Usein julkisia, eli kuka tahansa näkee nämä. Yleensä lisäksi vakioita, eli niille asetetaan tietty arvo, jota ei jälkeenpäin pysty muuttamaan. Metodit Luokan yksittäisen ilmentymän eli olion toiminnot, mitä olio osaa. Antavat mahdollisuuden saada tietoja olion tilasta ja muuttaa sitä. (Olion metodien tehtävänä on siis tarjota rajapinta, jonka avulla ulkopuolinenkin voi kysyä ja jopa muokata olion attribuuttien arvoja.) Metodeja, jotka eivät kuulu millekään yksittäiselle oliolle. (Niinpä sana this ei merkitse tällaisessa metodissa mitään.) Pääohjelmametodi on aina tällainen. Jos siellä halutaan testata jotakin yksittäisen olion metodia, tällainen olio pitää ensin luoda ja laittaa talteen johonkin muuttujaan.
Halutaan luoda uusi Pelotteluesine... ominaisuuksien määrä Pelotteluesine private int pelottavuus public Pelotteluesine(String nimi, double paino, int pelottavuus) Esine private String nimi private double paino public Esine(String nimi, double paino) Object public Object() Kun luodaan uutta Pelotteluesinettä, on sille ensin rakennettava yläluokkien määrittelemä perusta alustettava ne ominaisuudet, jotka sille kuuluvat 1) Objectina ja 2) Esineenä. public Pelotteluesine(String nimi, double paino, int pelottavuus) { super(nimi, paino); this.pelottavuus = pelottavuus; public Esine(String nimi, double paino) { super(); this.nimi = nimi; this.paino = paino; public Object() {......mutta ennen pelotteluesineen oman pelottavuus-ominaisuuden alustusta on varmistettava, että perustana on oikeaoppinen Esine. Siksi ihan aluksi kutsutaan Esine-luokan luontimetodia......jonka aluksi puolestaan kutsutaan vielä Object-luokan konstruktoria. (Tässä super();ia ei olisi pakko kirjoittaa, koska nyt yläluokan luontimetodille ei tarvitse antaa parametreja. Esineelle sen sijaan täytyi.)