javan perusteet 2004
DESCRIPTION
Javan perusteet 2004. 1,5 ov Kuopion yliopisto, tietojenkäsittelytieteen laitos Ohjelmistotekniikan maisterikoulutus, Varkaus Tomi Keinonen [email protected]. Kurssin suoritus. Luennot 18 h Harjoitukset 4 krt Lopputentti tai harjoitustyö Harjoituksista jaettavat hyvityspisteet - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/1.jpg)
1
Javan perusteet 2004
1,5 ovKuopion yliopisto, tietojenkäsittelytieteen laitosOhjelmistotekniikan maisterikoulutus, Varkaus
Tomi [email protected]
![Page 2: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/2.jpg)
2
Kurssin suoritus
Luennot 18 h Harjoitukset 4 krt Lopputentti tai harjoitustyö Harjoituksista jaettavat
hyvityspisteet 75 % - 100 % +2 arvosanaa 50 % - 75 % +1 arvosana 25 % - 50 % ei vaikutusta 0 % - 25 % -1 arvosana
![Page 3: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/3.jpg)
3
Kurssimateriaali
Verkkosivuthttp://www.cs.uku.fi/~tkeinone/java2004/
Kurssi pohjautuu kirjaanMorelli, Ralph: Java, Java, Java! : Object-Oriented Problem Solving1. painos: 2000, ISBN 0-13-011332-82. painos: 2002, ISBN 0-13-033370-0
Kurssikirjan hankinta ei välttämätöntä, mutta varsin suotavaa
![Page 4: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/4.jpg)
4
Kurssin aikataulu
7.10.2004 16:45-19:45 Luennot 1-4
23.10.2004 9:00-10:30 Harjoitukset 1
B231
C1004TK
To
La
23.10.2004 11:00-14:00 Luennot 5-8 B231La
Harjoitustehtävien 2 palautus sähköpostitse ma 8.11. klo 18 mennessä
9.11.2004 16:45-19:45 Luennot 9-12 B231Ti
Harjoitustehtävien 3 palautus sähköpostitse ti 23.11. klo 18 mennessä
24.11.2004 16:45-19:45 Luennot 13-16 B231Ke
Harjoitustehtävien 4 palautus sähköpostitse ke 8.12. klo 18 mennessä
9.12.2004 16:45-19:45 Tentti B231)(To
15.12.2004 16:45-18:15 Luennot 17-18 B231Ke
(Harjoitustyön palautus sähköpostitse pe 10.12. klo 18 mennessä)
Jompi kumpi,sovitaan kurssilla
![Page 5: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/5.jpg)
5
Harjoitukset
Tehtävät nettisivulla Ensimmäiset harjoitukset mikroluokassa
Ohjelmalliset ratkaisut mukaan esim. levykkeellä
Harjoitukset 2-4 palautetaan sähköpostina Ratkaisujen ohjelmakoodit liitetiedostoina Mahdolliset kuvat GIF- tai JPEG-muotoisina Osanottajien määrästä riippuen lyhyt palaute
ratkaisusta paluupostina Ratkaisujen ei tarvitse olla täydellisiä
![Page 6: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/6.jpg)
6
Kurssin sisältö
Java-kieli Luokat ja
oliot
Ehdotja toisto
Aritmetiikka
Taulukot
Metodit
Rekursio
J2SE API
Poikkeukset
Tiedostot
Java 2 Platform,Standard Edition 1.4.2
![Page 7: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/7.jpg)
7
Java JAVA:sta on useita eri versioita erilaisiin käyttötarkoituksiin
J2SE: Yleisin Java-alusta, joihin perussovellukset pohjautuvat J2EE: Palvelinsovellusten kehittämiseen tarkoitettu alusta,
sisältää kaikki J2SE:n ominaisuudet J2ME: Typistetyin ominaisuuksin kämmenlaitteisiin tarkoitettu
alusta
Kurssilla käsiteltävät perustoiminnot kaikissa Java-alustoissa samat. Eroavaisuudet lähinnä alustan luokkakirjastoissa.
StandardEdition (SE)
EnterpriseEdition (EE)
MobileEdition (ME)
![Page 8: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/8.jpg)
8
Ympäristö Ei käyttöjärjestelmäriippuvuutta
Sunin J2SE SDK, versio 1.4.2http://java.sun.com/
Lähdekoodi suositellaan kirjoitettavaksi jollakin tekstieditorilla:http://www.jcreator.com/ (ilmainen LE)
![Page 9: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/9.jpg)
9
Oliot ja luokat
Olio on luokan ilmentymä, jolla on tila ja käyttäytyminen.
Luokan ja olion erot?UML-luokkakaavio.
![Page 10: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/10.jpg)
10
Oliot ja luokat
Olio on yleinen käsite, jolla on tila käyttäytyminen
Jokaisella oliolla on yksikäsitteisesti määritelty luokka, johon se kuuluu
Olion tila talletetaan attribuutteihin ja käyttäytyminen toteutetaan metodeilla
![Page 11: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/11.jpg)
11
Oliot ja luokat
Maitopurkki
Jääkaappi
Tomaatti
Omena
File
Timestamp
Duration
User
![Page 12: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/12.jpg)
12
Oliot ohjelmissa
Olio-ohjelmointikieliä: Java, C++, Oberon 2, Smalltalk, Eiffel
Java puhdas olio-ohjelmointikieli Ohjelmistokehittäjä rakentaa
tarvittavat luokat vaatimusten ja suunnitelmien perusteella
![Page 13: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/13.jpg)
13
Olio-ohjelmointi - periaatteita Hajoita ja hallitse Kapselointi Rajapinnat Tiedon piilottaminen Yleiskäyttöisyys Laajennettavuus
![Page 14: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/14.jpg)
14
Miksi luokat? Luokat suunnitellaan ja testataan
hyvin (hyvä laatu) Luokkia uudelleenkäytetään ja
peritään (kehityksen nopeus) Väärän käytön estäminen
(ohjelmoijan virheiden vähentäminen)
Asiakokonaisuudet erillään(selkeys ja ymmärrettävyys)
![Page 15: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/15.jpg)
15
Luokan ja olion erotLuokka määrittelee attribuutit
ja metodit ohjelmoijan tekemä ei ole olemassa ajon
aikana kuin oliomuodossa
kiinteä ajon aikana, ei voida muuttaa ohjelman pyöriessä
nimetty luokan nimen mukaan
Olio on luotu jostakin
luokasta on olemassa vain ajon
aikana täytyy määritellä ja
luoda ohjelmassa sisältää attribuutteja
ja metodeja, joita voidaan suorittaa ohjelmasta
nimetty muuttujaksi
![Page 16: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/16.jpg)
16
UML-luokkakaavio Universal Modeling
Language Luokasta kuvataan
Nimi Attribuutit Metodit
Yleisesti käytetty standardisoitu kuvaustapa
Kommentteja voidaan laittaa « » -merkkien väliin
DirectorSimpleWindow window
GrayCircle circle
«constructor»
Director()
![Page 17: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/17.jpg)
17
Metodikutsut Metodikutsut
olio.metodi();
Esimerkkejäpen.moveForward();
pen.turnClockwise();
pen.draw();
DrawingTool
«constructor» DrawingTool()
«update» void moveForward() void turnClockwise() void dontDraw() void draw()
![Page 18: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/18.jpg)
18
Attribuutit (luokan muuttujat) Jokaisella luokan attribuuttilla on määritelty
näkyvyysalue (scope) private protected public
Attribuuttien nimien tulee olla yksilöllisiä Esimerkki
private DrawingTool pencil;
private DrawingTool pen;
![Page 19: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/19.jpg)
19
Nimeämiskäytännöt Java-kielessä Luokkien, metodien ja attribuuttien
nimissä (identifiers) on rajoitteita alkaa kirjaimella a-z tai A-Z, jonka
jälkeen voi olla numeroita tai kirjaimia, mutta ei erikoismerkkejä
isot ja pienet kirjaimet eri merkkejä nimeäminen kannattaa tehdä kuvaavasti eri käytäntöjä olemassa, yhtenäisyys
ohjelman sisällä kannattaa säilyttää
![Page 20: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/20.jpg)
20
Nimeämiskäytännöt - esimerkki
Luokkien nimet: DrawingTool Luokan metodit: drawLine Attribuutit: pencilColor Muuttujat metodien sisällä: pencilColor Sun:n suositukset:
http://java.sun.com/docs/codeconv/
![Page 21: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/21.jpg)
21
Ensimmäinen Java-ohjelma
Lähdekoodista ohjelmaksiEnsimmäinen ohjelma
![Page 22: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/22.jpg)
22
Lähdekoodista ohjelmaksi
Tekstieditori
Kääntäjä
Virtuaalikone(JRE)
Lähdekoodi(*.java)
Tavukoodi(*.class)
1
2
3
4
5
Suunnitelmasta lähdekoodiksi Jokainen luokka kirjoitetaan omaan
lähdekooditiedostoon. Esimerkiksi luokka Director kirjoitetaan tiedostoon Director.java
Koodia selkeyttämään käytetään sisennyksiä, kommentteja ja yhtenäistä nimeämiskäytäntöä.
Isot ja pienet kirjaimet tarkoittavat eri asiaa.
Luokkien ja niissä olevien metodien kokoa pyritään rajoittamaan. Suuret luokat ja pitkät metodit kannattaa jakaa pienempiin osiin.
![Page 23: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/23.jpg)
23
Lähdekoodista ohjelmaksi
Tekstieditori
Kääntäjä
Virtuaalikone(JRE)
Lähdekoodi(*.java)
Tavukoodi(*.class)
1
2
3
4
5
Lähdekoodista tavukoodiksi Kääntäjä kääntää lähdekoodin
JRE:n ymmärtämäksi tavukoodiksi (javac tiedosto).
Kääntäjä tarkastaa lähdekoodin oikeellisuuden ja pysähtyy virheeseen, mikäli lähdekoodia ei voida kääntää.
Onnistunut käännös tuottaa .class-päätteisen tavukooditiedoston jokaisesta lähdekooditiedostosta.
Ohjelmoija ei muokkaa tavukoodia, vaan muutokset tehdään aina lähdekoodiin.
![Page 24: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/24.jpg)
24
Lähdekoodista ohjelmaksi
Tekstieditori
Kääntäjä
Virtuaalikone(JRE)
Lähdekoodi(*.java)
Tavukoodi(*.class)
1
2
3
4
5
Tavukoodin suorittaminen Tavukoodia ei ole konekieltä eli
sitä ei voida suorittaa suoraan prosessorilla. Suorittamiseen käytetään Java-virtuaalikonetta (Java VM, JRE). (java luokannimi)
Samaa tavukoodia voidaan suorittaa missä tahansa laiteympäristössä, mihin on saatavilla Java VM.
Ohjelmassa olevat loogiset virheet ilmenevät vasta ajon aikana.
Virheitä vähennetään ja tutkitaan testauksella ja debuggauksella.
![Page 25: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/25.jpg)
25
Ensimmäinen ohjelmapublic class HelloWorld {
public static void main(String[] args) {System.out.println("Hello World!");
}
}
![Page 26: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/26.jpg)
26
Koodin kääntäminen ja ajaminen Yksittäisen MyClass.java-tiedoston
kääntäminen onnistuu:javac MyClass.java
Käännöksen jälkeen ajaminen:java MyClass
Ajamisen yhteydessä voidaan välittää komentoriviparametreja:java MyClass parametri1 parameteri2 ...
![Page 27: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/27.jpg)
27
Kommentit Kommentteja voi koodiin laittaa
kahdella tavalla:// yksirivinen kommentti
/*
Monirivinen
kommentti
*/
Sopivat kommentit selkeyttävät koodia
![Page 28: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/28.jpg)
28
Ohjelma? Hyvä ohjelma toteutuksen
näkökulmasta? Toimii halutusti normaalien käyttötapausten
lisäksi myös erikoistapauksissa Rakenne on selkeä ja ymmärrettävä Hyödynnetty mahdollisuuksien mukaan
olemassaolevia valmiita luokkia/luokkakirjastoja
Koodi uudelleenkäytettävää Riittävä kommentointi
![Page 29: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/29.jpg)
29
Perustietotyypit ja aritmetiikka
Kokonaislukutyypit, reaalilukutyypit, kirjaimetPerustietotyyppien ja olioiden erot
Aritmeettiset lausekkeet ja niiden sisäinen suoritusjärjestys
Muunnokset perustietotyypistä toiseenMerkkijono
Math-luokan tarjoamat palvelutVakiot
![Page 30: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/30.jpg)
30
PerustietotyypitKokonaislukutyypit byte (8 bittiä)
(-128- 127) short (16 bittiä)
(-32768- 32767) int (32 bittiä)
(-2147483648- 2147483647)
long (64 bittiä)
Liukulukutyypit float (32 bittiä) double (64 bittiä)
Muut perustietotyypit boolean – totuusarvo
(true/false) char – kirjain
(Unicode)
![Page 31: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/31.jpg)
31
Tietotyyppien kokojärjestys
byte
short
int
long
float
double
char
![Page 32: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/32.jpg)
Kokonaislukutyypin int operaattoritPrefix-operaattorit (int->int)
- vastaluku++ lisäys-- vähennys
Postfix-operaattorit (int->int)++ lisäys-- vähennys
Rajoituksia ++ ja -- (prefix ja
postfix) operaattoreita ei voida kohdistaa vakioille
Aritmeettiset oper. (int*int->int)+ yhteenlasku- vähennyslasku* kertolasku/ jakolasku (kokonaisosa)% jakoläännös (modulo)
Vertailulauseet (int*int->boolean)== yhtäsuuruus!= erisuuruus< pienempi<= pienempi tai yhtäsuuri> suurempi>= suurempi tai yhtäsuuri
Käyttöesimerkkejä
int i = 1;
int k = 2;
++i; // prefix, i=i+1;
int sum = i+k; // aritm. op.
boolean b = i < k; // vertailu
i++; // postfix
boolean complex =
(i++ * 2 > ++k);
![Page 33: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/33.jpg)
Operaattorien lyhennykset
a+=b a=a+ba-=b a=a-ba*=b a=a*ba/=b a=a/b
Käyttöesimerkkejä
int a = 1;
a*=2; // a=a*2; -> a==2
int b = 6;
b+=2; // b=b+2; -> b==8
![Page 34: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/34.jpg)
34
Muunnokset tietotyypistä toiseen Muunnokset numeroarvoisesta tietotyypistä
toiseen tehdään tyypinmuunnoksen kautta Pyöristykset tapahtuvat aina alaspäin Esimerkki:
int i = (int)2.5; // i == 2; Mikäli halutaan pyöristää virallisten
pyöristyssääntöjen mukaan, on 2 vaihtoehtoa: int i = (int)2.5 + 0.5; // i == 3 int i = Math.round(2.5); // i == 3
![Page 35: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/35.jpg)
35
String-luokka String-luokkaa käytetään merkkijonojen
tallentamiseen Vaikka String näyttäisi toimivan kuin
perustietotyyppi, se on kuitenkin luokka String str = ”Esim”; String str = new String(”Esim”); String str(”Esim”);
Luokalla on paljon metodeja merkkijonon käsittelyyn
![Page 36: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/36.jpg)
36
Math-luokan metodeja Math.abs itseisarvo Math.pow potenssi Math.round pyöristys Math.sqrt neliöjuuri Math.random satunnaisluku
0.0-1.0 …
![Page 37: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/37.jpg)
37
Vakiot Vakioita voi määrittää final-
määreellä Vakiomuuttujan arvoa ei voi
muuttaa Esimerkkejä:
final double Math.PI = 3.141592…final int count = 11;
![Page 38: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/38.jpg)
38
Oliot ja luokat
Luokkien tekoKonstruktorit
MetoditMuuttujat, oliot ja roskienkeruu
![Page 39: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/39.jpg)
39
Esimerkkiluokan UML-kaavio
Student
int m_creditCount
String m_nameint m_age
Student()Student(String name)void setName(String name)void setAge(int age)void setCreditCount(int creditCount)
![Page 40: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/40.jpg)
40
Konstruktorit Luokalla voi olla yksi tai useampia
luokan nimisiä metodeja, joita kutsutaan konstruktoreiksi
Konstruktorit voivat erota toisistaan erilaisten parametrien perusteella:public class Student {
Student() { … }
Student(String name) { … }
}
![Page 41: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/41.jpg)
41
Konstruktorit Konstruktoria kutsutaan luotaessa uusi
olio
Student stu1 = new Student();
Student stu2 = new Student(”Pekka”);
![Page 42: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/42.jpg)
42
Metodit
Konstruktorin lisäksi luokalla on yleensä myös muita metodeja
Metodeilla voi myös olla parametreja
Student
int m_creditCount
String m_nameint m_age
Student()Student(String name)void setName(String name)void setAge(int age)void setCreditCount(int creditCount)
![Page 43: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/43.jpg)
43
Metodien parametrit Metodilla voi olla rajoittamaton
määrä parametreja Parametrit määritellään sulkujen
sisässä metodin nimen perässä public void sellCar(Car carToSell, Person currentOwner, Person buyer) { carToSell.check(); buyer.getSignature(); currentOwner.getSignature(); ... }
![Page 44: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/44.jpg)
44
Metodien paluuarvot Metodilla voi olla korkeintaan yksi
paluuarvo Paluuarvon tyyppi määritellään ennen
metodin nimeä:public String getName();
public int getAge(); Metodi ei palauta arvoa, mikäli se
määritellään void-määreellä:public void setAge(int age);
![Page 45: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/45.jpg)
45
Metodien paluuarvot Metodin paluuarvo palautetaan
return-lauseella
public String getName() {
return m_name;
}
![Page 46: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/46.jpg)
46
Metodien määrittely - yhteenveto
Jokainen metodi kuuluu jollekin luokalle
Metodin näkyvyysalue rajaa sen käyttöä
Metodilla voi olla rajoittamaton määrä parametreja
Metodilla voi olla yksi paluuarvo tai ei paluuarvoa ollenkaan (void)
![Page 47: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/47.jpg)
47
Olioiden luonti ja sijoittaminen Oliota ei ole olemassa ennen sen
luontiamuuttuja = new Olio();
EsimerkkiDrawingTool pen;
pen = new DrawingTool();
pen.moveForward();
![Page 48: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/48.jpg)
48
Muuttujat, oliot ja roskienkeruu Kun muuttua esitellään ensimmäisen kerran,
se ei osoita mihinkään olioon vaan null-arvoon
Kun olioon ei osoita enää yksikään muuttuja, Java-kielen roskienkeruu tuhoaa senDrawingTool pen; // pen osoittaa null-arvoonpen = new DrawingTool();// pen osoittaa luotuun olioonpen = null;// luotuun DrawingTool-olioon ei osoita enää// yksikään muuttuja -> se tuhotaan
![Page 49: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/49.jpg)
49
myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();
suoritus-kohta
myPen
missingPen
borrowedPen
( null )
( null )
( null )
Muuttujat, oliot ja roskienkeruu
![Page 50: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/50.jpg)
50
suoritus-kohta
myPen : Pencil
m_color = = ?m_width = = ?
Muuttujat, oliot ja roskienkeruu
myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();
myPen
missingPen
borrowedPen
( null )
( null )
![Page 51: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/51.jpg)
51
suoritus-kohta
Muuttujat, oliot ja roskienkeruu
myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();
: Pencil
m_color = = ?m_width = = ?
myPen
missingPen
borrowedPen
( null )
( null )
( null )
![Page 52: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/52.jpg)
52
suoritus-kohta
Muuttujat, oliot ja roskienkeruu
myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();
: Pencil
m_color = = ?m_width = = ?
myPen
missingPen
borrowedPen
( null )
( null )
borrowedPen : Pencil
m_color = = ?m_width = = ?
![Page 53: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/53.jpg)
53
suoritus-kohta
Muuttujat, oliot ja roskienkeruu
myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();
: Pencil
m_color = = ?m_width = = ?
myPen
missingPen
borrowedPen
( null )
borrowedPen : Pencil
m_color = = ?m_width = = ?
![Page 54: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/54.jpg)
54
suoritus-kohta
Muuttujat, oliot ja roskienkeruu
myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();
: Pencil
m_color = = ?m_width = = ?
myPen
missingPen
borrowedPen
( null )
( null )
borrowedPen : Pencil
m_color = = ?m_width = = ?
![Page 55: Javan perusteet 2004](https://reader033.vdocuments.mx/reader033/viewer/2022051622/5681509e550346895dbe9871/html5/thumbnails/55.jpg)
55
suoritus-kohta
Muuttujat, oliot ja roskienkeruu
myPen = new Pencil();myPen = null;borrowedPen = new Pencil();missingPen = borrowedPen;missingPen = myPen;borrowedPen = new Pencil();
: Pencil
m_color = = ?m_width = = ?
myPen
missingPen
borrowedPen
( null )
( null )
: Pencil
m_color = = ?m_width = = ?
borrowedPen : Pencil
m_color = = ?m_width = = ?