Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

© Jukka Harju, 2005 - 2007 Viittausmuuttujat. © Jukka Harju, 2005 - 20072 Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.

Samankaltaiset esitykset


Esitys aiheesta: "© Jukka Harju, 2005 - 2007 Viittausmuuttujat. © Jukka Harju, 2005 - 20072 Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio."— Esityksen transkriptio:

1 © Jukka Harju, 2005 - 2007 Viittausmuuttujat

2 © Jukka Harju, 2005 - 20072 Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio sijaitsee. •Viittausmuuttuja esitetään usein graafisesti "laatikkona" joka viittaa olioon. •Oliota kuvataan tässä esityksessä pyöristetyllä suorakulmiolla. Oppilas oppilas1 = new Oppilas();

3 © Jukka Harju, 2005 - 2007 null -viittaus •Viittausmuuttujan arvo on null, mikäli se ei viittaa yhteenkään olioon. •Viittausmuuttujan arvoksi voidaan asettaa null, mikäli viittaus halutaan tuhota. oppilas1 = null; •Voidaan myös tarkistaa onko viittausmuuttujan arvona null. Tällöin käytetään aina tavallista yhtäsuuruusvertailua. if (oppilas1 == null) System.out.println ("Virhe");

4 © Jukka Harju, 2005 - 2007 null -viittaus •Attribuuttina oleva viittausmuuttuja alustetaan automaattisesti null -arvoiseksi. •Ohjelmassa tulee aina varmistaa että viittausmuuttuja todella viittaa olioon, eikä sisällä null -arvoa. •Yritys käyttää null -arvoista viittausmuuttujaa johtaa poikkeuksen ( NullPointerException) syntymiseen. •Poikkeus kaataa ohjelman suorituksen, mikäli ohjelmassa ei ole poikkeuskäsittelyä.

5 © Jukka Harju, 2005 - 2007 this -viittaus •this –viittauksella olio voi viitata itseensä: •this -viittauksen käyttö metodissa viittaa olioon jolle metodia on kutsuttu. •Toteutetaan metodi nimeltä lisaaOpintosuoritus, jossa käytetään this -viittausta. public class Oppilas{ private double opintopisteet; private Vector opintosuoritukset;... public void lisaaOpintosuoritus(Suoritus opintosuoritus) { this.opintopisteet += opintosuoritus.getOpintopisteet(); this.opintosuoritukset.add(opintosuoritus); }... }

6 © Jukka Harju, 2005 - 2007 this -viittaus •Kun lisaaOpintosuoritus -metodia kutsutaan seuraavasti, viittaa metodissa oleva this -viittaus olioon oppilas1. oppilas1.lisaaOpintosuoritus(suoritus); •Seuraavassa kutsussa metodissa oleva this -viittaus taas viittaa olioon oppilas2 : oppilas2.lisaaOpintosuoritus(suoritus); opintopisteet opintosuoritukset lisaaOpintosuoritus oppilas1 opintopisteet opintosuoritukset oppilas2 lisaaOpintosuoritus

7 © Jukka Harju, 2005 - 2007 this -viittaus •this -viittauksella pystytään erottamaan attribuutit saman nimisistä paikallisista muuttujista. •Myös parametrimuuttuja on paikallinen muuttuja. public class Oppilas { private String nimi; private int numero; private double opintopisteet; public Oppilas(String nimi, int numero, double opintopisteet) { this.nimi = nimi; this.numero = numero; this.opintopisteet = opintopisteet; }... }

8 © Jukka Harju, 2005 - 20078 Sijoittaminen •Sijoittamisessa kopioidaan lähdemuuttujan arvo kohdemuuttujaan. •Lähdemuuttujan arvo ei muutu sijoittamisessa. •Esim int -primitiivityypille: int luku1 = 10, luku2 = 6; luku2 = luku1; kohdemuuttuja lähdemuuttuja Alkutilanne luku1 10 luku2 6 Tilanne sijoituksen jälkeen luku1 10 luku2 10

9 © Jukka Harju, 2005 - 20079 Viittaukset & sijoittaminen •Myös viittausmuuttujille sijoittamisessa kopioidaan lähdemuuttujan arvo kohdemuuttujaan. •Viittausmuuttuja sisältää tiedot missä muistipaikassa olio sijaitsee, käytännössä sijoittamisessa kopioidaan tämän muistipaikan ilmaiseva arvo. oppilas2 = oppilas1; Alkutilanne oppilas1oppilas2 Tilanne sijoituksen jälkeen oppilas1oppilas2 nimi = ”Tero Tietäväinen" nimi = "Pertti Pöntinen" nimi = ”Tero Tietäväinen" nimi = "Pertti Pöntinen"

10 © Jukka Harju, 2005 - 200710 Viittausmuuttujat •Samaan olioon voidaan viitata useamman kuin yhden viittausmuuttujan kautta  oliolle voidaan kutsua metodeja useamman kuin yhden viittausmuuttujan kautta. •Useiden viittausmuuttujien käytössä on oltava huolellinen: •Mikäli oppilaan nimi muutetaan viittausmuuttujan oppilas1 - kautta, näkyy muutettu nimi myös viittausmuuttujan oppilas2 - kautta. •Voidaan joutua tilanteeseen jossa käytännössä pitäisikin olla kaksi oliota sen sijaan että viitataan yhteen olioon kahden eri viittausmuuttujan kautta.

11 © Jukka Harju, 2005 - 2007 Olioiden vertaaminen •Operaattorilla == voidaan verrata osoittavatko kaksi viittausmuuttujaa samaan olioon •Operaattori palauttaa arvon true, mikäli muuttujat viittaavat samaan olioon. if(oppilas1 == oppilas2) { System.out.println("Muuttujat oppilas1 ja oppilas2 viittaavat samaan olioon."); } •Kaikki luokat perivät equals -nimisen metodin Object - kantaluokalta. •Peritty equals -metodi toimii kuten == -operaattori.

12 © Jukka Harju, 2005 - 2007 Olioiden vertaaminen •Yleensä equals -metodi tarvitsee korvata aliluokassa, jotta sen toiminta saadaan järkeväksi. public class Oppilas { private String nimi; private int numero; public boolean equals(Oppilas verrattava) { boolean paluuarvo; if(this.nimi.equals(verrattava.nimi) && this.numero==verrattava.numero) { paluuarvo = true; } else { paluuarvo = false; } return paluuarvo; }... } •Kutsuvassa ohjelmassa: if (oppilas1.equals(oppilas2)) { System.out.println("Oppilas1- ja oppilas2-muuttujat viittaavat olioihin jotka sisältävät samat nimi- ja numero-tiedot"); }

13 © Jukka Harju, 2005 - 200713 Roskienkeruu •Kun olioon ei enää viitata mistään viittausmuuttujasta, ei oliota enää pystytä ohjelmassa käsittelemään. •Olion säilyttäminen muistissa on tällöin turhaa. •Java suorittaa automaattisen roskienkeruun tietyin väliajoin, jolloin "irralliset" oliot tuhotaan muistista. •Useimmissa muissa ohjelmointikielissä ohjelmoija on itse vastuussa ohjelman varaaman muistin vapauttamisesta. •Javan roskienkeruuta pystyy kutsumaan "pakotetusti" komennolla System.gc().

14 © Jukka Harju, 2005 - 2007 Olio parametrina •Parametrit ovat Javassa ns. arvoparametreja: •Parametrina annettava muuttujan arvo kopioidaan kutsuttavan metodin paikalliseen muuttujaan. •Parametrien välityksessä tapahtuu siis sijoittamisia. •Kun parametrina välitetään olio, sijoitetaan parametrina annetun muuttujan sisältämä viittausarvo metodin paikalliseen muuttujaan. public class Oppilas { private double opintopisteet; private ArrayList opintosuoritukset;... public void lisaaOpintosuoritus(Suoritus opintosuoritus){ this.opintopisteet += opintosuoritus.getOpintopisteet(); this.opintosuoritukset.add(opintosuoritus); }... } •Kutsuvassa ohjelmassa: Suoritus ict02d = new Suoritus("Ohjelmointitaito","ict02d",12.0,5); oppilas1.lisaaOpintosuoritus(ict02d);

15 © Jukka Harju, 2005 - 2007 Olio parametrina Kutsuva ohjelmaKutsuttava metodi nimi = "Ohjelmointitaito" tunnus = "ict02d" laajuus = 12.0 arvosana = 5 ict02d opintosuoritus metodin kutsussa tapahtuu sijoitus

16 © Jukka Harju, 2005 - 2007 Olio parametrina •Kun oliota, johon saatiin viittaus parametrina, käsitellään metodissa (esim. muutetaan olion attribuutin arvoa), näkyy muutos kutsuneelle ohjelmalle. •Jos sen sijaan parametrina saatua viittausarvoa muutetaan kutsutussa metodissa, eli asetetaan viittaus osoittamaan toiseen olioon, ei tämä näy millään tapaa kutsuneelle ohjelmalle.

17 © Jukka Harju, 2005 - 2007 Olio paluuarvona •Metodi voi palauttaa viittauksen olioon. •Paluuarvon tyyppi on tällöin sen luokan nimi, josta olio on luotu. •Palautettu viittaus on otettava kutsuneessa ohjelmassa talteen sijoituksella. public class Oppilas { private double opintopisteet; private Vector opintosuoritukset;... public Suoritus haeSuoritus(int jarjestys) { Suoritus paluuarvo = null; if(jarjestys<opintosuoritukset.size()) { paluuarvo =(Suoritus)opintosuoritukset.elementAt(jarjestys); } return paluuarvo; }... } •Kutsuvassa ohjelmassa Suoritus haettu = oppilas1.haeSuoritus(5);

18 © Jukka Harju, 2005 - 2007 Viittausmuuttuja taulukon alkion tyyppinä •Taulukon alkion tyyppinä voi Javassa olla mikä tahansa luokka. •Taulukon alkio on tällöin viittausmuuttuja, joka voi sisältää viitteen ko luokan tai minkä tahansa sen aliluokan olioon. •Mikäli alkion tyyppinä on Object, voi alkio viitata minkä tahansa luokan olioon. Object[] taulukko = new Object[5]; taulukko

19 © Jukka Harju, 2005 - 2007 Viittausmuuttuja linkitetyn listan sisältönä •ArrayList iin voi tallettaa viittauksia minkä tahansa luokan olioon. •ArrayList in solmu sisältää tällöin viittauksen datana olevaan olioon. ArrayList[] lista = new ArrayList(); alkuloppu


Lataa ppt "© Jukka Harju, 2005 - 2007 Viittausmuuttujat. © Jukka Harju, 2005 - 20072 Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio."

Samankaltaiset esitykset


Iklan oleh Google