Programmeren in Java/Static: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
DimiC88 (overleg | bijdragen)
Nieuwe pagina aangemaakt met '{{Programmeren in Java|Deel=Klassen}} Nu dat je instanties van klassen hebt gemaakt, weet je dat iedere instantie verschillende waardes kunnen hebben voor hun velde...'
 
DimiC88 (overleg | bijdragen)
Geen bewerkingssamenvatting
Label: bewerking met nieuwe wikitekstmodus
Regel 5:
class Circle {
public int radius;
public double pi = 3.14;
 
public Circle(int radius, double pi) {
this.radius = radius;
this.pi = pi;
}
 
Regel 21 ⟶ 20:
 
public static void main(String[] args) {
Circle circle1 = new Circle(2, 3.14);
Circle circle2 = new Circle(2, 3.1414);
 
System.out.println("Oppervlakte van cirkel #1 is " + circle1.getArea());
System.out.println("Oppervlakte van cirkel #2 is " + circle2.getArea());
}
Regel 30 ⟶ 29:
</syntaxhighlight>
Dit toont het volgende op het scherm:
 
<pre>
Oppervlakte van cirkel #1 is 12.56
Oppervlakte van cirkel #2 is 1250.56424
</pre>
Om de oppervlakte te berekenen heb je pi nodig, we hebben in dit voorbeeld 3,14 gebruikt. Pi is echter een oneindig getal en als je een preciezer oppervlakte wilt berekenen moet je een langer getal gebruiken. Je kunt dan eventueel de waarde van pi veranderen in je klasse naar bijvoorbeeld 3,14159, maar wat als je het dynamisch wilt veranderen naar een ander getal wanner je programma draait? Dan moet je de waarde van pi veranderen in ieder object afzonderlijk hoewel pi voor ieder object hetzelfde zou moeten zijn. Zoals bijvoorbeeld als volgt:
 
<syntaxhighlight lang="Java">
public class Main {
 
public static void main(String[] args) {
Circle circle1 = new Circle(2);
Circle circle2 = new Circle(4);
 
System.out.println("Oppervlakte van cirkel #1 is " + circle1.getArea());
System.out.println("Oppervlakte van cirkel #2 is " + circle2.getArea());
 
circle1.pi = 3.14159;
circle2.pi = 3.14159;
 
System.out.println("Oppervlakte van cirkel #1 is " + circle1.getArea());
System.out.println("Oppervlakte van cirkel #2 is " + circle2.getArea());
}
}
</syntaxhighlight>
Met als restultaat:
<pre>
Oppervlakte van cirkel #1 is 12.56
Oppervlakte van cirkel #2 is 50.24
Oppervlakte van cirkel #1 is 12.56636
Oppervlakte van cirkel #2 is 50.26544
</pre>
 
Dit is natuurlijk correct, maar als je programma duizenden van zulke ''Circle'' objecten moet aanpassen moet er véél dubbel werk worden gedaan. Want elk ''Circle'' object heeft deze aanpassingen nodig.
 
==Statische velden==
Gelukkig kun je met statische velden dit vereenvoudigen. Een statisch veld is een veld die door alle instanties van een klasse worden gedeeld. Er wordt dus één waarde bijgehouden in dat veld. Om een veld statisch te maken moet je het sleutelwoord ''static'' gebruiken.
 
<syntaxhighlight lang="Java" highlight="3,24">
class Circle {
public int radius;
public static double pi = 3.14;
 
public Circle(int radius) {
this.piradius = piradius;
}
 
public double getArea() {
return pi * radius * radius;
}
}
 
 
public class Main {
 
public static void main(String[] args) {
Circle circle1 = new Circle(2);
Circle circle2 = new Circle(4);
 
System.out.println("Oppervlakte van cirkel #1 is " + circle1.getArea());
System.out.println("Oppervlakte van cirkel #2 is " + circle2.getArea());
 
Circle.pi = 3.14159;
 
System.out.println("Oppervlakte van cirkel #1 is " + circle1.getArea());
System.out.println("Oppervlakte van cirkel #2 is " + circle2.getArea());
}
}
</syntaxhighlight>
Dit zal hetzelfde resultaat geven als vorig voorbeeld. Je ziet hier ook dat het veld ''pi'' niet via een object wordt aangepast, maar door middel van de klasse.
 
Een statisch veld gebruiken heeft volgende voordelen:
* Je heb geen object van de klasse nodig, je kunt de aanpassing doen rechtstreeks op de klasse.
* Doordat je géén object nodig hebt, is het toegankelijk overal in je code waar je de klasse kunt importeren.
* Er is minder geheugen verbruik, het statisch veld moet slecht één keer bewaard worden voor alle objecten.
 
==Constante statische velden==
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.