Opi
JAVA
Viimeinen muutos 04.10.2001
Kirjoittanut
Antti Veräjänkorva
Versio
1.4
JOHDANTO
Java kieli on hyvin kannattava kieli opiskella, koska sen käyttö Internetissä tulee varmasti yleistymään yhä enemmän. Nopeampien yhteyksien myötä tulee enemmän Java-appletteja. Javassa on hyviä ominaisuuksia ja ehkä kaikkein tärkein niistä on pohjasta riippumattomuus. Tämä on erittäin tärkeää varsinkin Internetissä, jossa käyttäjillä on eri laitteisto kokoonpanoja. Javan heikkous on sen hitaus, jonka pohjasta riippumattomuus tuo tullessaan. Hitautensa takia Java-appletteja ei juuri näy ’vielä’. Tämänkin takia Java on hyvin järkevä ohjelmointi vaihtoehto, koska silloin kun Javaa netissä aletaan käyttämään oikein toden teolla, on sinulla taito osata ohjelmoida kyseisellä kielellä.
Javalla voidaan ohjelmoida myös itsenäisiä ohjelmia. Nämä ohjelmat eivät siis tarvitse mikään laista Internetselainta (IE, Netscape), kuten Java-appletit. Varsinaista exe-tiedostoa ei Javan kääntäjä tee, mutta ohjelmien ajo onnistuu käskyllä ’Java [tiedoston nimi]’. Ohjelma on Javan tulkki, joka ajaa ohjelman. Appletteja voidaan siis ajaa internet selaimella, mutta myös ilman. Applet Viewer on ohjelma mikä simuloi internet selainta. Applet Viewer ohjelmalla onnistuu siis applettien ajo vai pitäisikö puhua testauksesta. Internetselaimessa moista käskyä ei tietenkään tarvita vaan appletti saadaan sivulle tietyllä koodiriveillä, jotka ovat seuraavat.
<applet
code="alkuun.class"
width="320"
height="240">
</applet>
Java ohjelmien lataamisesta ja kääntämisestä tulee vielä lisää tietoa, myöhemmin tutoriaalissa. Kyseiset operaatiot ovat yksinkertaisia ja helppoja.
Tutoriaalin oppien sisäistäminen ei edellytä aikaisempaa ohjelmointi kokemusta eikä kovinkaan kummoista tietokone osaamista. Tietokoneen käytön perusteet ja HTML kielen perusteet olisi kuitenkin hyvä osata.
1.0
Java alkeet vähän syvemmin
1.1
Kommentit
1.2
Muuttujat
1.3
Muuttuja tyypit
1.4
Operaattorit
1.5
Ehtolauseet
1.6
Toistolauseet
1.7
Taulukot
1.8
STRING-olio
2.0
Oliot
2.1
Mikä on olio
2.2
Kuinka olioita käytetään
2.3
Perintä
2.4
Koostaminen
2.5
Metodit
2.6
Rajapinnat
3.0
Käyttöliittymä
3.1
BUTTON
3.2
LABEL
3.3
SCROLLBAR
3.4
CHECKBOX
3.5
TEXTFIELD
3.6
TEXTAREA
3.7
CHOICE
3.8
LIST
4.0
Pohjat
eli Layout
4.1
PANEL
4.2
FLOWLAYOUT
4.3
CARDLAYOUT
4.4
BORDERLAYOUT
4.5
GRIDLAYOUT
4.6
GRIDBAGLAYOUT
5.0
Ikkunat
5.1
Ikkuna
5.2
Dialogi
6.0
Grafiikka
6.1
Erilaisia geometrisia kuvioita
6.2
Kuvat verkosta
7.0
Kiitos
Java kieli on helppo oppia, jos olet aiemmin koodannut vaikka C/C++ kielillä. Toki C/C++ kieletkin ovat helppo oppia Javan jälkeen. Ohjelmointi kokemusta ei kuitenkaan tarvita vaan kaikki asiat käydään läpi.
Tässä luvussa tehdään yksinkertainen Java ohjelma, applettina ja itsenäisenä ohjelmana. Luvussa tutustutaan myös ohjelmien kääntämiseen ja niiden ajamiseen.
Terve maailma
Jos olet lukenut jonkin ohjelmointi kirjan olet törmännyt riviin ’terve maailma tai hello world’. Seuraava harjoitus on varmasti eniten koodattu ohjelma maailmassa tai ainakin melkein. Ohjelman nimi on yllättäen terve maailma. Ohjelma tulostaa näyttöön rivin missä lukee terve maailma. Tässä ohjelmassa sanonta ’yksinkertainen on hienoa’ ei todellakaan pidä paikkaansa. Ohjelma on kyllä yksinkertainen, mutta säälittävän näköinen.
Ensimmäinen homma kun alat kirjoittaa ohjelmaa on, että avaat jonkin teksti editorin (notpad). Kirjoittaessasi koodia on muistettava pari asiaa.
- Älä käytä lihavointia tai muita tyyliominaisuuksia
- Älä vaihtele fontteja.
- Teksti pitää tallentaa ASCII muotoon.
- Java ohjelman tai appletin pääte on oltava java. Eli näin ohjelma.java
Siinä oli ensimmäiset asiat jotka pölähti mieleen.
Noin nyt kun tiedämme miten kirjaimia ruutuun hakataan niin voimmekin aloittaa pikku, pikku ohjelmamme.
/* Tämä ohjelma
kirjoittaa
ruutuun tekstin. */
import java.applet.*;
import java.awt.*;
public class text extends
Applet
{
public void
init() {
setBackground(Color.white);
}
public void
paint(Graphics g) {
g.drawString("Terve maailma !!!", 10, 10);
}
}
Yllä oleva koodi on appletti eli sitä on mahdollista käyttää vain selaimessa. Nyt kun ohjelma on valmis voimme tallentaa ja kääntää sen.
Ohjelma pitää tallentaa java pääteiseksi. Eli tallenna ohjelma terve.java nimiseksi.
Ohjelma käännettään niin, että avaat ensin Dos promptin ja kirjoitat seuraavan rivin.
Javac on Javan kääntäjä eli se tekee koodista toimivan ohjelman. Kuitenkin ennen kuin Javac voi toimia joka puolella konetta pitää autoexec.bat tiedostoa muuttaa. Autoexec.bat tiedosto on C-aseman juuressa. Kirjoita C-aseman juuressa edit autoexec.bat. Kirjoita sinne uusi rivi, joka kuuluu näin. SET PATH=Java kääntäjän paikka eli polku. Nyt olet valmis.
Koska odotat jo
malttamattomasti milloin näet mitä tuo ohjelma tekee niin näytetään se nyt. Tee
nettisivu. Eli avaa sama teksti editori jolla teet Java ohjelmia ja kirjoita
seuraavat rivit.
<HTML>
<HEAD>
<TITLE>Terve maailma</TITLE>
</HEAD>
<BODY>
<applet code="terve.class"
width="320"
height="240">
</applet>
</BODY>
</HTML>
Tallenna koodi nimellä index.html ja klikkaa syntynyttä tiedostoa.
Nyt nettisivulla on hieno Java-appletti. Eli sivulla lukee ’Terve maailma’.
Nyt katsotaan mitä kaikki tuo koodi oikein tarkoittaa. Tässä kannattaa nyt olla tarkkoina, koska tätä tietoa tullaan tarvitsemaan koko ajan kun Javaa ohjelmoidaan. Ensimmäiset rivit :
import
java.applet.*;
import java.awt.*;
Tarkoittavat
sitä, että luokalle tuodaan applet ja awt paketit. Rivien perässä on merkit
.*;. Javassa jokainen käsky loppuu ;-merkkiin ja .* tarkoittavat, että luokka
saa myös awt ja applet pakettien alipaketit. Paketit ovat joukko luokkia, jotka
on pakattu pakettiin.
Seuraavaksi rivi public class text extends Applet.
Rivi tarkoittaa, että luokan on julkinen ja luokan nimi on text. Luokka perii myös Applet luokalta.
{}-merkkejä Javassa käytetään koodin rajaamiseen (Pascal kielessä vastaavat ovat BEGIN JA END).
public void init() {.
Appletin suoritus alkaa tästä metodista. Se siis pitää
löytyä jokaisesta appletista. Metodissa määritellään taustaväri rivillä
setBackground(Color.white);
Piirto-metodi määritellään tällaisella rivillä public
void paint(Graphics g) {
Eli tuo tarkoittaa, että metodi on julkinen se ei palauta mitään arvoa ja luokan nimi on paint.
g.drawString("Terve maailma !!!", 10, 10);
Tämä rivi sitten tulosti tekstin appletiin, kohtaan X10 ja Y10.
Tuossa tulikin sitten kerrottua riviriviltä mitä koodi tarkoitti. No tällaista selitys muotoa ei tulla enää näkemään, koska se on mukavan työläs isommissa ohjelmissa.
Ja tuli vissiin luvattua, että tuosta rakennellaan myös itsenäinen versio eli.
public class text
{
public static void main(String args[])
{
System.out.println("Terve maailma !!!");
}
}
Koodi teki vähän niin kuin aiempikin, mutta vain DOS puolella. Eli selvitellään mitä koodi tarkoitti. Luokan määrittely onkin jo selvä. Metodissa sen sijaan löytyy uusi sana ja se STATIC. Tämä tarkoitta, että metodin jakavat kaikki luokan ilmentymät (tätä voi käyttää myös muuttujissa).
Seuraava outo rivi onkin tulostus rivi. Teksti tulostamiseen käytetään System.out luokan println()-metodia. Siinä se eikä varmasti ollut vaikeaa, mutta älä huoli kyllä se vaikea paikkakin vielä tulee vastaan.
Kun olet kääntänyt ohjelman voit ajaa sen kirjoittamalla DOS-promptiin seuraavaan komentorivin.
Nyt kun olemme ihastelleet hienoa ohjelmaamme riittävän pitkään niin siirrytään eteenpäin. Nyt pääsemme jo lukuun jossa on numerokin.
1.0
Java alkeet vähän syvemmin
Javassa on enemmänkin tiedettävää kuin aiemmin esitellyt jutut. Nyt tässä luvussa käydään läpi monia asioita mm.
- Kommentit
- Muuttujat
- Muuttuja tyypit
Kaikki mainitut asiat on oltava hallussa, jotta voisit rakennella kunnollisia sovelluksia. Kommenttien tärkeys on hyvin merkittävä varsinkin yritys ympäristössä.
Kommentti on koodin joukossa oleva teksti, mikä ei vaikuta tulevaan ohjelmaan. Vaan se on ainoastaan ohjelmoijaa varten oleva muistiteksti. Javan kääntäjä jättää automaattisesti moiset tekstit huomiotta eli niitä voi kirjoitella mielin määrin koodin sekaan.
// Kommentti
Yllä on yksi vaihtoehto tehdä kommentti. Merkit // ovat sen merkki, että kaikki noiden merkkien jälkeen, samalla rivillä oleva teksti on kommenttia.
On olemassa myös toinen mahdollisuus kommentin tekoon. Merkit /* */ sulkevat sisäänsä kommentin.
/* Tämä on
kommentti kahdella rivillä. */
Kommentteja kanttaa käyttää aina kun muistaa, jaksaa tai viitsii. Kommentoiminen on erittäin tärkeää varsinkin kun annat koodisi jollekin toiselle jatkokehitykseen. Toisen tekemää kommentoimatonta koodia on kamala lukea ja yrittää selvittää mitä se tekee missäkin.
Muuttujia käytetään tiedon tallentamiseen. Tieto pysyy muuttujassa (muistipaikka) niin kauan kunnes ohjelma on päällä tai jos muuttujan arvoa ei muuteta. Muuttujien käyttö on lähes pakollista kun koodaamme ohjelmia millä tahansa ohjelmointi kielellä. C kieltä tai C++ kieltä koodanneet voivat heittää hellät hyvästit osoitin muuttujille. Niitä ei meinaan vastaan tule.
Muuttujia on monia eri tyyppisiä. Eri tyyppisiin muuttujiin voidaan tallentaa vain muuttujan tyyppistä dataa. Seuraavassa Javan muuttuja tyypit :
Tyyppi |
Käyttötarkoitus |
Koko biteissä |
|
BYTE |
Tavuja |
8 |
|
SHORT |
Pieniin kokonaislukuihin |
16 |
|
CHAR |
Unicode-merkkejä |
16 |
|
INT |
Normaalit kokonaisluvut |
32 |
|
LONG |
Isot kokonaisluvut |
64 |
|
FLOAT |
Liukuluvut |
32 |
|
DOUBLE |
Tarkemmat liukuluvut |
64 |
Jos ihmettelet missä on STRING, niin se ei kuulu muuttujiin. Javassa merkkijonot ovat olioita. Tämän takia ei kannata loikata alas parvekkeelta, koska se ei vaikeuta asioita mitenkään. No STRING oliosta lisää myöhemmin.
Javassa on monenlaisia operaattoreita. Käymme nyt läpi nämä operaattorit. Javassa operaattoreita käytetään sijoittamaan arvoja, vertailuun, laskutoimituksiin, yms.
Sijoitusoperaattori
Tätä käytetään annettaessa muuttujalle arvo.
int = 0; // Tässä on
sijoitusoperaattori
Vertailuoperaattoreilla vertaillaan arvoja keskenään. Näitä käytetään useimmiten ehto- ja toistolauseissa. Operaattori palauttaa, myös TRUE arvon jos kyseinen tehtävä on tosi ja FALSE jos tehtävä ei ole tosi.
|
== |
Yhtä suuri |
|
!= |
Eri suuri |
|
< |
Pienempi kuin |
|
> |
Suurempi kuin |
|
<= |
Pienempi tai yhtä suuri
kuin |
|
>= |
Suurempi tai yhtä suuri
kuin |
Emme ole käyneet vielä läpi ehtolausetta, mutta siitä tulee nyt kuitenkin esimerkki.
public class luku
{
public static void main(String args[])
{
int luku =
10; // Sijoitusoperaattori =
if (luku
< 10) // Vertailuoperaattori <
System.out.println("Joo luku on pienempi kuin 10.");
else
System.out.println("Luku ei ole pienempi kuin 10.");
}
}
Näitä operaattoreita tarvitaan kun halutaan vertailla enemmän kuin kaksi lukua samassa ehtolauseessa. Äskeinen selitys oli kyllä niin heikko, että otamme heti pienen taulukon ja esimerkin.
|
! |
EI |
|
&& |
JA |
|
|| |
TAI |
Ja nyt sitten esimerkki aiheesta.
if ((luku < 10) && (luku > 0) // Looginen operaattori && eli JA.
Nämä operaattorit ovat tuttuja laskutoimituksia. Niitä tarvitaan luonnollisesti laskujen laskentaan. Eli operaattorit ovat seuraavat.
|
+ |
Yhteenlasku |
|
- |
Vähennyslasku |
|
/ |
Jakolasku |
|
* |
Kertolasku |
|
% |
Jakojäännös |
Muunto operaattoreita käytetään yleensä lisäämään tai vähentämään jostain luvusta 1. Yleinen käyttökohde on silmukat. Eli operaattorit ovat.
|
++ |
Lisää yksi |
|
-- |
Vähennä yksi |
|
-= |
Vähennä luku |
|
+= |
Lisää luku |
|
*= |
Kerro luku |
|
/= |
Jaa luku |
Näitä käytetään vain bittitasolla. Usein näkee bittioperaatioita käytettävän Grafiikka ohjelmoinnissa.
|
<< |
Siirrä vasemmalle |
|
>> |
Siirrä oikealle |
|
& |
JA |
|
| |
TAI |
|
^ |
XOR |
|
~ |
EI |
Bittitason operaattorit ovatkin sitten muita operaattoreita konstikkaampia. Näitä ei tarvita useinkaan ainakaan alussa. Eli se siitä. Käymme bittitason operaattoreita läpi tutoriaalissa ”Grafiikkaa Javalla”.
Ehtolauseita tarvitaan ohjelmissa yleensä paljon, koska niillä ohjaillaan paljolti ohjelman osien suoritus järjestystä. Niiden nimen omainen tarkoitus on katsoa onko ehto tosi vain ei.
Ehtolause Javassa on IF. Eli pieni esimerkki if lauseesta.
if (luku < 10)
// Koodia 1
else
// Koodia 2
IF-lause suorittaa koodia 1 kohdan jos ehto pitää paikkansa eli luku on pienempi kuin 10. ELSE tarkoittaa sitä, että jos ehto ei ole tosi niin tämän jälkeinen kohta suoritetaan eli koodia 2.
Suoritettavat koodit voidaan kirjoittaa {}-merkkien väliin jolloin merkkien välissä oleva koodi kuulu sille ehdolle jonka jälkeen merkit kirjoitetaan. Seuraavassa esimerkki tästä.
if (luku
< 10) {
// Koodia 1
// Koodia lisää
}
else {
// Koodia 2
// Koodia lisää
}
Ehtolauseen kanssa voidaan käyttää mukavasti loogisia operaattoreita kuten aiemmin näimme. Siltä varalta, että olet sen unohtanut tai epähuomiossa jättänyt huomiotta niin tässä esimerkki.
if ( (luku
< 10) && (luku > 0) ) {
// Koodia 1
// Koodia lisää
}
else {
// Koodia 2
// Koodia lisää
}
Näin saadaan helposti rajattua vaikka alueita ruudulta, mutta tästä lisää tutoriaalissa ”Grafiikkaa Javalla”. Ehtolauseita kannattaa treenata, koska ohjelman toiminta on pitkälti kiinni ehtolauseista. Lopuksi vielä pieni esimerkki.
public class luku
{
public static void main(String args[])
{
int luku =
10;
if (luku !=
10)
System.out.println("Joo luku on erisuuri kuin 10.");
else
System.out.println("Luku ei ole erisuuri kuin 10.");
}
}
Javassa on toinenkin ehtolause SWITCH. Tämä ehto lause ottaa numeron ja vertaa CASE kohdan perässä olevaan arvoon ja jos se täsmää niin suoritetaan koodia seuraavaan BREAK kohtaan saakka.
public class text
{
public static void main(String args[])
{
int luku=1;
switch (luku)
{
case 1:
luku = 50;
break;
case 2:
luku = 100;
break;
}
System.out.println("Luku on "+luku);
}
}
Toistolauseet ovat erittäin tärkeitä kaikissa ohjelmissa. Eivät ihan niin tärkeitä kuin ehtolauseet, mutta melkein. Toistolauseilla voidaan toistaa jotain ohjelman osaa halutun monta kertaa. Toistojen kanssa saadaan pienellä pähkinällä aikaan mielenkiintoisia juttuja.
Nyt kuitenkin pysymme ihan perusteissa ja teemme vain pikku toiston (loop), joka tulostaa ruutuun numerot 1:stä 10:neen. Ohjelma on hyvä harjoitus ja siinä tuleekin esille monia läpikäytyjä asioita eli, jos sisäistät tämän olet jo jyvällä Java ohjelmoinnissa.
Tässä on nyt sitten ohjelma mikä tulostaa numerot 0-10.
public class luku
{
public static void main(String args[])
{
int luku=0;
for (luku
= 0; luku<11; luku++)
System.out.println("Luku on "+luku);
}
}
Javassa on enemmänkin toistolauseita kuin yksi. Käymme nyt läpi WHILE lauseen
WHILE on aivan yhtä yksinkertainen kuin FOR lausekin. WHILE lausetta toistetaan niin kauan kuin ehto on tosi.
public class luku
{
public static void main(String args[])
{
int luku=0;
while (luku
< 11) {
System.out.println("Luku on "+luku);
luku ++; }
}
}
Äskeinen koodi tulostaa numerot 0:sta 10:neen.
Taulukot ovat erittäin hyödyllisiä pikku ominaisuuksia. Niihin voidaan ladata tietoa aivan kuin muuttujiin, mutta taulukkoon voi ladata monta eri arvoa. Eri arvoja kutsutaan taulukon solun INDEX numerolla.
Muodostan nyt taulukon jossa on 10 solua. Jokainen solu saa eri numero arvon. Ihan lopuksi numerot tulostetaan ruutuun.
public class taulukko
{
public static void main(String args[])
{
int[] taulukko
= new int[10];
for (int i=0; i < 10; i++)
taulukko[i] = i;
for (int i=0; i<10; i++)
System.out.println("Luku on
"+taulukko[i]);
}
}
Taulukoista voidaan muodostaa myös moniulotteisia.
int[][] taulukko = new int[10][10];
Nyt voimme laskea taulukkoon vaikka kertotaulun.
public class taulukko
{
public static void main(String args[])
{
int[][] taulukko
= new int[10][10];
for (int i=0; i < 10; i++)
for (int j=0; j < 10; j++)
taulukko[i][j] = i*j;
for (int i=0; i<10; i++)
for (int j=0; j < 10; j++)
System.out.println("Luku on
"+taulukko[i][j]);
}
}
Moniulotteisia taulukoita tarvitaan paljon 3D ohjelmoinnissa, ja kutsumme niitä matriiseiksi. Taulukot voivat tietysti olla mitä tahansa tyyppiä. Niihin voidaan ladata vaikka olioita, jos se on tarpeen.
Kuten jo aiemmin kerroin STRING ei ole muuttuja tyyppi vaan olio. Sen takia ei myöskään saanut loikata alas parvekkeelta. Se että STRING on olio ei tee tätä yhtään vaikeammaksi. Sitä tuskin edes huomaa.
STRING olio määritellään aivan kuin muuttujakin.
String merkkijono = ”Moikka”;
Tuollainen esitys tapa ei kelpaa muille oliolle, mutta STRING on säännön vahvistava poikkeus (hyvä niin). STRING oliolla on ominaisuuksia joita alamme heti miten käymään läpi.
Merkkijonoja voidaan yhdistellä + operaattorilla, tähän tapaan.
String merkkijono = ”Terve ”+toinen_mjono;
Toinen_mjono voisi olla vaikka int tyyppiä ja se ei aiheuttaisi ongelmaa, koska STRING muuttaa int tai jonkin muun tyypin automaattisesti STRING yhteensopivaksi. Tästä toimenpiteestä vastaa toString() metodi. STRING oliolla on muitakin ominaisuuksia.
|
IndexOf(String) IndexOf(Char) |
Hakee merkkijonosta
halutun merkin. |
|
lastIndexOf(String) lastIndexOf(Char) |
Hakee merkkijonosta
halutun merkin aloittaen haun lopusta. |
|
toUpperCase() |
Muuntaa merkkijonon
kirjaimet isoiksi. |
|
toLowerCase() |
Muuntaa merkkijonon
kirjaimet pieniksi. |
|
toString |
Muuttaa tyypin
merkkijonoksi. |
|
compareTo(String) |
Vertaa kahta merkkijonoa. |
|
equals(String) |
Ovatko merkkijonot samoja. |