Ebben az oktatóanyagban megtanuljuk használni a dobás és a dobás kulcsszót a kivételkezeléshez példák segítségével.
A Java-ban a kivételek két típusba sorolhatók:
- Nem ellenőrzött Kivételek: Ezek nem ellenőrzött fordításkor de járatni time.For például
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, kivételekError
osztály, stb - Ellenőrzött kivételek: Összeállításkor ellenőrzik őket. Például,
IOException
,InterruptedException
, stb
Olvassa el a Java kivételek című cikket, ahol részletesen megismerheti az ellenőrzött és nem ellenőrzött kivételeket.
Általában nem kell kezelnünk az ellenőrizetlen kivételeket. Ez azért van, mert a programozási hibák miatt nem ellenőrzött kivételek fordulnak elő. És jó gyakorlat kijavítani őket a kezelés helyett.
Ez az oktatóanyag arra összpontosít, hogy miként kezelje az ellenőrzött kivételeket a throw
és a használatával throws
.
Java dob kulcsszót
A throws
method deklarációban a kulcsszót használjuk a benne előforduló kivételek típusának deklarálására.
Szintaxisa:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code )
Amint a fenti szintaxisból is látszik, felhasználhatunk throws
több kivétel deklarálására.
1. példa: Java dobja a kulcsszót
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); ) ) )
Kimenet
java.io.FileNotFoundException: test.txt (Nincs ilyen fájl vagy könyvtár)
Ha futtatjuk ezt a programot, ha a fájl test.txt
nem létezik, akkor FileInputStream
dob egy, FileNotFoundException
amely kiterjeszti az IOException
osztályt.
Ha egy módszer nem kezeli a kivételeket, akkor a throws
záradékban meg kell adni a benne előforduló kivételek típusát, hogy a hívásveremben feljebb lévő módszerek throws
maguk kezelhessék vagy megadhassák őket kulcsszóval.
A findFile()
módszer meghatározza, hogy egy IOException
dobható. A main()
metódus hívja ezt a módszert, és kezeli a kivételt, ha dobják.
Több kivétel dobása
Így dobhatunk több kivételt a throws
kulcsszó használatával.
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()); ) ) )
Itt a findFile()
módszer előírja, hogy dobja NullPointerException
, IOException
és InvalidClassException
annak throws
záradékot.
Vegye figyelembe, hogy nem kezeltük a NullPointerException
. Ez azért van, mert nem ellenőrzött kivétel. Nem szükséges a throws
záradékban meghatározni és kezelni.
dobja a Vs kulcsszót. próbáld meg … elkapni … végre
Lehet, hogy számos módszer okozhat kivételt. Az try… catch
egyes módszerek megírása unalmas lesz, a kód hosszú és kevésbé olvashatóvá válik.
throws
akkor is hasznos, ha bejelöli a kivételt (egy kivételt, amelyet kezelni kell), amelyet nem szeretne elkapni a jelenlegi módszerével.
Java dob kulcsszó
A throw
kulcsszó arra szolgál, hogy kifejezetten egyetlen kivételt dobjon.
Kivétel esetén a program végrehajtásának folyamata átkerül a try
blokkból a catch
blokkba. A throw
kulcsszót egy módszeren belül használjuk .
Szintaxisa:
throw throwableObject;
A dobható objektum az osztály Throwable
vagy az Throwable
osztály alosztályának példánya .
2. példa: Java dob kulcsszó
class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Kimenet
Kivétel a "main" szálban java.lang.ArithmeticException: 0-mal próbálunk osztani a Main.divideByZero (Main.java:3) a Main.main (Main.java:7) kilépési állapotban 1
Ebben a példában kifejezetten egy ArithmeticException.
Megjegyzés: ArithmeticException
nem ellenőrzött kivétel. Általában nem szükséges kezelni az ellenőrizetlen kivételeket.
3. példa: Dobás ellenőrzött kivétel
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()); ) ) )
Kimenet
Fájl nem található
A findFile()
módszer dob egy IOException
üzenetet, amelyet a konstruktorának továbbítottunk.
Vegye figyelembe, hogy mivel ez egy bejelölt kivétel, meg kell adnunk a throws
záradékban.
Azoknak a metódusoknak, amelyek ezt a findFile()
módszert hívják , vagy kezelniük kell ezt a kivételt, vagy throws
maguknak a kulcsszó segítségével kell megadniuk.
Ezt a kivételt a main
()
módszerben kezeltük. A program végrehajtásának folyamata átkerül a try
blokkból a catch
blokkba, ha kivételt dob. Tehát a try
blokk többi része kihagyásra kerül, és a catch
mondat utasításai végrehajtásra kerülnek.