Java worp en worpen
Java gooien en gooien
In deze zelfstudie leren we met behulp van voorbeelden het trefwoord throw en throws te gebruiken voor het afhandelen van uitzonderingen.
In Java kunnen uitzonderingen worden onderverdeeld in twee typen:
- Niet-aangevinkte uitzonderingen: Ze worden niet gecontroleerd tijdens het compileren, maar tijdens runtime. Bijvoorbeeld:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, uitzonderingen onderError
klas, enz. - Aangevinkte uitzonderingen: Ze worden gecontroleerd tijdens het compileren. Bijvoorbeeld
IOException
,InterruptedException
, enz.
Raadpleeg Java-uitzonderingen voor meer informatie over aangevinkte en niet-aangevinkte uitzonderingen.
Gewoonlijk hoeven we niet-aangevinkte uitzonderingen niet af te handelen. Dit komt omdat niet-gecontroleerde uitzonderingen optreden als gevolg van programmeerfouten. En het is een goede gewoonte om ze te corrigeren in plaats van ze te behandelen.
Deze tutorial richt zich nu op het afhandelen van gecontroleerde uitzonderingen met behulp van throw
en throws
.
Java gooit trefwoord
We gebruiken de throws
trefwoord in de methodedeclaratie om het type uitzonderingen aan te geven dat erin kan voorkomen.
De syntaxis is:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2 … {
// code
}
Zoals je kunt zien aan de bovenstaande syntaxis, kunnen we throws
. gebruiken om meerdere uitzonderingen te declareren.
Voorbeeld 1:Java gooit Trefwoord
import java.io.*;
class Main {
public static void findFile() throws IOException {
// code that may produce IOException
File newFile=new File("test.txt");
FileInputStream stream=new FileInputStream(newFile);
}
public static void main(String[] args) {
try{
findFile();
} catch(IOException e){
System.out.println(e);
}
}
}
Uitvoer
java.io.FileNotFoundException: test.txt (No such file or directory)
Als we dit programma uitvoeren, als het bestand test.txt
bestaat niet, FileInputStream
gooit een FileNotFoundException
die de IOException
. verlengt klasse.
Als een methode geen uitzonderingen verwerkt, moet het type uitzondering dat erin kan voorkomen worden gespecificeerd in de throws
clausule zodat methoden hoger in de aanroepstack ze kunnen verwerken of specificeren met behulp van throws
zoekwoord zelf.
De findFile()
methode specificeert dat een IOException
kan worden gegooid. De main()
methode roept deze methode aan en handelt de uitzondering af als deze wordt gegenereerd.
Meerdere uitzonderingen maken
Hier is hoe we meerdere uitzonderingen kunnen maken met behulp van de throws
zoekwoord.
import java.io.*;
class Main {
public static void findFile() throws NullPointerException, IOException, InvalidClassException {
// code that may produce NullPointerException
… … …
// code that may produce IOException
… … …
// code that may produce InvalidClassException
… … …
}
public static void main(String[] args) {
try{
findFile();
} catch(IOException e1){
System.out.println(e1.getMessage());
} catch(InvalidClassException e2){
System.out.println(e2.getMessage());
}
}
}
Hier, de findFile()
methode specificeert dat het NullPointerException
. kan gooien , IOException
, en InvalidClassException
in zijn throws
clausule.
Merk op dat we de NullPointerException
. niet hebben afgehandeld . Dit komt omdat het een ongecontroleerde uitzondering is. Het is niet nodig om het op te geven in de throws
clausule en behandel het.
gooit trefwoord Vs. probeer...vang...eindelijk
Er kunnen verschillende methoden zijn die uitzonderingen kunnen veroorzaken. Schrijven try...catch
voor elke methode zal vervelend zijn en de code wordt lang en minder leesbaar.
throws
is ook handig als je exception (een exception die moet worden afgehandeld) hebt aangevinkt die je niet wilt vangen in je huidige methode.
Java throw-zoekwoord
De throw
trefwoord wordt gebruikt om expliciet een enkele uitzondering te genereren.
Wanneer een uitzondering wordt gegenereerd, wordt de stroom van programma-uitvoering overgedragen van de try
blok naar de catch
blok. We gebruiken de throw
trefwoord binnen een methode.
De syntaxis is:
throw throwableObject;
Een werpbaar object is een instantie van klasse Throwable
of subklasse van de Throwable
klasse.
Voorbeeld 2:Java throw-zoekwoord
class Main {
public static void divideByZero() {
throw new ArithmeticException("Trying to divide by 0");
}
public static void main(String[] args) {
divideByZero();
}
}
Uitvoer
Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0 at Main.divideByZero(Main.java:3) at Main.main(Main.java:7) exit status 1
In dit voorbeeld gooien we expliciet een ArithmeticException.
Opmerking: ArithmeticException
is een ongecontroleerde uitzondering. Het is meestal niet nodig om ongecontroleerde uitzonderingen af te handelen.
Voorbeeld 3:Gecontroleerde uitzondering weggooien
import java.io.*;
class Main {
public static void findFile() throws IOException {
throw new IOException("File not found");
}
public static void main(String[] args) {
try {
findFile();
System.out.println("Rest of code in try block");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
Uitvoer
File not found
De findFile()
methode gooit een IOException
met het bericht dat we hebben doorgegeven aan de constructeur ervan.
Merk op dat aangezien het een gecontroleerde uitzondering is, we deze moeten specificeren in de throws
clausule.
De methoden die dit findFile()
. noemen methode moet deze uitzondering afhandelen of specificeren met throws
zoekwoord zelf.
We hebben deze uitzondering verwerkt in de main
()
methode. De stroom van programma-uitvoering wordt overgedragen van de try
blok naar catch
blokkeren wanneer een uitzondering wordt gegenereerd. Dus de rest van de code in de try
blok wordt overgeslagen en instructies in de catch
blok worden uitgevoerd.
Java
- Java-variabelen en -letters
- Java basis invoer en uitvoer
- Java-uitdrukkingen, verklaringen en blokken
- Java-klasse en objecten
- Java abstracte klasse en abstracte methoden
- Java geneste en innerlijke klasse
- Java-vangst Meerdere uitzonderingen
- Java autoboxing en unboxing
- Java String Replace(), ReplaceAll() en ReplaceFirst() methode
- Java String toLowercase() en toUpperCase() methoden
- Java - Object en klassen