3. Staattisuus

Staattisuus

Staattinen muuttuja tai metodi on käytettävissä ilman, että luokasta luodaan olio. Staattisuuden ilmaisee sana static ennen muuttujan tai metodin nimeä.

Pääluokka

Ohjelman pääluokan muuttujat ja metodit ovat staattisia:

public class Main {
    private static String viesti = "Hei hei!";

    private static void tervehdi() {
	System.out.println(viesti);
    }

    public static void main(String[] args) {
	tervehdi();
    }
}

Kirjasto

Kirjasto sisältää staattisia metodeja, joita kutsutaan muualta ohjelmasta. Esimerkki tällaisesta luokasta on Javan valmis Math, joka sisältää matemaattisia funktioita.

Seuraava luokka Listat sisältää metodeita listan käsittelyyn:

import java.util.*;

public class Listat {
    public static int laskeMaara(ArrayList<Integer> luvut) {
	return luvut.size();
    }

    public static int laskeSumma(ArrayList<Integer> luvut) {
	int summa = 0;
	for (int luku : luvut) {
	    summa += luku;
	}
	return summa;
    }

    public static double laskeKeskiarvo(ArrayList<Integer> luvut) {
	return (double)laskeSumma(luvut) / laskeMaara(luvut);
    }
}

Luokkaa voisi käyttää muualla koodissa seuraavasti:

ArrayList<Integer> lista = new ArrayList<Integer>();
lista.add(8);
lista.add(2);
lista.add(5);
lista.add(9);
lista.add(2);
System.out.println(Listat.laskeMaara(lista));
System.out.println(Listat.laskeSumma(lista));
System.out.println(Listat.laskeKeskiarvo(lista));

Koodin tulostus on seuraava:

5
26
5.2

Huomaa luokan nimi Listat ennen metodien nimiä.

Esimerkki: Tunnusnumerot

Luokassa oleva staattinen muuttuja on yhteinen kaikille luokasta luoduille olioille.

Seuraavassa esimerkissä jokainen uusi olio saa yksilöllisen tunnusnumeron. Tämän mahdollistaa luokassa oleva staattinen muuttuja yhteinenLaskuri, jonka arvo kasvaa jokaisen olion luonnin jälkeen.

public class LaskuriOlio {
    private static int yhteinenLaskuri = 0;
    private int omaTunnus;

    public LaskuriOlio() {
	omaTunnus = yhteinenLaskuri;
	yhteinenLaskuri++;
    }

    public void tervehdi() {
	System.out.println("Hei, minun tunnukseni on " + omaTunnus);
    }
}

Luokan toimintaa havainnollistaa seuraava koodi:

LaskuriOlio eka = new LaskuriOlio();
LaskuriOlio toka = new LaskuriOlio();
LaskuriOlio kolmas = new LaskuriOlio();
eka.tervehdi();
toka.tervehdi();
kolmas.tervehdi();

Koodin tulostus on seuraava:

Hei, minun tunnukseni on 0
Hei, minun tunnukseni on 1
Hei, minun tunnukseni on 2