19. Olio-ohjelmointia Javalla 19.1

Samankaltaiset tiedostot
Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

1. Omat operaatiot 1.1

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

2. Olio-ohjelmoinista lyhyesti 2.1

4. Olio-ohjelmoinista lyhyesti 4.1

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä

Oliot viestivät metodeja kutsuen

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

4. Luokan testaus ja käyttö olion kautta 4.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Sisällys. 15. Lohkot. Lohkot. Lohkot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

9. Periytyminen Javassa 9.1

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olio-ohjelmointi Javalla

7. Oliot ja viitteet 7.1

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

9. Periytyminen Javassa 9.1

Sisällys. 16. Lohkot. Lohkot. Lohkot

Java-kielen perusteet

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1

Javan perusteita. Janne Käki

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

7. Näytölle tulostaminen 7.1

12. Javan toistorakenteet 12.1

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Mikä yhteyssuhde on?

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Metodien tekeminen Javalla

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Luokat ja oliot. Ville Sundberg

Taulukot. Jukka Harju, Jukka Juslin

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

12. Näppäimistöltä lukeminen 12.1

14. Hyvä ohjelmointitapa 14.1

Java-kielen perusteet

Pakkauksen kokoaminen

15. Ohjelmoinnin tekniikkaa 15.1

ITKP102 Ohjelmointi 1 (6 op)

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

8. Näppäimistöltä lukeminen 8.1

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

11. Javan toistorakenteet 11.1

14. Poikkeukset 14.1

12. Javan toistorakenteet 12.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

ITKP102 Ohjelmointi 1 (6 op)

15. Ohjelmoinnin tekniikkaa 15.1

8. Näppäimistöltä lukeminen 8.1

Harjoitus 4 (viikko 47)

Ohjelmoinnin jatkokurssi, kurssikoe

Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Ta

11. Javan valintarakenteet 11.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Java-kielen perusteet

Ohjelmointi 2 / 2010 Välikoe / 26.3

13. Hyvä ohjelmointitapa (osa 1) 13.1

Harjoitus 2 (viikko 45)

public static void main (String [] args)

ITKP102 Ohjelmointi 1 (6 op)

Listarakenne (ArrayList-luokka)

Harjoitus 5 (viikko 48)

Rajapinta (interface)

11. Javan valintarakenteet 11.1

Pakkauksen kokoaminen

17. Javan omat luokat 17.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Java-kielen perusteita

12. Monimuotoisuus 12.1

14. Poikkeukset 14.1

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

KOHDELUOKAN MÄÄRITTELY

Tietueet. Tietueiden määrittely

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

11/20: Konepelti auki

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

16. Javan omat luokat 16.1

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Olio-ohjelmointi Syntaksikokoelma

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

ITKP102 Ohjelmointi 1 (6 op)

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Java kahdessa tunnissa. Jyry Suvilehto

Transkriptio:

19. Olio-ohjelmointia Javalla 19.1

Sisällys Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit ja paluuarvo. Metodin kutsuminen yleisesti. Attribuutit. Rakentajat. 19.2

Yleistä Olio-ohjelmointia käsitellään hyvin yleisellä tasolla: Tarkastellaan vain yhtä luokkaa. Attribuutit sivuutetaan maininnalla. Keskitytään metodeihin. Aihepiiriin palataan tarkemmin kolmannessa periodissa järjestettävällä Olio-ohjelmoinnin perusteet (Oope, 5 op) -kurssilla. 19.3

Olioiden esittely ja alustus Javan oliot eivät ole oliotyyppiä vaan viitetyyppisiä (tarkemmin luokkatyyppisiä) muuttujia. Luokkatyyppisiä muuttujia ei voi yleensä ottaen käsitellä kuten alkeistietotyyppisiä muuttujia. Viite osoittaa jonkin muistipaikan kautta varsinaiseen dataan keskusmuistissa. Tästä syystä luokkatyyppisen muuttujan esittely varaa muistia vain viitteen tallentamiseen, ei olion tietojen tallentamiseen. 19.4

Olioiden esittely ja alustus Olion tarvitsema muistitilavaraus tehdään alustuksen yhteydessä new-operaatiolla, joka palauttaa viitteen ja varaa keskusmuistista yhtenäisen muistialueen olion datalle. Yleisesti: tai LuokanNimi olionnimi; olionnimi = new LuokanNimi(); LuokanNimi olionnimi = new LuokanNimi(); 19.5

Olion luominen Koira teukka = null; teukka null Olion viitteen esittely ja alustaminen tyhjäksi. teukka = new Koira(); teukka olio olio Lauseke new Koira(); luo olion ja palauttaa paluuarvona olioon liittyvän tunnuksettoman viitteen. Sijoituksen seurauksena teukka-viite viittaa samaan olioon kuin paluuarvona saatu viite. 19.6

Yleistä metodeista Metodi (method) on luokkaan ohjelmoitu operaatio. Metodi eristää jonkin luokan osan nimettyyn lohkoon. Metodia kutsutaan luokan ulkopuolelta metodin nimellä, pistenotaatiota käyttäen. Metodin tunnistaa suluista. Metodille voidaan tarjota tietoja eli parametreja. Esim. System.out.println("Moikka!"); int luku = In.readInt(); 19.7

Yleistä metodeista Metodikutsun kohdalla ohjelman suoritus siirtyy metodiin, josta palataan kutsukohtaa seuraavaan ohjelman vaiheeseen. Metodi voi muiden tekemiensä asioiden lisäksi palauttaa arvon. Metodin lohkossa esitellyt tunnukset eivät näy metodin ulkopuolelle. Metoditkaan eivät välttämättä näy luokan ulkopuolelle. 19.8

Mihin metodeja tarvitaan? Ohjelmassa toistuva toiminnallisuus voidaan sijoittaa metodiin, jolloin koodia ei tarvitse monistaa eri paikkoihin ja samalla koodin ylläpito helpottuu. Metodeilla pitkä ohjelma voidaan jakaa palasiin, jolloin koodia voi helpommin hallita, ymmärtää ja ylläpitää. (Modulaarinen ohjelmointi.) Mahdollistavat tiedonkätkennän. 19.9

Metodien määrittely Koostuu otsikkosta (signature) ja rungosta (body): // Otsikossa määreitä, metodin nimi ja parametrilista. määreet nimi(parametrilista) { // Runko on koottu lause (lohko), joka kirjoitetaan // luokkamäärittelyn sisään aina sulkeita käyttäen. Määreillä otetaan kantaa metodin näkyvyyteen ja sen mahdollisesti palauttamiin tietoihin. Parametrilista määrittelee metodille välitettävät tiedot. Lista pilkuin erotettuja parametrimäärittelyjä. Pelkillä suluilla ilmaistaan ettei metodille välitetä tietoja. 19.10

Metodien määrittely /* Tervehditään ohjelman käyttäjää. */ public static void tulostatervehdys() { /* Korottaa kantaluvun a potenssiin b. */ public static int laskepotenssi(int a, int b) { Parametrit ovat metodin lohkon tunnuksia: Nimetään ja esitellään kuten muuttujat. Toisinaan käytetään lyhyitä tunnuksia, koska parametreista kerrotaan otsikkoon liittyvässä kommentissa. Mikäli parametrilla ja metodin muuttujalla on sama nimi, tapahtuu nimikonflikti, eikä ohjelma käänny. 19.11

Metodien määrittely Metodin tyyppi voi olla mikä tahansa Javan tietotyyppi, jolloin metodi palauttaa arvon. void-määre tarkoittaa ettei paluuarvoa ole. Yleisimmät näkyvyysmääreet private ja public sopivat attribuuttien, metodien ja luokkien näkyvyyden asettamiseen. private-määritelty metodi (tai attribuutti) on yksityinen eli sitä voi käyttää vain luokan omissa metodeissa. public-määritelty metodi (tai attribuutti) ovat julkisia. Sitä voidaan käyttää pistenotaatiolla myös luokan ulkopuolelta. Yleensä metodit ovat julkisia ja attribuutit yksityisiä, jotta tiedonkätkennän periaate toteutuisi. 19.12

HelloWorld-ohjelma Jatketaan HelloWorld-ohjelman analyysiä. Aikaisemmilta luennoilta muistetaan, että ajokelpoisessa Java-ohjelmassa on oltava mainoperaatio eli niin sanottu pääohjelmametodi, main-metodin otsikon on oltava aina tietyn muotoinen, jotta ohjelman suoritus onnistuisi, main-metodi sijaitsee luokkamäärittelyn sisässä, main-metodin lohko sijaitsee luokan lohkon sisässä. 19.13

HelloWorld-ohjelma public class HelloWorld { Nimi public static void main (String[] args) { System.out.println("Hello World!"); Määreet main-metodi on julkinen (public) eikä sillä ole paluuarvoa (void). main-metodia kutsutaan automaattisesti. Tästä nimitys pääohjelmametodi. Parametri(t) 19.14

Omat metodit: nimeäminen Metodit kuvaavat toimintoja tunnukset usein käskymuotoisia verbejä. Esim. public void hauku(string s) { public static void sayhello() { Tunnukset yleensä muuttujien tunnuksia pitempiä. Tunnus aloitetaan pienellä alkukirjaimella. Useasta sanasta koostuvassa tunnuksessa ensimmäinen sana pienellä ja muut isolla alkukirjaimella. (Yhdyssanat ovat poikkeus.) 19.15

Omat metodit: sayhello-metodi /* Tervehditään maailmaa * englanniksi. Huomaa static- * määre metodin otsikossa. */ public static void sayhello() { // Tekstiä näytölle. System.out.println("Hello World!"); Ennen oman metodin otsikkoa kirjoitetaan aina yleisluonteinen kommentti metodin tarkoituksesta sekä mahdollisista parametreista ja paluuarvoista. Oheinen metodi ei palauta arvoa (void-tyyppi). Metodille ei myöskään voi antaa parametreja (parametrilista on tyhjä). 19.16

Omat metodit: paikka luokassa public class HelloWorld { /* Tervehditään maailmaa englanniksi. */ public static void sayhello() { System.out.println("Hello World!"); public static void main(string[] args) { // Kuinka sayhello voidaan suorittaa? Omat metodit kirjoitetaan Lakikurssilla samaan luokkaan kuin main-metodi. Otsikoihin on siksi muistettava liittää static-määre. Koodi ei käänny, jos static-määre puuttuu. 19.17

Omat metodit: kutsuminen public class HelloWorld { /* Tervehditään maailmaa englanniksi. */ public static void sayhello() { System.out.println("Hello World!"); public static void main(string[] args) { // Metodi suoritetaan metodikutsulla. sayhello(); 19.18

Omat metodit: kutsuminen Metodia kutsuttiin luokan sisällä toisesta metodista nimellä ilman pistenotaatiota. Metodille ei välitetty parametreja: Kutsulause koostuu metodin nimestä ja tyhjistä suluista. Suoritus palasi main-metodiin automaattisesti. Metodi ei palauttanut arvoa (void-tyyppi). Metodi olisi voitu sijoittaa myös main-metodin jälkeen. Metodeja ei siis ole pakko määritellä ennen kuin niitä kutsutaan. 19.19

Omat metodit: parametrit Metodeille välitettävät tiedot määritellään parametrilistan avulla. Esimerkiksi potenssin a b laskevan operaation otsikossa: public static int laskepotenssi(int a, int b) määritellään int-tyyppiset parametrit a ja b. Parametri saa arvonsa metodin kutsun yhteydessä. Oikea määrä oikean tyyppisiä arvoja oikeassa järjestyksessä. Edellä määriteltyä metodia kutsuttaessa on annettava kaksi inttyyppistä arvoa (myös byte- ja short-arvot käyvät) siten, että kantaluku on ensimmäinen arvo ja eksponentti toinen arvo. laskepotenssi(2, 3); // Kaksi potenssiin kolme. laskepotenssi(3, 2); // Kolme potenssiin kaksi. laskepotenssi(2.5, 2); // Virhe, 1. parametriarvo väärää tyyppiä. 19.20

Omat metodit: parametrit Parametriksi voidaan antaa arvo sellaisenaan (literaali), muuttuja, vakio tai lauseke. int kantaluku = 2, eksponentti = 3; laskepotenssi(kantaluku, eksponetti); short i = 10; laskepotenssi(i - 1, i + 1); Java luo parametrille annetusta arvosta kopion ja sijoittaa sen automaattisesti parametrin tunnukseen liittyväksi arvoksi (pass-by-value, call-by-value). Koska metodi käsittelee kopiota, eivät metodin saamaansa arvoon tekemät muutokset välity alkuperäiseen arvoon. 19.21

Omat metodit: parametrit public class HelloWorld { /* Tervehditään maailmaa metodin * kutsujan antamalla viestillä. */ public static void say(string message) { System.out.println(message); public static void main(string[] args) { // Parametrille arvo metodikutsussa. String viesti = "Hello World!"; say(viesti); Otsikossa määritellään, että metodilla on Stringtyyppinen parametri. Metodille annetaan kutsuttaessa Stringtyyppinen muuttuja, jonka arvo "Hello World!" kopioidaan ja sijoitetaan parametrin arvoksi automaattisesti. 19.22

Omat metodit: parametrit Parametrien arvot on syytä tarkistaa metodin aluksi, jos tiedetään arvojen voivan olla virheellisiä, koska näin saadaan aikaiseksi vakaampia ohjelmia. Loogiset operaatiot ovat tarkistuksissa hyvin hyödyllisiä. 19.23

Omat metodit: parametrit /* Tervehditään n (> 0) kertaa. */ public static void sayhello(int n) { // Tarkistuksella vältetään ikuinen silmukka. if (n > 0) // Tulostetaan tervehdyksiä silmukan avulla. for (int i = n; i > 0; i--) System.out.println("Hello World!"); 19.24

Omat metodit: parametrit /* Tulostaa näytölle annetulla merkillä n riviä korkean * ja m saraketta leveän suorakaiteen. */ public static void piirrasuorakaide(int n, int m, char merkki) { int i, j; // Parametrien oltava järkevät, jotta edes yritetään piirtämistä. if (n > 0 && m > 0) for (i = 0; i < n; i++) { // Tulostetaan n riviä. for (j = 0; j < m; j++) // Tulostetaan yksittäinen rivi System.out.print(merkki); // eli m merkkiä. System.out.println(); 19.25

Omat metodit: arvon palauttaminen Metodin tyyppi määrää palauttaako metodi arvon vai ei. void-tyyppinen metodi ei palauta arvoa. Ohjelman suoritus palaa automaattisesti kutsupaikkaan, kun metodin viimeinen lause on suoritettu. Muun tyyppiset metodit palauttavat arvon return-lauseella. return-lause palauttaa ohjelman suorituksen kutsupaikkaan. Yleisesti: return arvo; Paluuarvo voidaan tallentaa normaaliin tapaan muuttujaan. Paluuarvon ja muuttujan tyyppien tulee olla yhteensopivat. 19.26

Omat metodit: arvon palauttaminen Esimerkiksi potenssin a b laskevan operaation otsikossa: public static int laskepotenssi(int a, int b) määritellään metodin tyypiksi int, jolloin metodin on aina palautettava return-lauseella int-tyyppinen arvo. Sijoitetaan eri tavoin kutsutun metodin paluuarvo muuttujaan: int kantaluku = 2, eksponentti = 3; short i = 10; int potenssi = laskepotenssi(2, 3); potenssi = laskepotenssi(kantaluku, eksponetti); potenssi = laskepotenssi(i - 1, i + 1); 19.27

max-metodi /* Palauttaa suurimman luvuista a, b ja c. */ public static int max(int a, int b, int c) { int m; if ((a > b) && (a > c)) m = a; else if (b > c) m = b; else m = c; return m; Parametrilistassa määritellään, että metodille on annettava kolme inttyyppistä arvoa. Arvojen järjestyksellä ei ole väliä. Metodi on int-tyyppinen. Metodissa on oltava arvon palauttava return-lause. 19.28

max-metodi /* Palauttaa suurimman luvuista a, b ja c. */ public static int max(int a, int b, int c) { if ((a > b) && (a > c)) return a; else if (b > c) return b; else return c; Tässä max-metodin versiossa arvo palautetaan jokaisessa päätöshaarassa saman tien. 19.29

max-metodin kutsuja main-metodista public static void main(string[] args) { int k = 1, l = 3, m = 2; // Parametriarvoiksi muuttujien arvot, paluuarvo muuttujaan. int n = max(k, l, m); System.out.println(n); // Parametriarvoina literaaleja ja muuttujan arvo. // Paluuarvo katoaa, koska sitä ei sijoiteta muuttujaan. max(111, 222, l); // Metodin paluuarvo annetaan toisen metodin parametriarvoksi. System.out.println(max(111, 222, 333)); 19.30

Metodin kutsuminen yleisesti Luokan A metodeja voi kutsua kolmella tavalla: 1) Toisesta luokasta A-tyyppisen olion kautta. 2) Toisesta luokasta luokan A nimen avulla. 3) Luokan A toisista metodeista. Kohdissa 1 ja 2 voidaan ajatella abstraktisti, että ympäristöstä lähetetty viesti käynnistää metodin. Käytännössä metodin kutsuminen tapahtuu tutulla pistenotaatiolla. Omia metodeja kutsutaan Lakikurssilla vain kohdan 3 tavalla, koska kutsuminen luokan ulkopuolelta ei onnistu, kun käytettävissä on vain yksi itse kirjoitettu luokka. 19.31

Metodin kutsuminen olion kautta Yleisesti: olio.metodi(parametrit); missä parametrit ovat metodin parametrilistassa annettua tyyppiä olevia arvoja (literaaleja, vakioita, muuttujia jne.). Parametreja ei luonnollisesti anneta, jos metodin parametrilista on tyhjä. Esim. Koira hiski = new Koira(); hiski.hauku("räyh!"); 19.32

Metodin kutsuminen luokan kautta Yleisesti: Luokka.metodi(parametrit); missä parametrit ovat kuten edellä. Metodi on esiteltävä static-määreellä, jotta luokan nimellä kutsuminen onnistuisi. Tällaiset luokkametodit ovat hyödyllisiä, kun kootaan yhteen toimintoja, joiden käyttö sujuvampaa suoraan ilman olion esittelyä ja on tarpeen määritellä koko luokalle yhteisiä vakioita. 19.33

Metodin kutsuminen luokan kautta Luokkametodit ovat tuttuja jo System- ja In-luokkien yhteydestä. Esim. double d = In.readDouble(); System.out.println( Testi ); Luokkametodeista voidaan kutsua vain toisia luokkametodeja. Tästä syystä main-metodin sisältävässä luokassa metodien (ja attribuuttien) esittelyihin on lisättävä static-määre. 19.34

Metodin kutsu lauseena ja lausekkeena Metodikutsu voi esiintyä joko yksittäisenä lauseena tai lausekkeen osana. Esim. System.out.println("Oikein!"); if (In.readInt() < 0) { Paluuarvollisten metodien kutsut ovat lausekelauseita. Esim. int n = max(1, 2, 3); // Lause max(1, 2, 3) + 4; // Lauseke 19.35

Attribuutit Luokan lohkossa esiteltyjä muuttujia tai vakioita. Esitellään lähes samalla tavoin kuin "tavalliset" muuttujat tai vakiot. Lisänä määreet: Yleensä pyritään kätkemään luokan ympäristöltä private-määreellä. Luetaan ja muutetaan aksessorimetodeilla. Käytettävä varoen: näkyvät kaikkiin metodeihin ja rikkovat siten modulaarisuusperiaatetta. (Vakioituja attribuutteja voi käyttää vapaammin.) public class Koira { // Attribuutit. private int luonne; private String rotu; // Aksessorit. public int luonne() { return luonne; // Metodit. public void hauku(string s) { System.out.println(s); 19.36

Rakentajat Attribuuttien arvot alustetaan luokan rakentajassa (constructor), jonka nimi on aina sama kuin luokan nimi. Rakentajalla ei ole tyyppiä. Kutsu yleisesti: - Oletusrakentaja LuokanNimi(); tai - Parametrillinen rakentaja LuokanNimi(parametrit); Rakentajaa kutsutaan aina, kun luodaan olio. Esim. Koira hiski = new Koira(); 19.37

Rakentajat Java luo automaattisesti tyhjän oletusrakentajan. Itse kirjoitetulle luokalle voidaan luonnollisesti kirjoittaa myös rakentaja. Entä jos olisi tarvetta sekä parametrittomalle oletusrakentajalle että parametriselle rakentajalle? Javassa on kuormittamisena (overloading) tunnettu mekanismi, joka sallii samannimisten metodien esittelyn ja siten myös samannimisen rakentajien esittelyn. 19.38