Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;

Lignende præsentationer


Præsentationer af emnet: "Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;"— Præsentationens transcript:

1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;

2  Jens Bennedsen 2001Multimedie programmering10C.2 “What’s in a name?” –Brian spillede blændende i søndags! –Skolen ligger i Viby –Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten er med til at definere navnets betydning. Beskeden “Ring til Kirsten og sig at...” fortolkes vidt forskelligt på arbejde og hjemme!

3  Jens Bennedsen 2001Multimedie programmering10C.3 Navne i Java Hvad betyder følgende? i = i + 1; Det kommer an på hvilken af følgende erklæringer der gælder: class Scope { int i; public void pip() { String i; i = i + 1; }

4  Jens Bennedsen 2001Multimedie programmering10C.4 Erklæringer i Java –Reglen i Java er at alle navne skal erklæres (eller importeres) før de kan bruges. Eneste undtagelse er navne fra java.lang der automatisk importeres til alle filer (String, Math, Thread,...). –Navne kan erklæres i filer (gælder dog kun navne på klasser), i klasser og i metoder. I denne sammenhæng skal vi indskrænke os til at betragte navne på variabler erklæret i klasser og metoder. –Som vi skal se i det følgende, er der lidt forskel på reglerne for variabler erklæret i klasser og variabler erklæret i (blokke i) metoder.

5  Jens Bennedsen 2001Multimedie programmering10C.5 Variabler erklæret i klasser class Scope { Scope() { i = 0; } public void addOne() { i = i + 1; } int i; public void addTwo() { i = i + 2; } public int value() { return i; } } En klasse definerer et navnerum hvor alle navne erklæret i klassen er tilgængelige overalt i klassen.

6  Jens Bennedsen 2001Multimedie programmering10C.6 Variabler erklæret i metoder public void pip() { x = x++; // error! int x = 0; x++; } I en metode (funktion) definerer en blok {...} et navnerum hvor alle navne erklæret i blokken er tilgængelige efter erklæringen (og indtil blokkens afslutning).

7  Jens Bennedsen 2001Multimedie programmering10C.7 Indre blokke public void pip() { i = 0; { i++; System.out.println(i); int x = 0; x = i; x++; i++; System.out.println(x); } System.out.println(i); } I en blok kan man erklære indre blokke { {... } }. Reglen for indre blokke er den samme som reglen for blokke i metoder (forrige slide). Virkefelt for x

8  Jens Bennedsen 2001Multimedie programmering10C.8 Et navn virker i indre blokke public void pip() { i = j; // Fejl, j virker ikke her! int j = 0;... { i++; System.out.println(i); j++; System.out.println(j); }... } Hvad er virkefeltet for int j ? Virkefelt for j

9  Jens Bennedsen 2001Multimedie programmering10C.9 Og dog... class Scope { Scope() { i = 0; } public void pip() { i++; { i++; System.out.println(i); int i = 0; i++; System.out.println(i); } public static void main(String args[]) { Scope s = new Scope(); s.pip(); } int i; } Hvad sker der når vi oversætter (og evt. afvikler) følgende program?

10  Jens Bennedsen 2001Multimedie programmering10C.10 En forklaring class Scope { Scope() { i = 0; } public void pip() { i++; { i++; System.out.println(i); int i = 0; i++; System.out.println(i); } public static void main(String args[]) { Scope s = new Scope(); s.pip(); } int i; } Hvad er virkefelterne for de to int i ’er ? Virkefelt for ydre i Virkefelt for indre i

11  Jens Bennedsen 2001Multimedie programmering10C.11 Virkefeltsregler i Java –En variabel erklæret i en klasse virker overalt i klassen med undtagelse af virkefeltet for eventuelle ens-benævnte variabler erklæret i (blokke i) klassens metoder. –En variabel erklæret i en blok virker overalt i blokken med undtagelse af den del af blokken der går forud for erklæringen samt virkefeltet for eventuelle ens-benævnte variabler erklæret i indre blokke.

12  Jens Bennedsen 2001Multimedie programmering10C.12 { int i; int j; Sequence s; { int i; String s; i = i+j; { int i; int j; Sequence s; { String t; int k; int j; } Sådan!


Download ppt "Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;"

Lignende præsentationer


Annoncer fra Google