Lecture overview -- Keyboard shortcut: 'u'  Previous page: Finally i Java's try blok (1) -- Keyboard shortcut: 'p'  Next page: Erklæring af exceptions i metoder -- 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 20 : 26
Forelæsningsnoter i Objekt-orienteret Programmering
Undtagelseshåndtering
Finally i forhold til return, break og continue

Finally konstruktionen bør også studeres i forbindelse med de hop-agtige muligheder, som understøttes i Java, og som vi har mødt allerede tidligt i dette kursus.

Der er ingen mulighed for at forlade en 'try blok' uden at udføre 'finally blokken'

Specielt kan Java's hop kommandoer break, continue og return ikke komme uden om en 'finally blok'

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/FindLetterInFile.javaIllustration af finally i forhold til return: Læsning af en fil indtil et bestemt tegn mødes.

Illustration af finally i forhold til return: Læsning af en fil indtil et bestemt tegn mødes. I en try blok læser vi tegnene i filen in. Hvis vi møder tegnet letter (en streng af længde én) returnerer vi umiddelbart true. Hvis vi når hele vejen gennem løkken returnerer vi false. Pointen i dette eksempel er, at finally blokken udføres når return er på vej ud af metoden lookForLetter med enten true eller false. Læg iøvrigt mærke til, at vi i dette eksempel har en try blok uden catch clauses, men med en finally clause. Opstår der en IOException forplantes den til main.

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/FinallyBreak.javaIllustration af finally i forhold til break.

Illustration af finally i forhold til break. I en while løkke fra i løbende fra 0 til 9 bryder vi løkken når i bliver 5. I hver udførelse af try-finally aktiveres udskrivninger både i try og finally delen naturligvis. Når i bliver 5 kaldes break, men vi kan ikke komme ud af try-finally uden også at udføre finally den sidste gang (altså for i == 5).

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/FinallyBreakOutputOutput af ovenstående program.

Output af ovenstående program. Bemærk specielt det med rødt fremhævede som stammer fra finally konstruktionens udførelse efter at løkken er brudt med break kommandoen

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/FinallyContinue.javaIllustration af finally i forhold til continue.

Illustration af finally i forhold til continue. Eksemplet minder om break eksemplet ovenfor. Variablen i løber igen fra 0 til 9. Når i er lige afbrydes løkken med continue, hvilket bevirker at vi umiddelbart går til den næste i værdi i gennemløbet. Men uanset om i er lige eller ulige vil finally-delen blive udført.

/user/normark/courses/prog1/prog1-01/sources/java/noteEksempler/FinallyContinueOutputOutput af ovenstående program.

Output af ovenstående program. Løkkegennemløb med en lige værdi af variablen i afbrydes midtvejs. Men uanset om i er lige eller ulige afsluttes løkken i finally blokken. De med rødt fremhævede liner stammer fra finally konstruktionen udført i de tilfælde, hvor løkken er blevet 'fortsat' med kald af continue

Hvis vi anvender den grove måde at stoppe et program på, System.exit(0), forbigår vi alle finally konstruktioner. System.exit bør således undgås når andre midler er tilgængelige for programafslutning

Det giver mening at have en try-finally konstruktion uden catches