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ételekErrorosztá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 throwsmethod 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 throwstö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.txtnem létezik, akkor FileInputStreamdob egy, FileNotFoundExceptionamely kiterjeszti az IOExceptionosztályt.
Ha egy módszer nem kezeli a kivételeket, akkor a throwszáradékban meg kell adni a benne előforduló kivételek típusát, hogy a hívásveremben feljebb lévő módszerek throwsmaguk kezelhessék vagy megadhassák őket kulcsszóval.
A findFile()módszer meghatározza, hogy egy IOExceptiondobható. 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 throwskulcsszó 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 InvalidClassExceptionannak throwszá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 throwszá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… catchegyes 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 throwkulcsszó arra szolgál, hogy kifejezetten egyetlen kivételt dobjon.
Kivétel esetén a program végrehajtásának folyamata átkerül a tryblokkból a catchblokkba. A throwkulcsszót egy módszeren belül használjuk .
Szintaxisa:
throw throwableObject;
A dobható objektum az osztály Throwablevagy az Throwableosztá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 throwszáradékban.
Azoknak a metódusoknak, amelyek ezt a findFile()módszert hívják , vagy kezelniük kell ezt a kivételt, vagy throwsmaguknak 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 tryblokkból a catchblokkba, ha kivételt dob. Tehát a tryblokk többi része kihagyásra kerül, és a catchmondat utasításai végrehajtásra kerülnek.








