Minimaalinen Java-ohjelma • Kaikki ohjelmakoodi on luokkamäärityksen sisällä • Ohjelma käynnistyy ”public static void main(String[] args)”-metodista • System.out.print() tai System.out.println() tulostaa tekstiä näytölle • Kommentit muotoa /*...*/,

Download Report

Transcript Minimaalinen Java-ohjelma • Kaikki ohjelmakoodi on luokkamäärityksen sisällä • Ohjelma käynnistyy ”public static void main(String[] args)”-metodista • System.out.print() tai System.out.println() tulostaa tekstiä näytölle • Kommentit muotoa /*...*/,

Minimaalinen Java-ohjelma
• Kaikki ohjelmakoodi on
luokkamäärityksen sisällä
• Ohjelma käynnistyy ”public static void
main(String[] args)”-metodista
• System.out.print() tai System.out.println()
tulostaa tekstiä näytölle
• Kommentit muotoa /*...*/, // tai
/**...*/
Javatyökalut
• Vapaasti haettavissa osoitteesta
www.javasoft.com
• ”javac”-työkalu kääntää ohjelman bytecodemuotoon (kääntäjä)
• ”java” suorittaa bytecode-muodossa olevan
ohjelman (virtuaalikone)
Muuttujien perustyypit
•
•
•
•
•
Kuten ”C”-kielessä
Tyyppi ”boolean” lisätty
Tyyppi ”int” 4 tavua, ”C”-kielessä 2 tavua
Vastaavasti ”long int” on 8 tavua
Muita tyyppejä luokkien avulla
Ohjausrakenteet
• Kuten ”C”-kielessä
–
–
–
–
–
if
while
for
do-while
switch
Tekstimuuttujat
• Erityinen luokka/tyyppi nimeltään String
• Ainoa operaatio mitä voi soveltaa on konkateeraus
operaattorilla ”+”
• String-muuttujan arvo voi muuttua, mutta ei itse
teksti
– ”heippa ” + ”maailma” luo uuden kopion kummastakin
tekstistä
• Voi vaikuttaa oudolta, mutta on erittäin kätevää!
Taulukot
• Olioita kuten melkein kaikki muukin
Javassa
• Taulukko-olion määrittely:
int[] kokotaulu;
• Luonti new-operaattorilla:
int[] kokotaulu = new taulu[10];
Omien luokkien määrittely
class OmaLuokka
{
// Jotakin koodia
}
• Käytettävä ”public”-määrettä mikäli
halutaan käyttää muissa lähdetiedostoissa
Ilmentymämuuttujat ja -metodit
• Ilmentymämuuttujat määritellään luokan
sisällä, ei metodin sisällä
• Ilmentymämetodit samoin
• Avainsanaa ”static” ei käytetä
ilmentymämuuttujille eikä –metodeille!
Avainsana ”this”
• Metodin koodissa viittaa ”tähän” olioon, eli siihen
olioon jolle metodia on kutsuttu
• Esim:
public class Joku {
private int jokin;
public void asetaJokin(int jokin) {
this.jokin = jokin;
}
}
Konstruktorimetodi
• Alustaa uuden olion toivottuun tilaan
• Samanniminen kuin luokka
• Tulee yleisesti olla näkyvyyttä ”public”
Luokkamuuttujat ja -metodit
• Määritellään aivan kuten ilmentymä-vastaaville,
mutta lisäksi avainsana ”static”
• Sekä ilmentymä- että luokkametodit voivat käyttää
sekä luokkamuuttujia että –metodeita
• Luokkametodit eivät voi suoraan käyttää
ilmentymämuuttujia eikä kutsua suoraan
ilmentymämetodeita
• ”this” avainsanaa ei voi käyttää luokkametodeissa
Periytyminen
• Luokka voi olla toisen luokan aliluokka
• Aliluokka perii yliluokan ominaisuudet, eli
muuttujat ja metodit
• Säästää koodia ja tekee ohjelmista
vakaampia je helpommin ylläpidettäviä
”super”
• Voidaan käyttää aliluokan metodeissa kun
viitataan yliluokan ominaisuuteen tai
metodiin
• super() on yliluokan konstruktori
• super.jokinMetodi() kutsuu yliluokan
metodia jokinMetodi
• super voi viitata yliluokan yliluokkaan tai
siitä eteenpäin
Rajapintaluokat (interface)
• Määrittelee uuden tyypin, mutta ei uutta
luokkaa
• Ei mahdollista luoda interface-olioita
• Työkaluja ohjelmistojen määrittelyyn sekä
ylläpidettävyyden helpottamiseen
Abstrakti luokka
• Rajapintaluokan ja luokan välimuoto
• Määrittelee mahdollisesti joitakin muuttujia
ja/tai metodeja
• Ei mahdollista luoda olioita abstrakteista
luokistas
• Käytetään silloin kun osa useamman luokan
muuttujista/metodeista on yhteisiä, mutta
kun nämä eivät ole hyödyllisiä yksistään
Sovelmat (applet)
• Graafisia ohjelmia joita käytetään Internetselaimissa
• Luokan java.applet.Applet aliluokkia
• public void paint(Graphics)-metodilla
voi piirtää kuvia tai kuvioita
• Voi myös käyttää muita yleisiä
käyttölittymäelementtejä (nappuloita, listoja, ...)
• Rajatut oikeudet paikalliseen koneeseen ja
verkkokytkentöihin
Piirtämistä
• Luokka Graphics tarjoaa perusoperaatiot
piirtämiselle
–
–
–
–
–
viivat: drawLine(...)
neliskulmiot: drawRect(...), fillRect(...)
ovaalit: drawOval(...), fillOval(...)
teksti: drawString(...)
j.n.e.
Ohjelmat graafisilla
käyttöliittymillä
• Frame-luokka vastaa ohjelmaikkunaa
• Minimaalinen graafinen käyttöliittymä:
public class FrameTest {
public static void main(String[] args) {
Frame f = new Frame();
f.setSize(100, 100);
f.show();
}
}
Ikkunalayoutit
• FlowLayout: asettaa komponentit peräkkäin, ei
muuta niiden kokoa
• GridLayout: asettaa komponentit taulukkoon,
kaikkien komponenttien koko sama
• BorderLayout: komponentit viidellä alueella keskellä tai sivuilla, muuttaa komponenttien kokoa
• Muita: CardLayout, GridBagLayout
• Voidaan yhdistää käyttäen alipaneeleja (luokkaa
Panel)
Reagoiminen käyttäjän toimiin
• Nappuloiden painamiset, hiiren siirrot,
ikkunoiden siirrot ja koon muutokset, ...
• Listener-rajapintaluokkien avulla
• Komponentteja ”kuunnellaan” kutsumalla
komponentin addXxxxListenermetodia
• Kuuntelijan on toteutettava rajapintaluokan
määrittelemät metodit
Pakkaukset
• Ryhmittelevät luokkia yhteen loogisina
kokonaisuuksina
• Esim. java.awt-paketti sisältää Javan perusluokat
graafisille käyttöliittymille
• Paketti otetaan käyttöön avainsanalla ”import”
• Luokka pakettiin avainsanalla ”package” tiedoston
ensimmäisellä rivillä
• Pakkaukset välttävät nimikonflikteja
Näkyvyysalueet
• Muuttujat ja metodit:
– private: vain luokan sisällä
– protected: vain luokassa ja aliluokissa sekä kaikissa
saman paketin luokissa
– public: näkyy kaikille
– ei määrettä: näkyy saman paketin luokissa
• Luokat:
– private: vain saman tiedoston sisällä
– public: näkyy kaikille
Poikkeukset
• Tapa käsitellä virhetilanteita
• ”throw”: heitetään poikkeus virheen sattuessa
• ”try-catch”: varaudutaan nappaamaan poikkeus
kiinni ja mahdollisesti käsittelemään se
• Poikkeus jota ei käsitellä missään johtaa ohjelman
keskeyttämiseen
• Luokan ”RuntimeException” tai aliluokkien
poikkeuksia ei ole pakko ottaa etukäteen
huomioon
Tekstitiedostojen luku ja
kirjoittaminen
• Lukemista varten luodaan olio:
BufferedReader infile = new BufferedReader(
new InputStreamReader(
new FileInputStream(”tiedosto.txt”)));
• Kirjoittamista varten vastaavasti:
PrintWriter outfile = new PrintWriter(
new FileOutputStream(”tiedosto.txt”));
• Poikkeukset otettava huomioon
• Luku-ja kirjoitusluokat ketjutetaan halutun
toiminnon aikaansaamiseksi