Διαχείριση εξαιρέσεων Java (με παραδείγματα)

Στο σεμινάριο, θα μάθουμε για διαφορετικές προσεγγίσεις χειρισμού εξαιρέσεων στην 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.

ενδιαφέροντα άρθρα...