Video: Linux Tutorial for Beginners: Introduction to Linux Operating System 2024
Stel u een Java-programma voor dat wordt ingevoerd uit twee verschillende bestanden of van een
Scanner
en een schijf het dossier. Om ervoor te zorgen dat je goed opschoont, plaats je
close
methodeaanroepen in een
tenslotte
-clausule.
java importeren. io. Het dossier;
java importeren. io. IOException;
java importeren. util. Scanner;
openbare klas Hoofd {
public static void main (String args []) {
Scanscan1 = null;
Scanscan2 = null;
probeer {
scan1 = nieuwe scanner (nieuw bestand ("File1. Txt"));
scan2 = nieuwe scanner (nieuw bestand ("File2. Txt"));
// Nuttige dingen
} catch (IOException e) {
// Oeps!
} eindelijk {
scan1. dichtbij();
Scan2. dichtbij();
Systeem. uit. println ("Klaar!");
}
}
}
In theorie voert de computer altijd
scan1 uit. close ()
en
Scan2. close ()
ongeacht wat er fout gaat tijdens de uitvoering van de
try
-clausule. Maar dat is theorie. In werkelijkheid kan een andere programmeur (niet jij natuurlijk) de code wijzigen door
scan1
te sluiten in het midden van de
try
-clausule:
probeer {
scan1 = nieuwe scanner (nieuw bestand ("File1. Txt"));
scan2 = nieuwe scanner (nieuw bestand ("File2. Txt"));
// Nuttige dingen doen, maar ook …
scan1. dichtbij();
scan1 = null;
} catch (IOException e) {
// Oeps!
} eindelijk {
scan1. dichtbij();
Scan2. dichtbij();
Systeem. uit. println ("Klaar!");
}
Nu heb je een echte hachelijke situatie. In de
uiteindelijk
-clausule is de waarde
scan1
null
. De aanroep naar
scan1. close ()
mislukt, dus het programma genereert een
NullPointerException
en stopt met werken voordat de oproep naar
scan2 wordt bereikt. close ()
. In de slechtste omstandigheden is
scan2
niet gesloten en heeft uw programma
File2. txt
vergrendeld zodat geen ander programma het bestand kan gebruiken.
Wanneer een programma verschillende bronnen gebruikt (veel bestanden, een database en een bestand, of wat dan ook), wordt het opbouwen van
try
-instructies behoorlijk gecompliceerd. Je kunt
try
-instructies maken binnen
catch
-clausules en allerlei gekke combinaties. Maar Java heeft een betere manier om het probleem op te lossen: In Java 7 (en latere versies van Java), kunt u een try-with-resources-instructie maken. Deze code laat zien hoe.
java importeren. io. Het dossier;
java importeren. io. IOException;
java importeren. util. Scanner;
public class NewMain {
public static void main (String args [] 9) {
try (Scanner scan1 = nieuwe scanner (nieuw bestand ("Bestand1.txt "));
Scanscan2 = nieuwe scanner (nieuw bestand (" File2. txt "))) {
// Doe nuttige dingen
} vangst (IOException e) {
// Oeps ! v
}
Systeemuitgave. println ("Gereed!");
}
}
In deze code zijn de aangiften van
scan1
en
scan2
staan tussen haakjes achter het woord
proberen
. De haakjes tussen haakjes geven aan dat Java
scan1
en
scan2
automatisch sluit na uitvoering van de instructies in > probeer
-clausule U kunt verschillende bronnen binnen één
proberen
-instructie tussen haakjes declareren. Wanneer u dit doet, sluit Java alle bronnen automatisch na uitvoering van de
probeer
-clausules. voeg
catch
-clausules en een
slot
-clausule toe, als u dat wilt.U kunt toegang krijgen tot allerlei soorten bronnen (bestanden, databases, verbindingen met servers en anderen) en u kunt er gerust op zijn dat Java zal de verbindingen automatisch verbreken.
Het leven is goed.