Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.

Lignende præsentationer


Præsentationer af emnet: " Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence."— Præsentationens transcript:

1  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.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 " Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence."

Lignende præsentationer


Annoncer fra Google