User Tools

Site Tools


linuxbog:java:java-lok-obj-klasse-var
Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31
forrige næste

Kapitel 8. Lokale, objekt- og klassevariable

Indhold:

  • Klassevariable
  • Repetition af objektvariabler og lokale variabler
  • Rekursion

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;

8.1. Eksempler i standardpakkerne

Du har allerede benyttet dig af et par statiske metoder og variabler.

8.1.1. Klassevariable

Der er mange klassevariableri standardpakkerne. Af de oftest brugte kan nævnes

  • Math.PI - værdien af pi er en klassevariabel i Math-klassen (pakken java.lang).
  • System.out - systemoutputtet er et PrintStream-objekt, der bl.a. har metoderne print() og println(). Objektet er en klassevariabel i System-klassen (pakken java.lang).
  • Color.black - et Color-objekt, der repræsenterer sort. Objektet ligger som en klassevariabel i (selvsamme) Color-klasse (pakken java.awt).

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.

8.1.2. Klassemetoder

Af nyttige klassemetoder kan nævnes

  • Matematiske funktioner som Math.random(), Math.sin(double x), Math.cos(double x), Math.sqrt(double x), Math.abs(double x), Math.exp(double x), Math.log(double x), Math.pow(double x, double y), Math.max(double x, double y), Math.min(double x, double y), …
  • Double.parseDouble(String s) returnerer værdien af s som et kommatal. Nyttig til at fortolke brugerindtastede tal. F.eks. giver Double.parseDouble(“3.553”) tallet 3.553.
  • Integer.parseInt(String s) returnerer værdien af s som et heltal. F.eks. giver Integer.parseInt(“13”) tallet 13.
  • String.valueOf(double d) gør det modsatte af Double.parseDouble, den returnerer nemlig en streng, som repræsenterer et flydende kommatal. String.valueOf(3.21) giver altså strengen “3.21”. Findes også med int, byte, char etc. som parameter.
  • Character.isDigit(character t) returnerer true eller false afhængigt af om tegnet t er et ciffer. Ligeledes findes Character.isLetter(character t), Character.isLetterOrDigit(character t), Character.isLowerCase(character t), Character.isUpperCase(character t) og Character.isWhitespace(character t). Den sidste undersøger om t er et usynligt tegn, f.eks. mellemrum, linjeskift, tabulator.
  • System.exit() - stopper programudførelsen og afslutter Java.
  • main-metoden, som du selv erklærer, når du skriver et program, f.eks. BenytBoks.main(). Når et program startes, er det altid main, der kaldes. På dette tidspunkt eksisterer der endnu ingen objekter, og main er da også en klassemetode. Der oprettes aldrig nogen BenytBoks-objekter!

forrige hjem næste
Opgaver Lokale variabler og parametre
linuxbog/java/java-lok-obj-klasse-var.txt · Last modified: by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki

Brug af AI : Al tekst kán være uddrag af AI genereret tekst og kan være fejlbehæftet.
AI kan lave fejl og det kan mennesker også, men al tekst er gennemgået af et menneske for fejl, og personlig bias kan være tilføjet.