812341A Olio-ohjelmointi, 2016. Olio-ohjelmoinnin peruskäsitteet ja Java-kieli



Samankaltaiset tiedostot
Java-kielen perusteet

Java-kielen perusteet

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

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

Java-kielen perusteita

Java-kielen perusteita

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

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

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

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

13. Loogiset operaatiot 13.1

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

Olio-ohjelmointi Javalla

13. Loogiset operaatiot 13.1

Listarakenne (ArrayList-luokka)

Java-kielen perusteet

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

1 Tehtävän kuvaus ja analysointi

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

7. Näytölle tulostaminen 7.1

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

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

Metodien tekeminen Javalla

Ohjelmointiharjoituksia Arduino-ympäristössä

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietotyypit ja operaattorit

5/20: Algoritmirakenteita III

9. Periytyminen Javassa 9.1

Ohjelmoinnin perusteet Y Python

14. Poikkeukset 14.1

9. Periytyminen Javassa 9.1

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Ehto- ja toistolauseet

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

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

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

Java kahdessa tunnissa. Jyry Suvilehto

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Muuttujat ja kontrolli. Ville Sundberg

Ohjelmoinnin jatkokurssi, kurssikoe

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

7. Oliot ja viitteet 7.1

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

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

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

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

5. HelloWorld-ohjelma 5.1

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

Ohjelmoinnin perusteet Y Python

20. Javan omat luokat 20.1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Mikä yhteyssuhde on?

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

11. Javan valintarakenteet 11.1

Ohjelmoinnin peruskurssi Y1

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

16. Javan omat luokat 16.1

Ohjelmoinnin perusteet Y Python

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Ohjelmointi 2 / 2010 Välikoe / 26.3

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

17. Javan omat luokat 17.1

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

1. Omat operaatiot 1.1

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Poikkeustenkäsittely

Java-kielen perusteet

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

JAVA-OHJELMOINNIN PERUSTEET. Sisältö 1. JAVA OHJELMOINTI LÄHTEITÄ HARJOITUKSET MUUTAMA MALLIRATKAISU...

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

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

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

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

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

Ehto- ja toistolauseet

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

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

11. Javan toistorakenteet 11.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

15. Ohjelmoinnin tekniikkaa 15.1

Javan perusteita. Janne Käki

Ohjelmoinnin peruskurssi Y1

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit:

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

Sisällys JAVA-OHJELMOINTI Osa 3: Laskennan ohjaus. Lohkolause (block) Peräkkäinen laskenta. Lohkon käyttö. Esimerkki

Transkriptio:

812341A Olio-ohjelmointi, 2016 Olio-ohjelmoinnin peruskäsitteet ja Java-kieli

Sisältö 1. Java-kieli 2. Luokka 3. Luokkakaaviot 4. Lisää Javaa Javalla 2

Java-kieli n Sun Microsystems tutkimusprojekti 1991 koodinimeltään Green n Kieli kehitetty C/C++ -kielestä James Goslingin johdolla n Alunperin nimi oli Oak, mutta tämänniminen ohjelmointikieli oli jo olemassa -> uudeksi nimeksi 1995 Java n Kieli julkaistiin virallisesti toukokuussa 1995 Javalla 3

Java-kieli Java-kieli on yksinkertainen (verrattuna C++ kieleen) ei osoittimia ei moniperintää automaattinen muistinvaraus ja roskien keruu Java on olio-orientoitunut kieli Java on hajautettu kieli Java on tulkattava kieli Java-ohjelmat käännetään ns. tavukoodiksi, jota Java Virtuaalikone (JVM, Java Virtual Machine) suorittaa tavukoodi on laiteriippumatonta Javalla 4

1. Java-kieli Javassa on pyritty luotettavuuteen mahdolliset virheet pyritään löytämään mahdollisimman aikaisessa vaiheessa korjattu muutamia muissa kielissä ilmenneitä heikkouksia ei osoittimia, joten ohjelma ei pääse tuhoamaan muistissa olevaa dataa poikkeusten käsittely "älä luota mihinkään" -periaate Javalla 5

1. Java-kieli Java on siirrettävä ohjelma voidaan suorittaa toisella laitealustalla kääntämättä ohjelmaa uudelleen ei alustariippuvaisia ominaisuuksia Javalla 6

1. Java-kieli n Java-ohjelman kirjoittaminen, kääntäminen ja suorittaminen Ohjelma kirjoitetaan tiedostoon tekstieditorilla (esim. notepad- eli muistio-ohjelmalla). Tuloksena saadaan tekstitiedosto, joka sisältää ohjelman lähdekoodin esimerkiksi Ohjelma.java Javalla 7

1. Java-kieli n Tekstitiedosto muutetaan tietokoneen ymmärtämään muotoon java-kääntäjällä: javac Ohjelma.java n Saadaan uusi tiedosto: Ohjelma.class, jossa on suoritettava ohjelmakoodi ns. tavukoodina (byte code) n Ohjelma käynnistetään kutsumalla java-tulkkia, joka suorittaa annetun ohjelman. Tulkkia kutsuttaessa ei käytetä.class -laajennusta: java Ohjelma Javalla 8

1. Java-kieli luo/muokkaa ohjeman lähdekoodia public class Ohjelma {! public static void main( String [ ] args ) {! System.out.println("Tervehdys!");! }! } lähdekoodi KÄÄNNÖSAIKAISET VIRHEET... Max stack 00 02 Max locals 00 01 00 00 getstatic FIELD java/lang/system out Ljava/io/PrintStream; B2 00 02 00 03 ldc STRING Tervehdys! 12 03 00 05 invokevirtual METHOD java/io/printstream println (Ljava/lang/String;) V B6 00 04 00 08 return B1 Exceptions Table 00 00 Additional info 00 01 LineNumberTable 00 0A 00 00 00 0A 00 02 00 00 00 06 00 08 00 07... javac Ohjelma.java Tavukoodi java Ohjelma tulos AJONAIKAISET VIRHEET Javalla 9

2.Luokka n Luokka kuvaa olion ominaisuudet n Jäsenet Attribuutit (olion rakenne) Metodit (olion toiminta, c-kielen funktiot) n Kapselointi n Tiedon kätkentä (onion model) Piilottaa kaiken, johon ei ulkopuolelta saa päästä käsiksi (tiedon suojaus) Kätkettyihin tietoihin pääsee käsiksi vain julkisten metodien avulla n Tiedon abstrahointi Javalla 10

Luokka n Luokka toimii mallina, jonka perusteella tehdään olioita n Olio on luokan ilmentymä n Kaikilla saman luokan ilmentymillä eli olioilla on samanlaiset attribuuti ja metodit n Attribuuttien arvot ovat kuitenkin jokaisen olion omia Javalla 11

Luokka n Attribbuuttien arvot kuvaavat olion tilan Henkilö-luokan attribuutteja voisi olla n Pituus n Nimi n Henkilötunnus n Attribuutit voivat olla tyypiltään Javan alkeistietotyyppejä (kokonaislukuja, merkkejä, jne.) Viittauksia toisiin olioihin (Henkilö-luokan olion attribuutin nimi arvona on viite merkkijono-olioon) Javalla 12

Luokka Metodit määrittävät olioiden käyttäytymisen Voivat muuttaa olion tilaa Voivat palauttaa jnkin arvon kutsujalleen Kaikilla luokan olioilla on samat metodit Metodeilla on Nimi Mahdolliset parametrit Runko, joka määrittää metodin toiminnan Javalla 13

Luokka n Luokan määrittely Javassa: class LuokanNimi { } attribuutit (eli muuttujat) konstruktori(t) metodit Ohjelmoija saa päättää luokan nimen (älä kuitenkaan käytää ääkkösiä ) Luokan nimi alkaa aina isolla kirjaimella Javalla 14

Luokka Luokan ja luokan sisältämän tiedoston nimi aina sama class Henkilo { } Henkilo.java class sanan edessä voi olla muuntimia public, protected, private, abstract, static, final tai strictfp Luokan nimen perässä voi olla tyyppiparametrien määrittely, extends tai implements määreet Javalla 15

Luokka n Luokan jäsenille voidaan antaa näkyvyysmääreet public, protected, private Myös oletusnäkyvyys (jätetään merkitsemättä) Javalla 16

Luokkakaavio Kuvaa luokasta kaiken olennaisen Ei metodien runkoja (toteutusta) Kuvataan muualla kaavioilla ja algoritmeilla Aika -tunnit: int -minuutit: int -sekunnit:int +Aika(t:int, m:int, s:int) +Aika( ) +gettunnit(): int +getminuutit(): int +getsekunnit(): int +settunnit(t: int) +setminuutit(m: int) +setsekunnit(s: int) +lisaatunti() +lisaatunti(t: int) Luokan nimi Luokan tiedot Luokan toiminnot Javalla 17

Luokkakaavio Atribuuttien kuvaaminen näkyvyysmääre attribuutinnimi: tyyppi! Näkyvyysmääre voi olla -, private (yksityinen) +, public (julkinen) #, protected (suojattu) ~, package (pakkaus) Metodien kuvaaminen näkyvyysmääre metodinnimi([param: tyyppi [,param: tyyppi] ]]): tyyppi! Javalla 18

Luokkakaavio Luokkakaaviolla kuvataan myös luokkien väliset assosiaatiot Assosiaatiolla nimeen voidaan liittää nuoli (>), joka osoittaa lukusuunnan Koostuminen Viitekorko -nimi: String 1 * koostuu > Korkojakso -alkupvm: Date -loppupvm: Date -korkoprosentti: double Viitekorko koostuu korkojaksoista Assosiaation kertautuminen (kardinaalisuus) Lähde: Vesterholm, Kyppö, Java-ohjelmointi, s. 60 Javalla 19

Luokkakaavio Assosiaation kertautuminen (kardinaalisuus) Montako oliota assosiaatio voi vähintään ja enintään yhdistää Viivan päähän n..m, n minimimäärä ja m maksimimäärä n..n voidaan lyhentää: n ja 0..*: * Opiskelija -nimi: String 0..500 0..* osallistuu > Kurssi -nimi: String Kurssille voi osallistua maksimissaan 500 opiskelijaa Opiskelija voi osallistua niin monelle kurssille kuin haluaa Javalla 20

Luokkakaavio Perityminen (yleistys) Kuvio Ympyrä Suorakulmio Periytymisessä assosioaatio yliluokan ja aliluokan välillä Aliluokka tarkentaa tai erikoistaa yliluokkansa Aliluokat perivät kaikki yliluokkansa ominaisuudet Aliluokassa voi olla lisäominaisuuksia Voidaan muodostaa hierarkioita (eläin, nisäkäs, koira) Javalla 21

Luokkakaavio Assosiaatiota kahden luokan välillä kutsutaan koosteeksi Pääluokan olio koostuu komponenttiolioista Kirja koostuu luvuista ja luvut kappaleista Koostuminen kuvataan salmiakkikuviolla, joka sijaitsee koostuvassa päässä Kirja Luku Kappale Javalla 22

Luokkakaavio Transitiivisuus Jos A koostuu B:stä ja B koostuu C:stä, niin silloin A koostuu myös C:stä (kirja koostuu myös kappaleista) Asymmetrisyys A:n koostuessa B:stä ei B voi koostua A:sta (luku ei voi koostua kirjasta) Javalla 23

Luokkakaavio Aito kooste Komponentti voi olla olemassa ainoastaan pääluokan olion osana Komponentti voi olla osana ainoastaan yhdessä pääluokan oliossa Merkitään täytetyllä salmiakkikuviolla Rakennus * Huone Kun rakennus puretaan häviävät myös huoneet Javalla 24

Lisää Javaa, tunnukset ja avainsanat Tunnuksia ovat mm. luokkien, muuttujien, metodien ja attribuuttien nimet Voivat sisältää kirjaimia numeroita alaviivan Tunnus alkaa kirjaimella, ei pituusrajoituksia Kuten aina ohjelmoinnissa, tunnusten tulee olla kuvaavia Isoilla ja pienillä kirjaimilla ero Javalla 25

Tunnukset ja avainsanat Luokan nimen ensimmäinen kirjain alkaa isolla kirjaimella Muuttujien, attribuuttien ja metodien nimet alkavat pienellä kirjaimella, mutta voivat sisältää muuten isoja kirjaimia lukumaara pankkitilinnumero laskesumma( ) Javalla 26

Tunnukset ja avainsanat Javan avainsanoja ei saa käyttää tunnuksena abstract assert boolean break byte case catch char class const * continue default do double else enum extends false final finally float for goto * if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws transient true try void volatile while Javalla 27

Muuttujat Javan muuttujia on kahdenlaisia Viitemuuttujat Sisältää viittauksen olioon (viitesemantiikka) Yksinkertaiset muuttuja, sisältävät alkeistyyppisiä tietoja kokonaislukuja reaalilukuja yksittäisiä merkkejä totuusarvoja Javalla 28

Muuttujat n Javassa vahva tyypitys n Muuttuja voi sisältää vain tyyppinsä mukaisia arvoja n Väärän tyyppisen tiedon sijoittaminen muuttujan arvoksi tuottaa kääntäjän virheilmoituksen n Sijoitus onnistuu vain jos tietotyypit ovat yhteensopivia ja sijoituksessa ei hukata informaatiota n Muuttujan määrittely: [final] tyyppi muutujannimi; [final] tyyppi nimi1, nimi2,, nimin; Javalla 29

Muuttujat Muuttujan määrittely: [final] tyyppi muutujannimi; [final] tyyppi nimi1, nimi2,, nimin; int ika; String nimi; double pituus, paino; final määrellä muuttujasta tehdään lopullinen arvoa ei voi muuttaa alustamisen jälkeen final double mailiakm = 1.609; Javalla 30

Tietotyypit Tyyppi Koko Arvoalue boolean true (tosi) tai false (epätosi) char 16 bit merkki, merkin unicode -koodi byte 8 bit kokonaisluku -128 127 short 16 bit kokonaisluku -32768 32767 int 32 bit kokonaisluku -2147483648 2147483647 long 64 bit kokonaisluku -9223372036854775808 9223372036854775807 float 32 bit liukuluku 1.4*10-45 3.4*10 38, n. 7 numeron tarkkuus double 64 bit liukuluku 4.9*10-324 4.9*10 308, n 15 numeron tarkkuus Javalla 31

Tietotyypit n float- ja double- tyypeillä kolme erityistä arvoa positiivinen ja negatiivinen ääretön n Float.NEGATIVE_INFINITY n Float.POSITIVE_INFINITY n Double.NEGATIVE_INFINITY n Double.POSITIVE_INFINITY NaN (Not a Number), arvoton lukuarvo n Float.NaN n Double.NaN Javalla 32

Muuttujien näkyvyys n Alue jossa muuttujaa voi käyttää Aina sen lohkon sisällä, jossa määritelty Muuttujilla ei voi olla samoja nimiä näkyvyysalueellaan Poikkeuksena attribuutit, jonka nimi voi olla saman kuin paikallisen muuttujan tai metodin parametrin nimi Tällöin muuttujan nimi peittää attribuutin nimen tällöin käytettävä this-avainsanaa Javalla 33

Muuttujat, alustaminen Paikallisia muuttujia ei alusteta automaattisesti Sijoitettava arvo ennen käyttöä, muuten kääntäjä antaa virheilmoituksen import java.io.*; public class MuuttujaDemo { public static void main( String [] args ){ final double PII = 3.141592653; int leveys = 10; int korkeus, ala; korkeus = 25; ala = leveys * korkeus; korkeus = korkeus - 15; ala = leveys * korkeus; int r = 5; double ympyranala = PII * r * r; } } Javalla 34

Muuttujat, tulostaminen standardiin tulostusvirtaan Muotoilematon tulostus System.out.print( ); System.out.println( ); import java.io.*; public class TulostusDemo1 { public static void main( String [] args ){ int korkeus = 12, leveys = 10, piiri = 2 * (korkeus + leveys ); System.out.print("Korkeus on "); System.out.println(korkeus); System.out.println("Leveys on " + leveys); System.out.println("Piiri on " + piiri ); } } Javalla 35

Muuttujat, tulostaminen standardiin tulostusvirtaan Muotoiltu tulostus printf-metodilla printf(string format, Object args); format (ohjausjono) määrää tulostustavan Ohjausjono sisältää lainausmerkkien sisällä konversiomäärittelyjä sisältävän merkkijonon %[tietokohta$][liput][leveys][.tarkkuuus]konversio Hakasuluissa olevat eivät ole pakollisia %konversio Ohjausjonon perään pilkulla erotettuna ne tiedot, jotka tulostetaan ohjausjonon ohjaamana Javalla 36

Muuttujat, tulostaminen standardiin tulostusvirtaan Konversiomerkkejä ovat mm. d, lisää tulostukseen kokonaislukutyyppisen arvon 10- järjestelmän kokonaislukuna f, lisää tiedon desimaalilukuna c, lisää tiedon merkkinä s, lisää tiedon merkkijonona %, lisää %-merkin n, lisää järjestelmäkohtaisen rivinvaihdon Javalla 37

Muuttujat, tulostaminen standardiin tulostusvirtaan n Desimaalilukujen tulostuksessa tarkkuus määrää tulostuvien desimaalien lukumäärän n Leveys kertoo kohtaa tulostuvien merkkien minimimäärän n Oletuksena on tulostuksen tasasu kentän oikeasta reunasta n Lipuilla voi hienosäätää tulostusta -, tasaa tulostuksen vasempaan reunaan +, lisää aina luvun etumerkin välilyönti, positiivisille luvuille välilyönti luvun eteen 0, lisää etunollat luvun eteen pilkku, luvun ryhmittely Javalla 38

Muuttujat, tulostaminen standardiin tulostusvirtaan n Omalla koneella saattaa tulostus poiketa esimerkeistä n printf tekee luvuille järjestelmän mukaisen tulostuksen muotoilun n Suomalainen muotoilu asetuksiin import java.io.*; import java.util.locale; public class TulostusDemo { public static void main( String [] args ){ double luku = 1.234567; System.out.printf("luku on. %5.2f%n", luku); Locale loc = new Locale("fi", "FI"); System.out.printf(loc, "luku on: %5.2f%n", luku); } } Javalla 39

Muuttujat, tulostaminen standardiin tulostusvirtaan Ohjelman tulostus luku on: 1.23 luku on: 1,23 Väärän konversion käyttö aiheuttaa ajonaikaisen virhetilanteen double luku = 1.234567; System.out.printf("luku on. %5.2d%n", luku); Exception in thread "main" java.util.illegalformatprecisionexception: 2 at java.util.formatter$formatspecifier.checkinteger(formatter.java:2984) at java.util.formatter$formatspecifier.<init>(formatter.java:2729) at java.util.formatter.parse(formatter.java:2560) at java.util.formatter.format(formatter.java:2501) at java.io.printstream.format(printstream.java:970) at java.io.printstream.printf(printstream.java:871) at Malli.main(TulostusDemo.java:9) Javalla 40

Muuttujat, tyypinmuunnokset n Java käyttää vahvaa tyypitystä, vääräntyyppisen arvon sijoittaminen aiheuttaa virheen n Staatisen tyypityksen ansiosta virheet havaitaan jo käännösaikana n Muunos voidaan tehdä implisiittisesti (automaattisesti), jos tietoa ei häviä byte -> char -> short -> int -> long -> float -> double eksplisiittisesti, jos muunnoksessa voi hävitä tietoa tyypinmuunnosoperaattori n (tyyppi)lauseke Javalla 41

Muuttujat, operaattorit n Muuttujan/arvon tietotyyppi määritää mitä operaatioita muuttujalle sallitaan n Operaattori Operaatio, joka muodostaa arvon operaation kohteiden (operandien) perusteella Kolme kategoriaa, riippuen siitä montako operandia tarvitaan operaatiossa n Unaarioperaattori n Binäärioperaattori n Kolmiarvoinen operaattori (c = a > b? a : b;) Javalla 42

Muuttujat, operaattorit Operaattori Aritmeettiset operaattorit + - * / % Yhtäsuuruusoperaattorit ==!= Vertailuoperaattorit < > <= >= Loogiset operaattorit! && Sijoitusoperaattorit = += -= *= /= Erityiset lisäys- ja vähennysoperaattorit ++ -- Javalla 43

Muuttujat, operaattorit Kertolasku ennen jakolaskua Samanarvoiset yhteen- ja vähennyslaskut lasketaan vasemmalta oikealle Operaattorien operandien kehitysjärjestys Vasemmalta oikealle laskea() + laskeb() + laskec(); Ensin luodaan koodi, joka tuottaa laskea():n ja sitten laskeb():n arvon Sitten lasketaan em. arvojen summa ja kehitetään laskec():n arvo ja lasketaan se yhteen edellisen tuloksen kanssa Virheen sattuessa kehittäminen lopetetaan välittömästi Javalla 44

Muuttujat, operaattorit Suluilla voi muuttaa laskentajärjestystä Tarvittaessa tehdään automaattisia tyypinmuunnoksia Valinnassa järjestys on double, float, long ja int Jos toinen operandi on int ja toinen float muutetaan int float-tyyppiseksi Reaaliluvuilla laskenta poikkeaa koulumatematiikasta Reaaliluvuilla arvot +0.0 ja -0.0, ovat vertailussa samoja mutta vaikuttavat tuloksen etumerkkiin (1.0/-0-0 = - ) NaN, laskutoimitukset joissa NaN mukana on tulos NaN Javalla 45

Muuttujat, operaattorit Poikkeavia laskutoimituksia x y X * y x/y x%y äärell.luku ±0.0 ±0.0 ± NaN äärell.luku ± ± ±0.0 x ±0.0 ±0.0 ±0.0 NaN NaN ± äärell.luku ± ± NaN ± ± ± NaN NaN ± ±0.0 NaN ± NaN Reaalilukulaskennassa kaksi tiukkuusastetta Oletuksena eri virtuaalikoneet eivät tuota tarkalleen samaa tulosta tiukka reaalilukulaskenta strictfp määreellä Javalla 46

Muuttujat, tietojen lukeminen käyttäjältä Standardisyöttövirta System.in Lukeminen tavuina Muutettava merkkijonoksi ja muiksi tietotyypeiksi muiden luokkien avulla Javassa luokat Console yksittäisten rivien lukeminen Javalla 47

Muuttujat, tietojen lukeminen käyttäjältä import java.io.console; class LueTietoja { private static final Console konsoli = System.console(); public static void main(string [] args){ System.out.print("Anna etunimesi >"); String etunimi = konsoli.readline(); System.out.printf("Terve \"%s\" %n", etunimi); } } Anna etunimesi >Ilkka Terve "Ilkka" Javalla 48

Muuttujat, tietojen lukeminen käyttäjältä Luokka Scanner pakkauksessa util Kytketään standardi inputvirtaan (System.in) import java.util.scanner; class LueTietoja { private static final Scanner lukija = new Scanner(System.in); public static void main(string [] args){ System.out.print("Anna etunimesi >"); String etunimi = lukija.nextline(); System.out.printf("Terve \"%s\" %n", etunimi); } } Javalla 49

Muuttujat, tietojen lukeminen käyttäjältä Metodeja nextline() lukee rivin tekstiä nextint(), nextlong() lukee kokonaisluvun nextfloat(), nextdouble() lukee desimaaliluvun Javalla 50

Ohjausrakenteet Valinta- ja toistorakenteet vaativat jonkin ehtolausekkeen, jonka tuottaman totuusarvon perusteella päätellään mitä tehdään seuraavaksi Totuusarvot, aitoja arvoja toisin kuin vaikka C:ssä boolean- tietotyyppi true! false! boolean onparillinen;! onparillinen = (5 % 2 == 0);! Javalla 51

Ohjausrakenteet Javan loogiset operaattorit operaattori selite! negaatio (not) && & ehdollinen JA (and) ehdoton JA ehdollinen TAI (or) ehdoton TAI ^ poissulkeva tai, JOKO TAI (xor) Ehdollinen ja ehdoton ja/tai eroavat toisistaan siinä, että ehdollisissa tapauksissa (&&, ) lausekkeen arvon kehitäminen loppuu heti, kun lausekkeen tulos voidaan päätellä (ns. oikosulkuominaisuus) Javalla 52

Ohjausrakenteet Ehtolauset kuten C:ssä if(ehto)! lausea;! else! lauseb;! if(ehto){! lause1;! lause2;! }else{! lause3;! lause4;! }! Javalla 53

Ohjausrakenteet Ehto-operaattori int x = 2, y = 5;!! int z = x > y? x-y : x+y; //z on 7! switch -lause! switch( valintaa ohjaava lauseke ){! case arvo1:! lauseet;! break;! case arvo2:! lauseet;! break;! case arvon:! lauseet;! break;! default:! lauseet;! }! Javalla 54

Toistorakenteet n Samat kuin C:ssä do {! lause(ita);! }while(ehto); while(ehto) {! lause(ita);! }while! for(alustus; ehto; päivitys){! lause(eita)! }! Javalla 55

Toistorakenteet Parannettu versio for-toistorakenteesta Jonkin joukon kaikkien alkioiden läpikäymiseen ns. foreach-silmukka Joukko voi olla Taulukko Jokin Iterable-liittymän totetuttavan luokan olio, esimerkiksi kokoelma (myöhemmin tästä)!! Javalla 56

Toistorakenteet for( muodollinen parametri : lauseke ) lause! n Muodollinen parametri määrittelee muuttujan, joka saa arvokseen vuorollaan jokaisen joukon alkion arvon kun suoritetaan lause n Voidaan käyttää mm. taulukoiden yhteydessä Taulukko on lauseke, jonka alkiot käydään läpi public static void tulostataulukko(int [] luvut){! for( int tulostettavaluku : luvut ){! System.out.println(tulostettavaLuku);! }! }! Javalla 57

Merkit Merkit kuvataan Unicode-standardin mukaisesti char-tyyppi 16 bittinen (65 536 merkkiä) Laajennttu Unicode -tyyppi, merkit esitetään inttyyppisinä tai kahtena peräkkäisenä char-arvona Erityismerkit \n, \\,sama merkitys kuin C:ssä \uxxx, heksadesimaaliluku, joka kuvaa jonkin Unicode-merkistön merkin (esim. \u03c0 on π) Javalla 58