Video: Bring on the learning revolution! | Sir Ken Robinson 2025
Forestill deg et Java-program som får input fra to forskjellige filer eller fra en
Skanner
og en disk fil. For å sikre at du rydder opp riktig, legger du
nær
metallsamtaler i en
endelig
-klausul.
importer java. io. Fil;
importer java. io. IOException;
importer java. util. Scanner;
offentlig klasse Main {
statisk statisk tomt hoved (String args []) {
Skanner scan1 = null;
Skanner scan2 = null;
prøv {
scan1 = ny skanner (ny fil ("File1. Txt"));
scan2 = ny skanner (ny fil ("File2. Txt"));
// Gjør nyttige ting
} fange (IOException e) {
// Ups!
} til slutt {
scan1. Lukk();
scan2. Lukk();
System. ute. println ("Ferdig!");
}
}
}
I teorien utfører datamaskinen alltid
scan1. lukk ()
og
scan2. Lukk ()
Uansett hva som går galt under utførelsen av
Prøv
-klausulen. Men det er teori. I virkeligheten kan en annen programmerer (ikke selvfølgelig) endre koden ved å lukke
scan1
i midten av
prøve
-klausulen:
prøv {
scan1 = ny skanner (ny fil ("File1. Txt"));
scan2 = ny skanner (ny fil ("File2. Txt"));
// Gjør nyttige ting, men også …
scan1. Lukk();
scan1 = null;
} fangst (IOException e) {
// Ups!
} til slutt {
scan1. Lukk();
scan2. Lukk();
System. ute. println ("Ferdig!");
}
Nå har du et reelt problem. Innenfor
endelig
-klausulen er verdien på
scan1
null
. Anropet til
scan1. Lukk ()
mislykkes, så programmet kaster en
NullPointerException
og slutter å kjøre før du ringer til
scan2. lukk ()
. I verste fall er
scan2
ikke stengt, og programmet har
File2. txt
låst opp slik at ingen andre programmer kan bruke filen.
Når et program bruker flere ressurser (mange filer, en database og en fil, eller hva som helst), blir oppsummeringen av
prøve
setningene ganske kompliserte. Du kan gjøre
prøve
uttalelser innenfor
catch
klausuler og alle slags sprø kombinasjoner. Men Java har en bedre måte å løse problemet på: I Java 7 (og senere versjoner av Java) kan du opprette en test-med-ressurser-setning. Denne koden viser hvordan.
importer java. io. Fil;
importer java. io. IOException;
importer java. util. Scanner;
offentlig klasse NewMain {
offentlig statisk tomt hoved (String args []) {
prøve (Scanner scan1 = ny skanner (ny fil ("File1.txt "));
Skanner scan2 = ny skanner (ny fil (" File2. txt "))) {
// Gjør nyttige ting
} fange (IOException e) {
// Ups
}
I denne koden erklæres
scan1
og
i
}
System. out. println ("Done!");
} scan2
er i parentes etter ordet
try
. De parentesiserte deklarasjonene forteller at Java skal lukke
scan1
og
scan2
automatisk etter utførelsen av setningene i > Prøv
-klausulen. Du kan deklarere flere ressurser i en
prøve
setningens parentes. Når du gjør det, lukker Java alle ressursene automatisk etter utførelse av
prøve
-klausulens uttalelser. Legg til
catch
klausuler og en
endelig
-klausul, hvis du vil. Du kan få tilgang til alle slags ressurser (filer, databaser, tilkoblinger til servere og andre) og ha ro i sinnet å vite at Java vil koble forbindelsene automatisk.
Livet er bra.
