Programmeren in Java/Klassen: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
DimiC88 (overleg | bijdragen)
k Navigatie sjabloon verwijderd.
DimiC88 (overleg | bijdragen)
k herschikking en eerste zet tot herschrijven.
Regel 1:
{{Programmeren in Java|Deel=Klassen}}
In dit hoofdstuk zullen we onze eerste klasse aanmaken en kort de basis bespreken. De klasse die we gaan maken is ''Car'' ofwel de auto die we in het vorige hoofdstuk hebben besproken.
Eigenlijk is programmeren in Java het schrijven van classes (klassen in het Nederlands). Een klasse is een samenhangend geheel van variabelen en methodes.
 
==KlassenKlasse aanmaken==
Een klasse definiëren is redelijk eenvoudig, je gebruikt hiervoor de sleutelwoorden ''public'' en ''class'' dit wordt dan gevolgd door de naam de klasse in ons geval ''Car''. ''class'' zal dus aanduiden dat we klasse gaan definiëren, wat ''public'' betreft daar komen we in een later hoofdstuk op terug. Er wordt dan een openende en sluitende accolade geschreven. Die accolades gaan later de inhoud, dus de eigenschappen en methodes, van de klasse bevatten.
De definitie van een class is eenvoudig:
<syntaxhighlight lang="java">
public class Car {
 
}
{{Code
| Taal=Java
| Titel=
| Code=
<syntaxhighlight lang="java" line>
class MyClass { }
</syntaxhighlight>
}}
 
Klassen kun je in hun eigen Java bestand plaatsen, je moet dan wel als bestandsnaam dezelfde naam geven als de klasse die het bevat. Dus in dit geval ''Car.java''. Nu we de klasse hebben gedefiniëerd en bewaard willen we er een instantie van hebben, we moeten dus een object maken op basis van de klasse. Dit doen we als volgt:
is een correcte definitie van een class, die helaas niets doet. Door het toevoegen van methodes wordt het mogelijk om de class iets te laten doen:
 
<syntaxhighlight lang="java">
{{Code
public class Main {
| Taal=Java
 
| Titel=Dummy.java
public static void main(String[] args) {
| Code=
Car myCar = new Car();
<syntaxhighlight lang=java>
public class Dummy {
public void doSomething() {
System.out.println("Hallo");
}
}
</syntaxhighlight>
}}
 
Net zoals met primitieve datatypes vermelden we eerst het datatype, in dit geval ''Car'', gevolgd door de naam die we willen geven aan ons object, net zoals gewone variabelnamen. We gebruiken dan het gelijkaanteken(=) om er een waarde aan te koppelen. We moeten dus een nieuwe instantie aanmaken van onze ''Car'' klasse, daarom gebruiken we het sleutelwoord ''new'' opnieuw gevolgd door de naam van de klasse met dan ronde haakje. Bovenstaande code zal uiteindelijk niets op het scherm tonen, want het enige wat we hebben gedaan is een instantie van ''Car'' aanmaken. Wil je controleren of je code goed werkt kun je ''myCar'' laten uitprinten, zoals als volgt:
Deze niet al te spannende variant op "Hello world" laat een aantal belangrijke eigenschappen van een methode zien. Op regel 2 wordt een methode beschreven met de naam doSomething. De keywords public en void geven aan door welke Java classes deze methode te gebruiken is en wat de methode als waarde teruggeeft. In dit geval is de methode door alle classes in de JVM aan te roepen. void geeft aan dat de methode niets teruggeeft.
<syntaxhighlight lang="java" highlight=5>
public class Main {
 
public static void main(String[] args) {
{{Code
Car myCar = new Car();
| Taal=Java
System.out.println(myCar);
| Titel=Omdraaier.java
| Code=
<syntaxhighlight lang="java" line>
public class Omdraaier {
public String draaiOm(String invoer) {
return new StringBuilder(invoer).reverse().toString();
}
}
</syntaxhighlight>
}}
 
Bovenstaande zal iets gelijkaardigs als onderstaande uitprinten.
Nu gebeuren er interessantere dingen. De methode draaiOm op regel 2 geeft aan dat deze aangeroepen kan worden met een String als argument. Bovendien geeft de methode een String terug. Het zal geen verbazing wekken dat deze methode de invoer omgedraaid teruggeeft. Verder wordt er een andere class gebruikt, StringBuilder. Er wordt een nieuw object aangemaakt van de class StringBuilder. Bij het aanmaken van de StringBuilder wordt de waarde van de variabele invoer meegegeven en wordt de reverse() methode van StringBuilder aangeroepen. Vervolgens wordt van dit resultaat weer een String gemaakt door het aanroepen van toString(). Deze String wordt teruggegeven als resultaat van de methode doordat er een return voor staat.
<pre>
Car@2eda0940
</pre>
 
==Structuur Methodes ==
De structuur van een class is in feite simpel: binnen de definitie van een class worden velden en methoden beschreven. Over het algemeen zullen deze velden en methoden met elkaar samenhangen.
 
Nu hebben we wel een klasse, het heeft nog geen enkele functionaliteit. Daarvoor gaan we methodes toevoegen.
{{Code
| Taal=Java
| Titel=HogerLager.java
| Code=<syntaxhighlight lang=java>
1: public class HogerLager {
2: private int antwoord = 7;
3: private int aantalPogingen = 0;
4: private final int maxPogingenToegestaan = 3;
5: public void raad(int getal) {
6: aantalPogingen++;
7: if (aantalPogingen > maxPogingenToegestaan) {
8: System.out.println("Maximale aantal pogingen is verbruikt.");
9: }
10: if (getal == antwoord) {
11: System.out.println("Gefeliciteerd!");
12: }
13: if (getal < antwoord) {
14: System.out.println("Hoger, nog " + (maxPogingenToegestaan - aantalPogingen) + " keer raden");
15: }
16: else {
17: System.out.println("Lager, nog " + (maxPogingenToegestaan - aantalPogingen) + " keer raden");
18: }
19: }
20: public HogerLager() { }
21: }
</syntaxhighlight>
}}
 
Deze class implementeert het spelletje hoger-lager. Om dit te kunnen spelen moet er een te raden waarde zijn, een teller die bijhoudt hoeveel pogingen er geweest zijn, een instelling voor het maximale aantal pogingen dat is toegestaan en een manier om degene die raadt te vertellen wat de uitkomst is. Al deze zaken zijn aanwezig in deze class.
 
==Velden==
Regel 110 ⟶ 72:
 
== Constructors ==
Een constructor wordt aangeroepen op het moment dat er een nieuwe instantie van een klasse wordt gemaakt. Elke keer als het keyword new wordt gebruikt betekent dit dat er een constructor wordt aangeroepen. Constructors zijn methoden met het verschil dat een constructor geen waarde teruggeeft en dat de naam van een constructor altijd gelijk is aan de naam van de klasse.
 
In Velden.java is een constructor gedefinieerd op de regels 5 tm 8. Elke Java klasse '''moet''' een constructor hebben, al is het mogelijk om zelf een klasse te schrijven die geen constructor bevat. Voor zo'n klasse maakt de compiler automatisch een constructor aan.
 
==MethodenStructuur==
De structuur van een class is in feite simpel: binnen de definitie van een class worden velden en methoden beschreven. Over het algemeen zullen deze velden en methoden met elkaar samenhangen.
Methoden zijn de acties die een klasse uit kan voeren. In de voorgaande voorbeelden zijn diverse voorbeelden te vinden, zoals de methode getAantal() in Velden.java. Een methode heeft een naam, bijvoorbeeld getAantal. Een methode geeft mogelijk een waarde terug, in dit geval een int. Verder kan een methode een zogenaamde access modifier hebben, in dit geval is dat public. Verder kan een methode ook parameters verwachten:
 
{{Code
| Taal=Java
| Titel=OptellenHogerLager.java
| Code=
<syntaxhighlight lang=java>
1: public class OptellenHogerLager {
2: private int antwoord = 7;
2:
3: publicprivate int telOp(int a, intaantalPogingen b)= {0;
4: private final returnint amaxPogingenToegestaan += b3;
5: }public void raad(int getal) {
6: aantalPogingen++;
6: }
7: if (aantalPogingen > maxPogingenToegestaan) {
8: System.out.println("Maximale aantal pogingen is verbruikt.");
9: }
10: if (getal == antwoord) {
11: System.out.println("Gefeliciteerd!");
12: }
13: if (getal < antwoord) {
14: System.out.println("Hoger, nog " + (maxPogingenToegestaan - aantalPogingen) + " keer raden");
15: }
16: else {
17: System.out.println("Lager, nog " + (maxPogingenToegestaan - aantalPogingen) + " keer raden");
18: }
19: }
20: public HogerLager() { }
21: }
</syntaxhighlight>
}}
 
Deze class implementeert het spelletje hoger-lager. Om dit te kunnen spelen moet er een te raden waarde zijn, een teller die bijhoudt hoeveel pogingen er geweest zijn, een instelling voor het maximale aantal pogingen dat is toegestaan en een manier om degene die raadt te vertellen wat de uitkomst is. Al deze zaken zijn aanwezig in deze class.
De methode telOp verwacht twee parameters, elk van het type int. Een declaratie van een methode bestaat dus uit een access modifier (zie ook de volgende sectie voor meer informatie), een return type, een naam en een lijst met parameters (die leeg mag zijn). Verder bestaat de implementatie van de methode uit een code blok, in Optellen.java is dat alleen regel 4, maar in HogerLager.java is een veel langere methode te vinden.
 
Een speciaal return type is void. Een methode die void als return type heeft geeft niets terug. Bijgevolg wordt het sleutelwoord "return" weggelaten in methodes die niets teruggeven.
 
==Pass by value of pass by reference?==
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.