Pamokoje su pavyzdžių pagalba sužinosime apie skirtingus išimčių tvarkymo „Java“ metodus.
Paskutinėje pamokoje sužinojome apie „Java“ išimtis. Mes žinome, kad išimtys nenormaliai nutraukia programos vykdymą.
Štai kodėl svarbu tvarkyti išimtis. Čia pateikiamas įvairių būdų, kaip tvarkyti išimtis „Java“, sąrašas.
- pabandyk … pagauti bloką
- pagaliau blokuoti
- metimas ir metimas raktinis žodis
1. „Java“ pabandykite … sugavimo bloką
„Try-catch“ blokas naudojamas „Java“ išimtims tvarkyti. Štai try… catch
bloko sintaksė :
try ( // code ) catch(Exception e) ( // code )
Čia į try
bloką įdėjome kodą, kuris gali generuoti išimtį . Po kiekvieno try
bloko seka catch
blokas.
Kai atsiranda išimtis, ją užklumpa catch
blokas. catch
Blokas negali būti naudojami be try
bloko.
Pavyzdys: išimčių tvarkymas naudojant „try… catch“
class Main ( public static void main(String() args) ( try ( // code that generate exception int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Rezultatas
Aritmetinė išimtis => / nuliu
Pavyzdyje bandome skaičių padalyti iš 0
. Čia šis kodas sukuria išimtį.
Norėdami išimtis, kodą įdėjome 5 / 0
į try
bloką. Dabar, kai įvyksta išimtis, likęs try
bloko kodas praleidžiamas.
catch
Blokas pagauna išimtis ir pareiškimai viduje sugavimo blokas yra įvykdytas.
Jei nė vienas iš try
bloko sakinių nesukuria išimties, catch
blokas praleidžiamas.
2. „Java“ pagaliau užblokuoja
„Java“ finally
blokas visada vykdomas, nesvarbu, ar yra išimtis, ar ne.
finally
Blokas yra neprivalomas. Kiekvienam try
blokui gali būti tik vienas finally
blokas.
Pagrindinė finally
bloko sintaksė yra:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Jei įvyksta išimtis, finally
blokas vykdomas po try… catch
bloko. Priešingu atveju jis vykdomas po bandymo bloko. Kiekvienam try
blokui gali būti tik vienas finally
blokas.
Pavyzdys: „Java“ išimčių tvarkymas naudojant galutinai bloką
class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )
Rezultatas
ArithmeticException => / iki nulio Tai galutinis blokas
Ankstesniame pavyzdyje skaičių padalijame iš 0try
bloko viduje . Čia šis kodas sukuria ArithmeticException
.
Išimtį užklumpa catch
blokas. Tada finally
blokas vykdomas.
Pastaba : Tai yra gera praktika naudoti finally
bloką. Taip yra todėl, kad joje gali būti svarbių valymo kodų, pvz.,
- kodas, kuris gali būti netyčia praleistas grįžus, tęskite arba sugadinkite
- uždarant failą ar ryšį
3. Java metimų ir metimų raktinis žodis
„Java“ throw
raktinis žodis naudojamas aiškiai išskirti vieną išimtį.
Kai mes darome throw
išimtį, programos srautas juda iš try
bloko į catch
bloką.
Pavyzdys: Išimčių tvarkymas naudojant „Java“ metimą
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Rezultatas
Išimtis temoje „main“ java.lang.ArithmeticException: bandoma padalyti iš 0 adresu Main.divideByZero (Main.java:5) ne Main.main (Main.java:9)
Ankstesniame pavyzdyje mes aiškiai metame, kaip ArithmeticException
naudoti throw
raktinį žodį.
Panašiai throws
raktinis žodis naudojamas deklaruojant išimčių tipą, kuris gali atsirasti taikant metodą. Jis naudojamas metodo deklaracijoje.
Pavyzdys: „Java“ meta raktinį žodį
import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate 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); ) ) )
Rezultatas
java.io.FileNotFoundException: test.txt (sistema neranda nurodyto failo)
Kai paleidžiame šią programą, jei failo test.txt nėra, FileInputStream
išmeta a, FileNotFoundException
kuris pratęsia IOException
klasę.
findFile()
Metodas nurodo, kad IOException
gali būti išmestas. main()
Metodas reikalauja šį metodą ir rankenos išimtį, jei jis yra išmestas.
Jei metodas netvarko išimčių, jame gali būti nurodytas išimčių tipas throws
.
Norėdami sužinoti daugiau, apsilankykite „Java“ metimuose ir metimuose.