Volg de onderstaande video om te zien hoe je onze site als web-app op je startscherm installeert.
Opmerking: Deze functie is mogelijk niet beschikbaar in sommige browsers.

public class Auto{
//declaratie van de variabelen
final static maxbebouwdekom = 90;
final static maxautostrade = 120;
//Deze variabelen zijn final dus niet meer te wijzigen, en zijn static dus ze horen bij de klasse en niet bij elk Auto object
static double dieselprijs = 1.55;
//static want ze hoort bij de klasse, niet final want ze kan variëren
String merk;
double topsnelheid;
double verbruikliterper100km;
//Dit zijn variabelen die bij elk object verschillend zijn dus ze zijn niet static (dit noemen we objectvariabelen)
public static void WijzigDieselprijs(int nieuweprijs)
{dieselprijs = nieuweprijs;}
//Dit is een static methode want ze hoort bij de klasse en moet niet op elk Auto-object worden toegepast
public void berekenPrijs100km()
{
int prijs;
prijs = this.verbruikliterper100km*dieselprijs;
System.out.println("De auto kost" +prijs + " euro op 100 km");
}
//Dit is geen static methode want ze wordt toegepast op een object bijvoorbeeld a2.berkenPrijs100km();
}
Pudmeister zei:Als je dan objecten a1 en a2 van de klasse Auto maakt, kan je de objectvariabelen bereiken door a1.topsnelheid of a2.merk te schrijven. Dit is echter niet mogelijk bij een klassevariabele (static variabele) want die hoort niet bij een object (instantie) maar wel bij de klasse Auto in het algemeen.
NeverwinterX zei:Verwarrend genoeg laten de meeste programmeertalen die syntax wel toe.
Pudmeister zei:Tja normaal gezien gebruikt ge dit ook niet direct in Java aangezien het wordt aangeraden om objectvariabelen private te maken. Vanuit een andere klasse is het dan niet mogelijk om a1.topsnelheid uit te voeren. Men gebruikt dan een zogenaamde gettermethode die wel toegang heeft tot de variabele. In dit voorbeeld zou het dan worden: a1.getTopsnelheid() die de variabele topsnelheid van object a1 returnt.
Nu als ge bijvoorbeeld a1.dieselprijs (dieselprijs = static) invoert dan geeft elke fatsoenlijke Java-editor toch wel een error?
forloRn_ zei:Nee, wel een warning. Uiteindelijk is het ook niet fout, enkel verwarrend.
Of je members nu rechtstreeks aanspreekt of via een getter staat overigens los van de term static. Uiteindelijk kan je ook getters maken die static zijn; logischerwijs kunnen die enkel static members aanspreken.
forloRn_ zei:De verwarrende syntax is toch het aanspreken van static variabelen via een instance, niet? (Inderdaad)In welke zin gaat het private maken van instance-variabelen en getters voorzien, voorkomen dat je static variabelen via een instance kan aanspreken? Je mag een voorbeeldje geven hoor.
public class Auto{
private static double dieselprijs = 1.55;
private String merk;
private String model;
private int bouwjaar;
public Auto(String merk, String model, int bouwjaar)
{
this.merk = merk;
this.model = model;
this.bouwjaar = bouwjaar;
}
}
public class TestAuto{
Auto a1 = new Auto("Toyota", "Avensis", 2004);
System.out.println(a1.merk);
System.out.println(a1.dieselprijs); //ERROR: The field Auto.dieselprijs is not visible
}
Cycloon zei:Je kan wel nog steeds vanuit je auto-klasse aan je private static variabele. Jeej.
Anyway, ik begrijp je punt ook niet. Er is niks verwarrend aan een static variabele opvragen op een instantie van de bijhorende klasse. Quasi alle programmeertalen ondersteunen dat.
Cycloon zei:Ik zie niet waar de conceptuele fout zit, maar voel je vrij om het toe te lichten.
Cycloon zei:En ook al definieer je een statische variabele op klasse niveau, toch is ze ook onderdeel van alle instanties.
Cycloon zei:Omdat je een static oproept op een instance variabele begin je te spreken over 'bad design'. Als design van een applicatie al afhangt van een enkele regel code dan is het ver gekomen.