laki2014_luentorunko_luku_20

Download Report

Transcript laki2014_luentorunko_luku_20

20. Javan omat luokat
20.1
Sisällys
•
•
•
•
•
Application Programming Interface (API).
Pakkaukset.
Merkkijonoluokka String.
Math-luokka.
Kääreluokat.
20.2
Java API
• Java-kielen Application Programming Interface (API)
on kokoelma Javan omia luokkia, joista osa on
valmiiksi ohjelmoitu ja osa määrittelee rajapintoja.
• Javan versiokohtainen API-dokumentaatio on
luettavissa Internetissä. Esimerkiksi version 1.7
dokumentit löytyvät osoitteesta:
http://docs.oracle.com/javase/7/docs/api/index.html
− Linkki kurssin verkkosivuilla.
20.3
Pakkaukset
• API on jaettu pienempiin kokonaisuuksiin eli
pakkauksiin (package), koska Javan omia luokkia
on satoja.
• java.lang-pakkauksen luokkia (esimerkiksi String ja
Math) voidaan käyttää suoraan ilman eri pyyntöä.
• Pakkaukset sijaitsevat nimeään vastaavissa
alihakemistoissa: esimerkiksi java.lang-paketin
luokat ovat Java-ympäristön alihakemistossa
java\lang
20.4
Pakkaukset
• Nyt riittää tietää kuinka pakkauksen luokat saadaan
käyttöön - pakkauksia ei tarvitse osata tehdä itse.
• Pakkauksen luokat tuodaan ohjelman käyttöön
import-lauseella, jolla voidaan sisällyttää useampia
pakkauksia.
• import-lauseet tiedoston alkuun ennen luokkaa.
• // Esim. Käyttöön java.util-pakkauksen kaikki luokat.
import java.util.*;
public class PakettiTesti { … }
20.5
String-luokka
• Vaikka merkkijonot ovat String-luokan olioita, tämän
tyyppiset tunnukset voidaan esitellä, ja niihin
voidaan myös sijoittaa, alkeistyyppien tapaan.
• Esim.
String tervTre = "Moro!";
String tervKuo = new String("Päevee!");
• Merkkijonoliteraalit merkitään lainausmerkeillä.
• Pienet ja isot kirjaimet ovat eri asia.
• +-operaatiolla merkkijonoihin voidaan yhdistää
alkeistyyppisiä arvoja ja merkkijonoja.
20.6
String-luokka
• Luokan palvelut saatavilla ilman import-lausetta.
• Koska String-luokan metodit eivät kuulu omaan
ohjelmaan (luokkaan), metodeja kutsutaan
pistenotaatiolla joko olion tai luokan nimen kautta.
• Esim.
String mjono = "ABC - kissa kävelee.";
int mjonoPit = mjono.length(); // 20
String mjono =
String.format("%.2f", osamaara);
20.7
String-luokka
• Merkkeihin viitataan nollasta alkavalla indeksillä.
Ensimmäinen kirjain on kohdassa 0, toinen kohdassa 1
ja viimeinen kohdassa n – 1, missä n on jonon pituus.
Indeksi
Merkki
0
J
1
a
2
v
3
a
• Indeksiarvoja annetaan monien String-luokan metodien
parametreiksi.
• Huom! Yksiulotteiset taulukot ovat eri asia kuin
merkkijonot!
20.8
Joitakin String-luokan metodeja
• int length()-metodi palauttaa merkkijonon pituuden.
• Esim.
String mjono = "Java";
int l = mjono.length(); // 4
• Tietty merkkijonon kirjain voidaan lukea char
charAt(int i)-metodilla, missä parametri i on indeksi
ja operaation tuloksen tyyppi char.
• Esim.
char toinenMerkki =
mjono.charAt(1);
// ′a′
20.9
Joitakin String-luokan metodeja
• int indexOf(int c)-metodi palauttaa merkin c
ensimmäisen paikan merkkijonossa. Mikäli
merkkijono ei sisällä merkkiä, palautetaan -1.
• Esim.
String mjono = "Java";
int i = mjono.indexOf('a');
// 1
int j = mjono.indexOf('q');
// -1
20.10
Joitakin String-luokan metodeja
• boolean equals(String s)-metodi tutkii ovatko
merkkijonojen merkit samat.
• Yhtä- ja erisuuruusoperaatiot (==, !=) eivät sovellu
merkkijonomuuttujien vertailuun.
• Esim.
String mjono1 = new String("Java");
String mjono2 = new String("Java");
// true
boolean samat1 = mjono1.equals(mjono2);
// false
boolean samat2 = mjono1 == mjono2;
20.11
Joitakin String-luokan metodeja
• valueOf(int c)-metodi muuntaa alkeistyyppisen
parametrinsa merkkijonoksi.
• Metodi on kuormitettu: parametri voi olla esimerkiksi
int- tai double-tyyppinen.
• Esim.
String klmjono = String.valueOf(123);
String llmjono = String.valueOf(1.23);
• String-tyyppistä merkkijonoa ei voi muuttaa.
− Ei metodia esimerkiksi yksittäisen merkin muuttamiseen.
− StringBuffer- ja StringBuilder-tyyppiset jonot muuttuvat.
20.12
String-luokka
public class VaihdaKirjain {
public static void main(String[] args) {
String sana = "Saari";
// Muutettava merkkijono.
char vanhaMerkki = 'a';
// Vanha merkki.
char uusiMerkki = 'i';
// Uusi merkki.
String apu = "";
// Väliaikainen muuttuja.
for (int i = 0; i < sana.length(); i = i + 1)
if (sana.charAt(i) == vanhaMerkki) // Löytyi vaihdettava merkki.
apu = apu + uusiMerkki;
else
// Jokin muu merkki.
apu = apu + sana.charAt(i);
sana = apu;
System.out.println(sana);
}
}
20.13
Math-luokka
• Luokan rakentaja yksityinen  Luokasta ei voida
luoda olioita.
• Vain luokkametodeja, joita kutsutaan luokan nimen
kautta.
• Esim.
// Satunnaisluku väliltä [0, 1[.
double satluku = Math.random();
20.14
Joitakin Math-luokan metodeja
• abs-metodi palauttaa parametrinsa itseisarvon.
• Metodi kuormitettu siten, että parametri voi olla
double-, float-, int- tai long-tyyppiä.
• Esim.
double lluku = -1.23;
lluku = Math.abs(lluku); // 1.23
int kluku = -10;
System.out.println(Math.abs(kluku)); // 10
20.15
Joitakin Math-luokan metodeja
min(a, b)
Palauttaa pienemmän parametreistaan a ja b.
max(a, b)
Palauttaa suuremman parametreistaan a ja b.
round(a)
Pyöristää liukulukutyyppisen parametrinsa.
Palauttaa pyöristetyn arvon.
pow(a, b)
Potenssiin korotus a b . Palauttaa tuloksen.
sqrt(a)
Neliöjuuren lasku
a . Palauttaa tuloksen.
20.16
Kääreluokat
• java.lang-pakkaus sisältää alkeistyyppejä vastaavat niin
sanotut kääreluokat (wrapper class).
− Esim. double-tyyppiä vastaa Double-luokka.
• Rakentajille voidaan antaa parametriksi joko alkeistyypin
arvo tai merkkijono.
− Esim. Double d = new Double(1.23);
− Java käärii alkeistyyppisiä arvoja myös automaattisesti.
− Esim. Double d = 1.23;
• Kääreluokkien valueOf-metodilla voidaan muuttaa
merkkijono kääreluokan olioksi ja toString-metodilla olio
merkkijonoksi.
− Esim. Integer luku = Integer.valueOf("10");
20.17