Saturday, April 1, 2006

Java tutorial - Elementen

Intro|Basics|Elementen|Bouwstenen|Datatypen|Operatoren|Toegangscontrole|Draaiboek|Foutenafhandeling|Objecten|Uitvoeren

Werken met de Java code

Declareren (declarations)

Voordat je met de elementen (klassen, variabelen, methoden en objecten) kan werken, moet je ze eerst declareren (aangeven, vaststellen). De constructie van een declaratie is als volgt:

<toegangsmodifier(s)> <element type> <benaming>

De toegangsmodifier(s) zijn zogezegd de verkeersregelaars van de Java code. Deze zijn optioneel, het kan leeg blijven, het kan er maar één zijn of er zijn er meerdere. Deze worden uitgebreid beschreven in het hoofdstuk Toegangscontrole.

De element type is verplicht. De klasse heeft altijd de element type class. Bij de variabelen geeft het aan wat voor een datatype of object de variabele is. Bij de methoden geeft het aan wat voor een antwoord de methode geeft. De element type moet dan overeenkomen met de inhoud van de return statement van de methode. Er kunnen methoden zijn die helemaal niet antwoorden, dan moet je als element type void invullen.

Tot slot de benaming; deze spreekt wel voor zich. De voorwaarden voor een goede benaming kun je in het hoofdstuk Bouwstenen - Benamingen lezen.

In het onderstaand voorbeeld worden de klasse, twee variabelen en twee methoden gedeclareerd.

// De klasse "Auto" wordt gedeclareerd.
public class Auto {

    // De twee variabelen "toerental" en "verlichtingAan" worden gedeclareerd.
    // De eerste kan alleen een "int" bevatten en de tweede een "boolean".
    private int toerental;
    private boolean verlichtingAan;

    // De methode "starten" wordt gedeclareerd. Deze methode geeft
    // geen antwoord en wordt derhalve als "void" gedeclareerd.
    public void starten() {
        toerental = minimumToerental;
        verlichtingAan = true;
    }

    // De methode "berekenAantalZitplaatsenVrij" wordt gedeclareerd. Deze methode
    // geeft een "int" als antwoord en wordt derhalve als "int" gedeclareerd.
    public int berekenAantalZitplaatsenVrij() {
        int aantalZitplaatsenVrij = maximumZitplaatsen - zitplaatsenBezet;
        return aantalZitplaatsenVrij;
    }

}

In het voorbeeld worden de standaard waarden van het toerental en de verlichting ingesteld in de vorm van twee variabelen toerental en verlichtingAan. Het toerental staat standaard op nul en de verlichting staat standaard uit. De twee methoden starten() en getAantalZitplaatsenVrij() worden beschreven. De methode starten() beschrijft dat het toerental moet worden bijgesteld naar het minimum toerental en dat de verlichting ingeschakeld moet worden. Deze methode geeft geen antwoord, de element type void geeft dat ook aan. De methode getAantalZitplaatsenVrij() berekent het aantal zitplaatsen dat nog vrij is en beantwoordt dat in de vorm van een int, dat een cijfer kan bevatten.

Terug naar boven

Constructeur (constructor)

De constructeur is een speciale methode dat exact dezelfde naam heeft als de klasse, inclusief de hoofdletters. Deze methode wordt áltijd aangeroepen wanneer je een object van deze klasse wil aanmaken. De declaratie van een constructeur methode is overigens niet verplicht. Wanneer je geen constructeur declareert, dan maakt de compiler in de bytecode wel impliciet een lege constructeur aan.

// De klasse "Auto".
public class Auto {

    // De constructeur wordt gedeclareerd.
    public Auto() {
        maakAuto();
        aantalAutos++;
    }

}

In dit geval wordt eerst een nieuwe standaard auto aangemaakt. Na het aanmaken van de auto wordt de teller aantalAutos met 1 stap toegenomen.

Er kunnen meerdere constructeur methoden naast elkaar bestaan, elk afhankelijk van de invoer. Bijvoorbeeld:

// De klasse "Auto".
public class Auto {

    // De eerste constructeur wordt gedeclareerd.
    public Auto() {
        maakAuto();
        aantalAutos++;
    }

    // De tweede constructeur wordt gedeclareerd.
    public Auto(String merkType) {
        autoMerkType = merkType;
        maakAuto();
        aantalAutos++;
    }

}

De eerste constructeur maakt gewoon een standaard auto aan. Dit is handig wanneer je geen merk en type weet (of niet wilt opgeven) en toch een auto wil hebben. De tweede constructeur maakt een specifieke auto aan aan de hand van de opgegeven merk en type.

Terug naar boven

Instanties (instances)

Een object dat is gedeclareerd in de vorm van een variabele is een instantie. Deze variabele wordt een referentie-variabele genoemd; het refereert naar een object van een (vaak andere) klasse. Het is zeg maar een dynamische variabele, waarmee je alle toegankelijke methoden van die klasse kunt aanroepen. Je kunt vanuit een willekeurige klasse een object instantieren (aanmaken) als volgt:

// Een andere klasse.
public class AndereKlasse {

    // Het object wordt gedeclareerd als een referentie-variabele. De referentie-
    // variabele "standaardAuto" wordt bekend gemaakt als een instantie van de klasse
    // "Auto". De referentie-variabele "standaardAuto" is op dit moment nog leeg.
    Auto standaardAuto;

    // Het object wordt geinstantieerd (aangemaakt). De referentie-variabele
    // "standaardAuto" is nu gevuld met een standaard auto.
    standaardAuto = new Auto();

}

Dit kan ook korter in 1 regel en je kunt ook gebruik maken van een andere constructeur:

// Een andere klasse.
public class AndereKlasse {

    // Declareer de referentie-variabele "standaardAuto" en instantieer deze meteen
    // met een standaard auto.
    Auto standaardAuto = new Auto();

    // Declareer de referentie-variabele "alfaRomeo156" en instantieer deze meteen
    // met het gewenste auto. Dit maakt gebruik van de tweede constructeur, dat een
    // invoer van het merk en type accepteert.
    Auto alfaRomeo156 = new Auto("Alfa Romeo 156 1.9 JTD SW");

}
Terug naar boven

Referenties (references)

Een referentie is zoals hierboven uitgelegd dus een variabele dat naar een object van een klasse refereert. Je kunt meerdere referenties van één object hebben. Al deze referenties van één object bij elkaar worden aliasen genoemd.

// Een andere klasse.
public class AndereKlasse {

    // Instantieer de referentie "standaardAuto1".
    Auto standaardAuto1 = new Auto();

    // Declareer de referentie "standaardAuto2" als een alias van "standaardAuto1".
    Auto standaardAuto2 = standaardAuto1;

}

Je hebt nu dus twee identieke referenties van een standaard auto. Deze kunnen beiden vanaf het instantieren wel een eigen leven gaan leiden.

Terug naar boven

Aanroepen (to invoke)

Het aanroepen van de methoden van een object wordt gedaan met behulp van een punt (.). Wanneer je een auto wilt starten, dan moet je de methode starten() van de klasse Auto als volgt aanroepen:

// Een andere klasse.
public class AndereKlasse {

    // Declareer en instantieer de referentie "alfaRomeo156".
    Auto alfaRomeo156 = new Auto("Alfa Romeo 156 1.9 JTD SW");

    // Start de auto "alfaRomeo156"
    alfaRomeo156.starten();

}

Hiermee wordt dus de methode starten() van de klasse Auto aangeroepen:

// De klasse "Auto".
public class Auto {

    // De methode "starten".
    public void starten() {
        toerental = minimumToerental;
        verlichtingAan = true;
    }

}

De toerental wordt nu dus gelijkgesteld aan de minimum toerental van een Alfa Romeo 156 1.9 JTD SW. Tevens wordt de verlichting ingeschakeld.

Terug naar boven

Parameters (parameters, params)

De parameters van de methoden (hier vallen constructeurs dus ook onder) worden gebruikt om specifieke informatie te leveren, waarmee een methode verder kan werken. De parameters van een methode moet je tussen de haakjes definieren. Wanneer je een methode met de parameters wil aanroepen, dan moeten de element typen exact dezelfde zijn. Je kunt meerdere methoden maken met dezelfde benaming, maar met allemaal verschillende typen invoerparameters. Dit wordt overigens method overloading genoemd, zie ook Objecten - Methoden overladen.

// Een andere klasse.
public class AndereKlasse {

    // Declareer de referentie-variabele "standaardAuto" en instantieer deze meteen
    // met een standaard auto zonder invoerparameters.
    Auto standaardAuto = new Auto();

    // Declareer de referentie-variabele "alfaRomeo156" en instantieer deze meteen
    // met het gewenste auto dat je via de invoerparameters kunt invoeren.
    Auto alfaRomeo156 = new Auto("Alfa Romeo 156 1.9 JTD SW");

}

Hiermee worden in dezelfde volgorde dus de volgende constructeur methoden aangeroepen:

// De klasse "Auto".
public class Auto {

    // De eerste constructeur.
    public Auto() {
        maakAuto();
        aantalAutos++;
    }

    // De tweede constructeur dat een invoerparameter van het type String accepteert.
    public Auto(String merkType) {
        autoMerkType = merkType;
        maakAuto();
        aantalAutos++;
    }

}
Terug naar boven


In het volgende hoofdstuk wordt de grammatica van de Java code ontleed: Bouwstenen.

Copyright - Niets van deze pagina mag worden overgenomen zonder uitdrukkelijke toestemming.

(C) April 2006, BalusC

No comments: