Στο σεμινάριο, θα μάθουμε για διαφορετικές προσεγγίσεις χειρισμού εξαιρέσεων στην Java με τη βοήθεια παραδειγμάτων.
Στο τελευταίο σεμινάριο, μάθαμε για τις εξαιρέσεις Java. Γνωρίζουμε ότι οι εξαιρέσεις τερματίζουν ασυνήθιστα την εκτέλεση ενός προγράμματος.
Γι 'αυτό είναι σημαντικό να χειριστούμε τις εξαιρέσεις. Ακολουθεί μια λίστα με διαφορετικές προσεγγίσεις για τον χειρισμό εξαιρέσεων στην Java.
- δοκιμάστε … πιάστε μπλοκ
- τελικά μπλοκ
- ρίξτε και ρίχνετε τη λέξη-κλειδί
1. Java δοκιμάστε… catch block
Το μπλοκ try-catch χρησιμοποιείται για τον χειρισμό εξαιρέσεων στην Java. Εδώ είναι η σύνταξη του try… catch
μπλοκ:
try ( // code ) catch(Exception e) ( // code )
Εδώ, έχουμε τοποθετήσει τον κωδικό που μπορεί να δημιουργήσει μια εξαίρεση μέσα στο try
μπλοκ. Κάθε try
μπλοκ ακολουθείται από catch
μπλοκ.
Όταν συμβαίνει μια εξαίρεση, το πιάνει το catch
μπλοκ. Το catch
μπλοκ δεν μπορεί να χρησιμοποιηθεί χωρίς το 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()); ) ) )
Παραγωγή
ArithmeticException => / μηδέν
Στο παράδειγμα, προσπαθούμε να διαιρέσουμε έναν αριθμό με 0
. Εδώ, αυτός ο κώδικας δημιουργεί μια εξαίρεση.
Για να χειριστούμε την εξαίρεση, έχουμε βάλει τον κωδικό 5 / 0
μέσα στο try
μπλοκ. Τώρα, όταν συμβαίνει μια εξαίρεση, ο υπόλοιπος κωδικός μέσα στο try
μπλοκ παραλείπεται.
Το catch
μπλοκ πιάνει την εξαίρεση και εκτελούνται οι δηλώσεις στο μπλοκ.
Εάν καμία από τις δηλώσεις στο try
μπλοκ δεν δημιουργεί εξαίρεση, το catch
μπλοκ παραλείπεται.
2. Η Java τελικά μπλοκάρει
Στην Java, το finally
μπλοκ εκτελείται πάντα ανεξάρτητα από το αν υπάρχει εξαίρεση ή όχι.
Το finally
μπλοκ είναι προαιρετικό. Και, για κάθε try
μπλοκ, μπορεί να υπάρχει μόνο ένα finally
μπλοκ.
Η βασική σύνταξη του finally
μπλοκ είναι:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Εάν προκύψει εξαίρεση, το finally
μπλοκ εκτελείται μετά το try… catch
μπλοκ. Διαφορετικά, εκτελείται μετά το μπλοκ δοκιμής. Για κάθε try
μπλοκ, μπορεί να υπάρχει μόνο ένα finally
μπλοκ.
Παράδειγμα: Java Exception Handling χρησιμοποιώντας τελικά μπλοκ
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"); ) ) )
Παραγωγή
ArithmeticException => / με μηδέν Αυτό είναι το τελευταίο μπλοκ
Στο παραπάνω παράδειγμα, διαιρούμε έναν αριθμό με 0 μέσα στο try
μπλοκ. Εδώ, αυτός ο κώδικας δημιουργεί ένα ArithmeticException
.
Η εξαίρεση εμπίπτει στο catch
μπλοκ. Και, στη συνέχεια, το finally
μπλοκ εκτελείται.
Σημείωση : Είναι καλή πρακτική να χρησιμοποιείτε το finally
μπλοκ. Είναι επειδή μπορεί να περιλαμβάνει σημαντικούς κωδικούς καθαρισμού όπως,
- κωδικός που μπορεί να παραλειφθεί κατά λάθος από επιστροφή, συνέχιση ή διακοπή
- κλείσιμο αρχείου ή σύνδεσης
3. Η λέξη-κλειδί Java ρίχνει και ρίχνει
Η throw
λέξη-κλειδί Java χρησιμοποιείται για να ρίξει ρητά μια εξαίρεση.
Όταν throw
αποτελεί εξαίρεση, η ροή του προγράμματος μετακινείται από το try
μπλοκ στο catch
μπλοκ.
Παράδειγμα: Εξαίρεση χειρισμού με χρήση Java throw
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Παραγωγή
Εξαίρεση στο νήμα "main" java.lang.ArithmeticException: Προσπάθεια διαίρεσης με 0 στο Main.divideByZero (Main.java:5) στο Main.main (Main.java:9)
Στο παραπάνω παράδειγμα, ρίχνουμε ρητά τη ArithmeticException
χρήση της throw
λέξης-κλειδιού.
Ομοίως, η throws
λέξη-κλειδί χρησιμοποιείται για να δηλώσει τον τύπο εξαιρέσεων που ενδέχεται να προκύψουν στη μέθοδο. Χρησιμοποιείται στη δήλωση μεθόδου.
Παράδειγμα: Η Java ρίχνει λέξη-κλειδί
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); ) ) )
Παραγωγή
java.io.FileNotFoundException: test.txt (Το σύστημα δεν μπορεί να βρει το καθορισμένο αρχείο)
Όταν εκτελούμε αυτό το πρόγραμμα, εάν το αρχείο test.txt δεν υπάρχει, FileInputStream
ρίχνει ένα FileNotFoundException
που επεκτείνει την IOException
κλάση.
Η findFile()
μέθοδος καθορίζει ότι IOException
μπορεί να ρίξει. Η main()
μέθοδος καλεί αυτή τη μέθοδο και χειρίζεται την εξαίρεση εάν ρίχνεται.
Εάν μια μέθοδος δεν χειρίζεται εξαιρέσεις, ο τύπος εξαιρέσεων που ενδέχεται να προκύψουν εντός αυτής πρέπει να προσδιοριστεί στην throws
ενότητα.
Για να μάθετε περισσότερα, επισκεφτείτε το Java throw and throws.