© Jukka Harju, 2005 Javan util -pakkaus •Javan util -pakkaus sisältää monia hyödyllisiä luokkia ja rajapintoja. –Kaikki ao luokat ovat pakkauksessa java.util.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
Minimaalinen Java-ohjelma •Kaikki ohjelmakoodi on luokkamäärityksen sisällä •Ohjelma käynnistyy ”public static void main(String[] args)”-metodista •System.out.print()
Osion kaksi kertaus Jukka Juslin © Jukka Juslin.
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
16. Javan omat luokat.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 6 (osittain) Tiedostot.
© 2004 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice Java-perusteet Kari Kujansuu
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet
Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.
Taulukot Jukka Juslin © Jukka Juslin 2006.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
9. Periytyminen Javassa.
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Map-luokka Mikä Map on? Mapin esittely ja luonti Map-luokan metodeja Mappiin lisääminen Mapin läpikäynti Mapista poistaminen 1.
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
20. Javan omat luokat.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Standardi- ja tietorakenneluokkia.
Kuinka niitä käsitellään
1 DataOutputStream ja DataInputStream DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon DataInputStream:lla.
1 Tietovirrat ja niiden suunnat Tietovirralla on aina suunta Tiedostoon tallentaessa käytetään OutputStream-luokasta perittyjä luokkia Tiedostosta luettaessa.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Näppäimistöltä lukeminen Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In -luokka.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
© Jukka Juslin1 Tiedostot Tuloksellinen Java-ohjelmointi.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
Vesa Ollikainen & Outi Grotenfelt
Tiedostojen käsittely
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
Ict02d Johdanto Dynaamiset tietorakenteet –Rakenteiden tilavaraus laajenee/pienenee ajonaikaisesti. –Rakenteita on useita tyyppejä Linkitetty lista Pino.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
Sähköpostin lähetys Java- ohjelmasta Jukka Juslin.
15. Ohjelmoinnin tekniikkaa
Tiedostot. 8.2 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen.
String-vertailusta ja Scannerin käytöstä (1/2)
5. Kapselointi.
6. Tiedostot.
17. Javan omat luokat.
7. Hyvä ohjelmointitapa..
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
6. Metodit.
13. Pakkaukset.
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
eli oliotiedostojen käsittely
Esityksen transkriptio:

© Jukka Harju, 2005 Javan util -pakkaus •Javan util -pakkaus sisältää monia hyödyllisiä luokkia ja rajapintoja. –Kaikki ao luokat ovat pakkauksessa java.util •ArrayList -luokka •Iterator -rajapinta •Hashtable -luokka •Properties -luokka •Calendar -luokka –Näistä käsitellään tarkemmin tänään ArrayList - luokkaa ja Iterator -rajapintaa. –Lisäksi ekstrana Calendar -luokan käyttöesimerkki.

© Jukka Harju, 2005 Arraylist –luokka •Luokka java.util.ArrayList –Javan luokka ArrayList on linkitetyn listan eräs toteutus. –Periytyy luokasta AbstractList, jolla on kaksi muutakin aliluokkaa. •Tärkeimpiä metodeja: –add (ylikuormitettu)lisää elementin listaan –clear tyhjentää listan –contains tutkii löytyykö etsittävä elementti listasta –get palauttaa elementin halutusta positiosta –isEmpty tutkii onko lista tyhjä –remove (ylikuormitettu) p oistaa elementin halutusta positiosta tai halutun elementin –set korvaa halutussa positiossa sijaitsevan elementin –size palauttaa listan elementtien lukumäärän

© Jukka Harju, 2005 Iterator -rajapinta •Iteraattori on olio, jonka avulla voidaan läpikäydä kokoelma (esim. ArrayList -olio). •Iteraattorille on käytettävissä metodit: –hasNext palauttaa arvon true, mikäli kokoelmassa on vielä elementtejä jäljellä –next palauttaa kokoelman seuraavan elementin –remove poistaa viimeksi palautetun elementin kokoelmasta •ArrayList -luokan oliolle saadaan luotua iteraattori seuraavasti: ArrayList lista = new ArrayList(); Iterator iter = lista.iterator(); •ArrayList -luokan iterator -metodi on peritty yliluokalta AbstractList.

© Jukka Harju, 2005 package fi.helia.harju.arrayList; import java.util.ArrayList; import java.util.Iterator; /** * ArrayList-luokan käyttöesimerkki * Jukka Harju */ public class ArrayListEsimerkki { private ArrayList lista; /** * Oletusmuodostin */ public ArrayListEsimerkki() { lista = new ArrayList(); } /** * Metodi tulostaa listan sisällön. */ public void tulostaLista() { if (lista.isEmpty()) { System.out.println("Tulostettava lista on tyhjä!"); } else { System.out.println("Tulostettavan listan sisältö:"); Iterator iter = lista.iterator(); while (iter.hasNext()) { System.out.print(iter.next() + " "); } System.out.println(); } } Luokka sijaitsee pakkauksessa fi.helia.harju.arrayList Luokassa käytetään pakkauksessa java.util sijaitsevia luokkia

© Jukka Harju, 2005 /** * Metodi lisää listaan String-olion. * lisattavaData Listan viimeiseksi elementiksi lisättävä olio. */ public void lisaa(String lisattavaData) { lista.add(lisattavaData); } /** * Metodi lisää listaan taulukko-olion. * lisattavaData Listan viimeiseksi elementiksi lisättävä olio. */ public void lisaa(String[] lisattavaData) { for (int i = 0; i < lisattavaData.length; i++) { lista.add(lisattavaData[i]); } } /** * Metodi palauttaa listan ensimmäisen solmun sisällön. * Listan ensimmäisen solmun sisältämä olio. */ public Object haeEnsimmainen() { return lista.get(0); } /** * Metodi palauttaa listan viimeisen solmun sisällön. * Listan viimeisen solmun sisältämä olio. */ public Object haeViimeinen() { return lista.get(lista.size()-1); }

© Jukka Harju, 2005 /** * Metodi etsii ja tulostaa halutun olion sijainnin listalla. * etsittava Listasta etsittävä olio. */ public void etsi(Object etsittava) { int indeksi = lista.indexOf(etsittava); if (indeksi >= 0) { System.out.println( "Etsimäsi solmu " + etsittava + " sijaitsee listan positiossa " + indeksi + "."); } else { System.out.println( "Lista ei sisällä etsimääsi solmua " + etsittava + "."); } } /** * Metodi poistaa listasta olion. * poistettava Listasta poistettava olio. */ public void poista(Object poistettava) { lista.remove(poistettava); } }

© Jukka Harju, 2005 package fi.helia.harju.arrayList; public class ArrayListTesti{ public static void main(String[] args) { ArrayListTesti testaaja = new ArrayListTesti(); testaaja.testaa(); } /** * Metodi sisältää varsinaisen testikoodin. */ public void testaa(){ // luodaan uusi lista ja tulostetaan sen sisältö ArrayListEsimerkki esim = new ArrayListEsimerkki(); esim.tulostaLista(); // lisätään listaan yksittäinen solmu esim.lisaa("Seppo"); esim.tulostaLista(); //lisätään listaan taulukon tiedot (2 solmua) String[] taulukko = {"Matti", "Teppo"}; esim.lisaa(taulukko); esim.tulostaLista(); //tulostetaan ensimmäisen solmun sisältö System.out.println("\nEnsimmäinen solmu:"+esim.haeEnsimmainen()); //tulostetaan viimeisen solmun sisältö System.out.println("\nViimeinen solmu:"+esim.haeViimeinen()); //etsitään solmuja esim.etsi("Jaakko"); esim.etsi("Seppo"); esim.poista("Seppo"); System.out.println("Poistettiin solmu 'Seppo'"); esim.etsi("Seppo"); } }

© Jukka Harju, 2005 Esimerkin pakettihierarkia •Edellisen esimerkin koodit olivat paketissa fi.helia.harju.arrayList. •Käyttöjärjestelmässä hierarkia näkyy seuraavasti: •Suoraan javac-komentoa käytettäessä täytyy komento antaa paketteja käytettäessä hierarkian ylätasolla: M:\ict02d_luennot\utilEsimerkit>javac fi\helia\harju\arrayList\*.java •IDE-ympäristöt kuten Eclipse huolehtivat pakettihierarkiasta automaattisesti.

© Jukka Harju, 2005 Javadoc •Javadocilla saadaan kätevästi muodostettua html- muotoinen dokumentaatio oman ohjelman luokista. •Edellinen esimerkki oli kommentoitu javadocin mukaisesti: –kommentit aloitetaan /** -merkinnällä –jokaisen kommenttirivin alussa * –kommentit lopetetaan */ -merkinnällä –ohjelman alussa seuraavat kommentit •kuvaus: mikä ohjelma on kyseessä -tagin jälkeen •versio / -tagin jälkeen –metodia edeltävät seuraavat kommentit •kuvaus: mikä metodi on kyseessä •parametrien -tagilla •paluuarvon tagilla

© Jukka Harju, 2005 Javadoc •Javadocin kotisivu Webissä: – •Javadoc-kommenttien kirjoitusohjeet: – •Ajetaan edellisen esimerkin koodeista Javadoc- tiedostot ja katsotaan miltä lopputulos näyttää.

© Jukka Harju, 2005 Javadocin generointi pakkauksen fi kaikista alipakkauksista. Haluttaessa voidaan javadocille antaa optiolla –d kohdekansio, johon dokumentaatio generoidaan. M:\ict02d_luennot\utilEsimerkit>javadoc -version -author -sourcepath.\ -subpackages fi Loading source files for package fi.helia.harju.ArrayList... Constructing Javadoc information... Standard Doclet version 1.4.2_04 Generating constant-values.html... Building tree for all the packages and classes... Building index for all the packages and classes... Generating overview-tree.html... Generating index-all.html... Generating deprecated-list.html... Building index for all classes... Generating allclasses-frame.html... Generating allclasses-noframe.html... Generating index.html... Generating packages.html... Generating fi\helia\harju\ArrayList\package-frame.html... Generating fi\helia\harju\ArrayList\package-summary.html... Generating fi\helia\harju\ArrayList\package-tree.html... Generating fi\helia\harju\ArrayList\ArrayListEsimerkki.html... Generating fi\helia\harju\ArrayList\ArrayListTesti.html... Generating package-list... Generating help-doc.html... Generating stylesheet.css... M:\ict02d_luennot\utilEsimerkit>

© Jukka Harju, 2005 Javadoc •Dokumentaatio aukeaa syntyneestä index.html-tiedostosta. •Käyttö kuten Java-APIn käyttö.

© Jukka Harju, 2005 Calendar -luokka •Calendar -luokka on tarkoitettu päivämäärien käsittelyyn. •Sijaitsee Javan util -pakkauksessa. •Kohtaat Calendar -luokan käyttötarpeen Javassa todennäköisesti heti ensimmäisiä "todellisia" sovelluksia tehdessäsi. •Seuraavassa tutustutaan Calendar -luokan pääpiirteisiin.

© Jukka Harju, 2005 Calendar -luokka •Calendar -luokka on abstrakti, ts. siitä ei voida luoda olioita. •Javan util-paketissa on Calendar -luokasta periytetty konkreettinen GregorianCalendar -luokka, josta olio voidaan luoda: GregorianCalendar calendar = new GregorianCalendar(); •Mikäli varaudutaan monimuotoisuuden käyttötarpeeseen: Calendar calendar = new GregorianCalendar(); •Oletusmuodostin alustaa kalenterin alkuajaksi luontihetken.

© Jukka Harju, 2005 Calendar -luokka •Kalenterin sisältöön viitataan kenttien avulla, joista yleisimpiä on lueteltu seuraavassa taulukossa. •Kenttien nimet ovat luokkavakioita, ts. Niiden käyttö tapahtuu käyttö luokan nimen kautta. •Esim. Calendar.SECOND Kentän nimiKentän sisältö DATEKuukauden päivän numero. Numerointi alkaa yhdestä. MONTHKuukauden numero. Numerointi alkaa nollasta! YEARVuosiluku. HOUR_OF_DAYTunnit 24-tuntisessa muodossa. MINUTEMinuutit. SECONDSekunnit.

© Jukka Harju, 2005 Calendar -luokka •Calendar -luokka sisältää metodit –void set(int field, int value)set –int get(int field)get •Metodeissa arvo field, tarkoittaa em. kentän määrittäviä luokkavakioita. •Yo metodien avulla päästään kenttäkohtaisesti käsittelemään kalenterin sisältöä. •Esim. Calendar kalenteri = new GregorianCalendar(); kalenteri.set(Calendar.DATE, 15);

© Jukka Harju, 2005 Calendar -luokka •Calendar -luokka sisältää myös metodin: –void add(int field, int amount)add •add -metodilla voidaan halutun kentän arvoa kasvattaa / vähentää. Muutokset muihin kenttiin tulevat automaattisesti huomioiduiksi. •Esim. –luodaan kalenteri, alkuarvoksi Calendar kalenteri = new GregorianCalendar(2004,12-1,31); –kasvatetaan päivää yhdellä kalenteri.add(Calendar.DATE,1); –kasvatuksessa vaihtuu myös vuosi –kalenteri sisältää nyt päiväyksen

© Jukka Harju, 2005 import java.util.Calendar; import java.util.GregorianCalendar; /** * Calendar luokan käyttöesimerkki. * Jukka Harju */ public class CalendarEsimerkki { public static void main(String[] args) { CalendarEsimerkki suorittaja = new CalendarEsimerkki(); suorittaja.aja(); } public void aja(){ // luodaan kalenteri oletusmuodostimella --> // kalenterin ajaksi tulee luontihetki Calendar kalenteri = new GregorianCalendar(); tulostaAika(kalenteri); //set-metodilla voidaan asettaa halutun kentän arvo kalenteri.set(Calendar.DATE,30); kalenteri.set(Calendar.MONTH,(4-1)); tulostaAika(kalenteri); //add-metodilla voidaan kasvattaa haluttua kenttää kalenteri.add(Calendar.DATE,1); tulostaAika(kalenteri); //add-metodilla voidaan vähentää haluttua kenttää kalenteri.add(Calendar.DATE,-1); tulostaAika(kalenteri);

© Jukka Harju, 2005 //tietokanta-ohjelmoinnissa tarvitaan Timestamp-luokkaa //Calendar-olio saadaan muunnettua Timestamp-olioksi seuraavasti.. java.sql.Timestamp aikaleima = new java.sql.Timestamp(kalenteri.getTimeInMillis()); System.out.println("Aikaleima = "+aikaleima); //..ja Timestamp-olio takaisin Calendar-olioksi seuraavasti Calendar kalenteri2 = new GregorianCalendar(); kalenteri2.setTimeInMillis(aikaleima.getTime()); tulostaAika(kalenteri2); //kalenterin saa "tyhjennettyä" (ajaksi January 1, :00: GMT) //clear-metodilla kalenteri2.clear(); tulostaAika(kalenteri2); } /** * Metodi tulostaa kalenterin sisältämän ajan muodossa * DD.MM.YYYY HH:MI:SS. * kalenteri Tulostettava kalenteri. */ public void tulostaAika(Calendar kalenteri){ String aika = kalenteri.get(Calendar.DATE)+"."+ //huom! kuukausien numerointi alkaa nollasta (kalenteri.get(Calendar.MONTH)+1)+"."+ kalenteri.get(Calendar.YEAR)+" "+ kalenteri.get(Calendar.HOUR_OF_DAY)+":"+ kalenteri.get(Calendar.MINUTE)+":"+ kalenteri.get(Calendar.SECOND); System.out.println("Kalenteri-olion sisältö = "+aika); } }

© Jukka Harju, 2005 Lisäesimerkki ArrayListin ja päivämäärän käytöstä •Tehtävä: –Selvitä kaikki kuluvan vuoden ja seuraavan vuoden 13. päivä perjantait. Tulosta löydetyt päiväykset. –Käytä tiedonvälityksessä ArrayList -luokan oliota.

© Jukka Harju, 2005 Ratkaisu import java.util.ArrayList; import java.util.Iterator; import java.util.Calendar; import java.util.GregorianCalendar; /** * Tutkitaan milloin sattuu olemaan 13. päivä ja perjantai. * Jukka Harju */ public class PaivatArrayListiin { public static void main(String[] args) { PaivatArrayListiin suorittaja = new PaivatArrayListiin(); suorittaja.aja(); } public void aja(){ ArrayList paivalista = new ArrayList(); //tutkitaan ja tulostetaan vuoden päivä perjantait selvitaPaivat(paivalista,2005); System.out.println("Vuoden päivä perjantait:"); tulostaLista(paivalista); //tutkitaan ja tulostetaan vuoden päivä perjantait paivalista.clear(); selvitaPaivat(paivalista,2006); System.out.println("\nVuoden päivä perjantait:"); tulostaLista(paivalista); }

© Jukka Harju, 2005 /** * Metodi tallettaa kaikki kuluvan vuoden 13. perjantai * päivät listaan. * talteen Lista johon päivät taltioidaan. vuosi Tutkittava vuosi. */ public void selvitaPaivat(ArrayList talteen, int vuosi){ GregorianCalendar kalenteri = new GregorianCalendar(vuosi,1-1,1); GregorianCalendar loppupvm = new GregorianCalendar(vuosi+1,1-1,1); kalenteri.setFirstDayOfWeek(Calendar.MONDAY); while(kalenteri.equals(loppupvm)==false){ if(kalenteri.get(Calendar.DATE)==13 && kalenteri.get(Calendar.DAY_OF_WEEK)==Calendar.FRIDAY){ GregorianCalendar talletettava = new GregorianCalendar(); talletettava.setTime(kalenteri.getTime()); talteen.add(talletettava); } kalenteri.add(Calendar.DATE,1); } }

© Jukka Harju, 2005 /** * Metodi tulostaa listan sisällä olevien GregorianCalendar-olioiden pvm:t. * lista Tulostettava lista. */ public void tulostaLista(ArrayList lista){ Iterator i = lista.iterator(); int x = 1; while(i.hasNext()){ GregorianCalendar kalenteri = (GregorianCalendar) i.next(); String aika = kalenteri.get(Calendar.DATE)+"."+ (kalenteri.get(Calendar.MONTH)+1)+"."+ kalenteri.get(Calendar.YEAR); System.out.println("Listan sisältämä "+x+". päivä:"+aika); x++; } } }