JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi, Talentum 2004. JAVA-PERUSTEET Javan ominaisuuksista Tietotyypit Alkeistietotyypit Taulukot Merkkijonot Java-ohjelman rakenne Luokka ja instanssit Luokan rakenne ja tarkentimet Yksinkertainen esimerkki 2006 2 JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA Java vs. C++? Syntaksi samantapainen Javasta on poistettu C++:n vaarallisia piirteitä: pointterit, headerit, esiprosessori, goto, delete, Javan uusia ominaisuuksia Tiukka oliomalli Roskienkeruu Interfacet Java-ohjelma Java API JVM Käyttöjärjestelmä Java koostuu erilaisista API-rajapinnoista ja virtuaalikoneesta (JVM) Java APIt ovat valmiiksi käännettyjä luokkakirjastoja Säästävät aikaa ja vaivaa Vähentävät virheiden mahdollisuutta Ohjelmat käännetään tavukoodiksi, jotka JVM tulkkaa Eri tekniikoita olemassa tulkkaamisen nopeuttamiseksi 2006 3 2006 4
JAVA OHJELMAN RAKENNE JAVA OHJELMAN RAKENNE Javassa jokainen julkinen luokka sijoitetaan omaan.java tiedostoonsa Pääohjelma on pääluokan julkinen luokkametodi main Tarkentimet static ja void Parametrina String-taulukko args Yksinkertainen ohjelma: class MyFirstApp { public static void main(string[] args){ System.out.println( Hello World!"); Laitetaan tiedostoon MyFirstApp.java Käännetään tavukoodiksi ja ajetaan: $ javac MyFirstApp.java $ java cp. MyFirstApp Hello World! 2006 5 2006 6 TIETOTYYPIT TIETOTYYPIT Javan tietotyypit ovat joko alkeistietotyyppejä tai olioita Alkeistietotyypit ovat ympäristöstä riippumatta saman kokoisia siirrettävyys Kaikille alkeistietotyypeille on kuitenkin omat (wrapper-) oliotyyppinsä JDK 1.5:ssä on alkeistietotyypeille automaattinen käärintä ja käärinnän purku Uutena ominaisuutena JDK 1.5:ssä ovat geneerinen tietotyyppi ja lueteltu tietotyyppi Geneerisellä tietotyypillä voi parametroida luokan käyttämän tietotyypin (vähän kuten C++:n templatet) Luetellulla tietotyypillä voi määrittää uuden tietotyypin, jossa on ns. lueteltuja vakioita (vähän kuin C++:n enum) 2006 7 2006 8
ALKEISTIETOTYYPIT TAULUKOT Primitive data types boolean true, false 1 bit 1) char Unicode-merkki 16 bits byte tavu 8 bits short kokonaisluku 16 bits int kokonaisluku 32 bits long kokonaisluku 64 bits float desimaaliluku 32 bits double desimaaliluku 64 bits 1) JVM:ssä kuitenkin integerejä 0 tai 1 Taulukot luodaan operaattorilla new int table[] = new int[10]; Tai ne voidaan alustaa staattisesti int table[] = {1,2,3,4,5,6,7,8,9,10; Moniulotteisissa taulukoissa ulomman taulukon alkiot ovat taulukoita: int[][] multidim = {{2,{3,5,{; int[][] foobar; foobar = new int[10][]; foobar[1] = new int[3]; foobar[1][1] = 2; Hakasulut voivat olla joko tyypin tai taulukon nimen jälkeen 2006 9 2006 10 MERKKIJONOT MERKKIJONOT Merkkijonot ovat luokan String instansseja String-oliot voidaan alustaa operaattorilla new tai se voidaan myös jättää pois String msg = new String( Hello ); String to = World! ; Merkkijonoja ei voida muokata alustuksen jälkeen Merkkijonoja voidaan kuitenkin yhdistellä ja sijoittaa + ja += -operaatioilla: String sentence = msg + + to; String newmsg = Reboot ; newmsg += ing ; Lisäksi merkkijonoon voidaan liittää numeerisia arvoja, jotka muutetaan automaattisesti merkkijonoiksi int itime = 10; newmsg += in + itime + seconds... ; 2006 11 2006 12
JAVA OHJELMAN RAKENNE LUOKAN RAKENNE JA TARKENTIMET Tarkentimet edellisen esimerkkiohjelman main()-metodissa class MyFirstApp { public static void main(string[] args){ System.out.println( Hello World!"); public metodi näkyy muille ja JVM voi suorittaa sen static luokasta ei tarvitse tehdä instanssia. Tämä on mahdollista, jos myös kaikki ko. metodin käyttämät oliot ja metodit on määritelty static:ksi. void metodilla ei ole paluuarvoa Javassa ei ole otsikkotiedostoja Ei public:- ja private:-lohkoja Jokaisen attribuutin ja metodin näkyvyys määritellään erikseen omalla tarkentimella Näkyvyystarkentimet: public näkyy ulospäin protected näkyy tälle ja periytetyille luokille sekä pakkauksen sisällä private näkyy vain tälle luokalle oletuksena näkyvät saman pakkauksen sisällä 2006 13 2006 14 LUOKAN RAKENNE JA TARKENTIMET: ESIMERKKI LUOKKA JA INSTANSSIT // [tarkentimet] class luokan_nimi public class MyClass { // Jäsenmuuttujia private final static int MY_CONSTANT = 10; private double dval; public int inum; // Konstruktori MyClass() { dval = 0.0; inum = 0; // Muita metodeja public void setval(double d){ dval = d; public double getval(double d){ return d; Jos luokka sisältää attribuutteja tai metodeja, jotka eivät ole static:eja, niin luokkia käytettäessä niistä luodaan instanssit Näitä metodeja ja attribuutteja kutsutaan instanssimetodeiksi ja attribuuteiksi Toisaalta static-tarkentimella määriteltyjä attribuutteja ja metodeja kutsutaan luokkametodeiksi ja attribuuteiksi 2006 15 2006 16
LUOKKA JA INSTANSSIT LUOKKA JA INSTANSSIT Luokkametodit voivat siis käsitellä vain luokka-attribuutteja Instanssimetodit voivat käsitellä sekä instanssiattribuutteja että luokka-attribuutteja Luokka-attribuutista on muistissa vain yksi versio Instanssiattribuuteista on jokaisesta omansa class myclass { int idata; static int istatic = 0; public myclass(){ idata = 0; public static void setstatic(int i){ istatic = i; public void set(int i){ idata = i; myclass A = new myclass(); myclass B = new myclass(); A.set(10); B.set(20); B.setStatic(50); myclass A: idata = 10; istatic myclass B: idata = 20; istatic istatic=50; 2006 17 2006 18 LUOKAN RAKENNE JA TARKENTIMET PAKKAUKSET Kaikkien luokkien perimmäinen kantaluokka on Object Luokkamäärittelyyn voidaan liittää public, abstract ja final Oletuksena luokka ei näy pakkauksen ulkopuolelle public tekee näkyvyydestä globaalin Abstrakti kantaluokka tarkentimella abstract Tarkennin final kieltää periyttämisen Pakkaus (package) on kokoelma luokkia Auttaa jakamaan ohjelmia pienempiin kokonaisuuksiin Esimerkiksi javax.swing sisältää luokan JButton eli ko. luokan täydellinen nimi on javax.swing.jbutton Pakkauksia ja luokkia voidaan ottaa käyttöön import-lauseella: import javax.swing.jbutton; 2006 19 2006 20
PAKKAUKSET RAJAPINNAT Jokainen luokka kuuluu johonkin pakkaukseen jollei määritelty, niin kuuluu oletuspakkaukseen Pakkausmäärittely tehdään luokan alkuun package-lauseella, esim: package oma.apu; Pakkauksen nimi on käytännössä hakemistopolku eli esim. pakkauksen oma.apu luokat löytyvät hakemiston oma/apu -alta Javassa erittäin kätevä ominaisuus on rajapinta-käsite (interface) Tavallaan korvaa moniperinnän Samantyyppistä toiminnallisuutta toteuttaville luokille voi määritellä yhteisen rajapinnan Luvataan, että luokka toteuttaa (implements) rajapinnan mukaiset metodit Metodia ei toteuteta rajapinnassa, vaan määritellään ainoastaan prototyyppi 2006 21 2006 22