Lecture overview -- Keyboard shortcut: 'u'  Previous page: Statiske egenskaber af en klasse i Java -- Keyboard shortcut: 'p'  Next page: Udførelse [Section] -- Keyboard shortcut: 'n'  Lecture notes - all slides and notes together  slide -- Keyboard shortcut: 't'  Help page about these notes  Alphabetic index  Course home  Play sound for this page -- Keyboard shortcut: 'y'  Page 21 : 33
Forelæsningsnoter i Objekt-orienteret Programmering
Objekt-orienteret programmering i Java, del 2
Initialisering af klassevariable i Java

Kontruktorerne har til opgave at initialisere instansvariablene i Java. Men hvordan initialiseres klassevariablene i Java. Det er problemstillingen vi ser på her.

Static variable initialiseres enten i forbindelse med deres erklæring, eller i en særlig statisk initialiseringsblok i klassen

I langt de fleste situation kan statiske variabel initialiseres med en 'initializer' umiddelbart i forlængelse af definitionen:
    static Type obj = new Type(...)
I specielle tilfælde (hvor der kan opstå fejl der ønskes håndteret) kan denne løsning ikke anvendes. I sådanne situationer er static blocks nødvendige.


static{
  kommando-liste
}

Syntaksen af en static block, hvori statiske variable (klasse variable) kan initialiseres. Semantisk set udføres blokkens kommandoer kun én gang, nemlig når klassen 'loades'.

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/Circle.javaEt eksempel på en statisk initialiseringsblok.

Et eksempel på en statisk initialiseringsblok. En klasse som viser et eksempel på brugen af en statisk initialiseringsblok. I blokken initialiseres to arrays som tabellægger sinus og cosinus i et interval. Vi forestiller os, at en sådan tabel kan være nyttig i Circle klassen, og ikke mindst hurtigere end beregning af sinus og cosinus via funktionskald. Eksemplet er taget fra bogen 'Java in A Nutshell', 2, edition, af David Flanagan, fra O'Reilly.

Java understøtter også en instans initialiseringsblok.

Konstruktorer er dog tilstrækkelige i næsten alle initialiseringssituationer

Instans initialiseringsblokke er en sædvanlig blok af kommandoer, som kan placeres en vilkårlig sted i en klasse. I forbindelse med skabelse af objekter bliver sådanne blokke udført (i en ganske bestemt rækkefølge, på et ganske bestemt tidspunkt i forhold til konstruktoren: før klassens konstruktor, men efter udførelse af superklassen's konstruktor). Man kan placere vilkårligt program i sådanne blokke. Men lad vær'! Det vil ikke give gode programmer, og der er stor fare for, at en sådan programmeringsstil vil fjerne sig fra den objekt-orienterede stil vi går efter på dette kursus.