Indhold:
Forudsættes ikke i resten af bogen.
ForudsætterKapitel 5, Definition af klasser.
De variabler, vi er stødt på indtil nu, har enten været lokale variabler eller objektvariabler.
Objektvariabler hedder sådan, fordi de bliver oprettet for hvert objekt.
Der findes også variabler, der eksisterer “i klassen”, uafhængigt af om der bliver oprettet objekter. Disse kaldes klassevariable og erklæres med nøgleordet static , og de kaldes også statiske variabler.
Herunder ses et eksempel på en klassevariabel og en klassemetode (antalBokse).
Klassevariabler og -metoder vises med understregning i UML-notationen (diagrammet til højre).
Figur 8-1. Java
{linuxbog:java:Nordfalk915416.png}
public class Boks4
{
private double længde; //// objektvariabel// private double bredde; //// objektvariabel// private double højde; //// objektvariabel// //private static int antalBokse;// //// klassevariabel// public Boks4(double lgd, double b, double h)
{ //// lgd, b og h er lokale variabler// længde = lgd;
bredde = b;
højde = h;
antalBokse = antalBokse + 1;
} //public static int læsAntalBokse()// //// klassemetode// {
return antalBokse;
}
public double volumen()
{ //// vol er en lokal variabel// double vol;
vol = længde*bredde*højde;
return vol;
}
}
Variablen antalBokse er en klassevariabel, fordi den er erklæret med static-nøgleordet. Dette betyder, at variablen er tilknyttet klassen, og at alle Boks-objekter deler den samme variabel. Der vil eksistere én og kun én antalBokse-variabel, uanset om der oprettes 0, 1, 2 eller 100 Boks-objekter.
Variablerne bredde, højde og længde er objektvariabler, fordi hvert Boks-objekt har tilknyttet en af hver.
Og for fuldstændighedens skyld: Variablen vol er en lokal variabel, fordi den er erklæret lokalt i volumen-metoden og altså kun eksisterer, når volumen-metoden udføres. Ligeledes med lgd, b og h: De eksisterer kun i Boks' konstruktør.
En klassemetode er en metode, der er erklæret static. Den arbejder på klasseniveau (uafhængigt af om der er skabt nogen objekter) og kan derfor ikke anvende objektvariabler eller -metoder.
Vi kan afprøve Boks4 med:
public class BenytBoks4
{
public static void main(String args[])
{
System.out.println("Antal bokse: "+ //Boks4.læsAntalBokse()// );
Boks4 boksen;
boksen = new Boks4(2,5,10);
System.out.println("Antal bokse: "+ //Boks4.læsAntalBokse()// );
Boks4 enAndenBoks, enTredjeBoks;
enAndenBoks = new Boks4(5,5,10);
enTredjeBoks = new Boks4(7,5,10);
System.out.println("Antal bokse: "+ //Boks4.læsAntalBokse()// );
}
}
Resultatet bliver:
Antal bokse: 0 Antal bokse: 1 Antal bokse: 3
Inde fra objektet bruges statiske variabler og metoder ligesom de almindelige variabler og metoder. Det ses f.eks. i Boks' konstruktør:
antalBokse = antalBokse + 1;
Du har allerede benyttet dig af et par statiske metoder og variabler.
Der er mange klassevariableri standardpakkerne. Af de oftest brugte kan nævnes
Som det ses, er klassevariabler nyttige til variabler, der er tilgængelige overalt. Det er det nærmeste man kommer globale variabler i Java, som det kendes fra andre programmeringssprog.
Af nyttige klassemetoder kan nævnes