Σε αυτό το σεμινάριο, θα μάθουμε για τη δήλωση δοκιμής catch στην Java με τη βοήθεια παραδειγμάτων.
Το try… catch
μπλοκ στην Java χρησιμοποιείται για τον χειρισμό εξαιρέσεων και αποτρέπει τον ανώμαλο τερματισμό του προγράμματος.
Εδώ είναι η σύνταξη ενός try… catch
μπλοκ στην Java.
try( // code ) catch(exception) ( // code )
Το try
μπλοκ περιλαμβάνει τον κωδικό που μπορεί να δημιουργήσει μια εξαίρεση.
Το catch
μπλοκ περιλαμβάνει τον κώδικα που εκτελείται όταν υπάρχει μια εξαίρεση μέσα στο try
μπλοκ.
Παράδειγμα: Java δοκιμάστε… catch block
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Παραγωγή
ArithmeticException => / μηδέν
Στο παραπάνω παράδειγμα, παρατηρήστε τη γραμμή,
int divideByZero = 5 / 0;
Εδώ, προσπαθούμε να διαιρέσουμε έναν αριθμό με μηδέν . Σε αυτήν την περίπτωση, εμφανίζεται μια εξαίρεση. Ως εκ τούτου, έχουμε ενσωματώσει αυτόν τον κωδικό μέσα στο try
μπλοκ.
Όταν το πρόγραμμα συναντά αυτόν τον κωδικό, ArithmeticException
εμφανίζεται. Και, η εξαίρεση συλλαμβάνεται από το catch
μπλοκ και εκτελεί τον κώδικα μέσα στο catch
μπλοκ.
Το catch
μπλοκ εκτελείται μόνο εάν υπάρχει εξαίρεση μέσα στο try
μπλοκ.
Σημείωση : Στην Java, μπορούμε να χρησιμοποιήσουμε ένα try
μπλοκ χωρίς catch
μπλοκ. Ωστόσο, δεν μπορούμε να χρησιμοποιήσουμε ένα catch
μπλοκ χωρίς try
μπλοκ.
Java δοκιμάστε… τελικά μπλοκ
Μπορούμε επίσης να χρησιμοποιήσουμε το try
μπλοκ μαζί με ένα τέλος μπλοκ.
Σε αυτήν την περίπτωση, το τελευταίο μπλοκ εκτελείται πάντα είτε υπάρχει εξαίρεση στο μπλοκ δοκιμής είτε όχι.
Παράδειγμα: Java δοκιμή… τελικά μπλοκ
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Παραγωγή
Τέλος, το μπλοκ εκτελείται πάντα Εξαίρεση στο νήμα "main" java.lang.ArithmeticException: / μηδέν στο Main.main (Main.java:4)
Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε το try
μπλοκ μαζί με το finally
μπλοκ. Μπορούμε να δούμε ότι ο κώδικας μέσα στο try
μπλοκ προκαλεί εξαίρεση.
Ωστόσο, ο κωδικός μέσα στο finally
μπλοκ εκτελείται ανεξάρτητα από την εξαίρεση.
Java δοκιμάστε… πιάστε… επιτέλους μπλοκάρετε
Στην Java, μπορούμε επίσης να χρησιμοποιήσουμε το μπλοκ επιτέλους μετά το try… catch
μπλοκ. Για παράδειγμα,
import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Παραγωγή
Εισαγωγή δοκιμαστικής δήλωσης Εξαίρεση => Ευρετήριο 5 εκτός ορίου για μήκος 5 Κλείσιμο PrintWriter
Στο παραπάνω παράδειγμα, δημιουργήσαμε μια λίστα με όνομα πίνακα και ένα αρχείο με όνομα output.txt. Εδώ, προσπαθούμε να διαβάσουμε δεδομένα από τον πίνακα και να τα αποθηκεύσουμε στο αρχείο.
Παρατηρήστε τον κωδικό,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Εδώ, το μέγεθος του πίνακα είναι 5
και το τελευταίο στοιχείο του πίνακα είναι στο list(4)
. Ωστόσο, προσπαθούμε να αποκτήσουμε πρόσβαση σε στοιχεία a(5)
και a(6)
.
Ως εκ τούτου, ο κώδικας δημιουργεί μια εξαίρεση που πιάνεται από το μπλοκ catch.
Δεδομένου ότι το finally
μπλοκ εκτελείται πάντα, έχουμε συμπεριλάβει κώδικα για να κλείσουμε το PrintWriter
εσωτερικό του επιτέλους μπλοκ.
Είναι μια καλή πρακτική να χρησιμοποιείτε τελικά μπλοκ για να συμπεριλάβετε σημαντικό κώδικα καθαρισμού, όπως το κλείσιμο ενός αρχείου ή μιας σύνδεσης.
Σημείωση : Υπάρχουν ορισμένες περιπτώσεις όταν ένα finally
μπλοκ δεν εκτελείται:
- Χρήση
System.exit()
μεθόδου - Υπάρχει μια εξαίρεση στο
finally
μπλοκ - Ο θάνατος ενός νήματος
Πολλά μπλοκ Catch
Για κάθε try
μπλοκ, μπορεί να υπάρχουν μηδέν ή περισσότερα catch
μπλοκ. Πολλά catch
μπλοκ μας επιτρέπουν να χειριστούμε κάθε εξαίρεση με διαφορετικό τρόπο.
Ο τύπος ορίσματος κάθε catch
μπλοκ δείχνει τον τύπο εξαίρεσης που μπορεί να αντιμετωπιστεί από αυτό. Για παράδειγμα,
class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Παραγωγή
IndexOutOfBoundsException => Ευρετήριο 10 εκτός ορίου για μήκος 10
Σε αυτό το παράδειγμα, έχουμε δημιουργήσει έναν ακέραιο πίνακα με το όνομα arr
του μεγέθους 10 .
Δεδομένου ότι το ευρετήριο του πίνακα ξεκινά από το 0 , το τελευταίο στοιχείο του πίνακα είναι στο arr(9)
. Παρατηρήστε τη δήλωση,
arr(10) = 11;
Εδώ, προσπαθούμε να αντιστοιχίσουμε μια τιμή στο ευρετήριο 10 . Ως εκ τούτου, IndexOutOfBoundException
συμβαίνει.
Όταν εμφανίζεται μια εξαίρεση στο try
μπλοκ,
- Η εξαίρεση ρίχνεται στο πρώτο
catch
μπλοκ. Το πρώτοcatch
μπλοκ δεν χειρίζεται έναIndexOutOfBoundsException
, επομένως περνά στο επόμενοcatch
μπλοκ. - Το δεύτερο
catch
μπλοκ στο παραπάνω παράδειγμα είναι ο κατάλληλος χειριστής εξαιρέσεων επειδή χειρίζεται έναIndexOutOfBoundsException
. Ως εκ τούτου, εκτελείται.
Αντιμετώπιση πολλαπλών εξαιρέσεων
Από το Java SE 7 και μεταγενέστερα, μπορούμε τώρα να πιάσουμε περισσότερους από έναν τύπους εξαιρέσεων με ένα catch
μπλοκ.
Αυτό μειώνει την επανάληψη κώδικα και αυξάνει την απλότητα και την αποτελεσματικότητα του κώδικα.
Κάθε τύπος εξαίρεσης που μπορεί να αντιμετωπιστεί από το catch
μπλοκ διαχωρίζεται χρησιμοποιώντας μια κάθετη γραμμή |
.
Η σύνταξή του είναι:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
Για να μάθετε περισσότερα, μεταβείτε στην Java με πολλές εξαιρέσεις.
Δήλωση δοκιμής με πόρους Java
Η δήλωση δοκιμής με πόρους είναι μια δήλωση δοκιμής που έχει μία ή περισσότερες δηλώσεις πόρων.
Η σύνταξή του είναι:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Ο πόρος είναι ένα αντικείμενο που πρέπει να κλείσει στο τέλος του προγράμματος. Πρέπει να δηλωθεί και να αρχικοποιηθεί στη δήλωση δοκιμής.
Ας πάρουμε ένα παράδειγμα.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Η δήλωση δοκιμής με πόρους αναφέρεται επίσης ως αυτόματη διαχείριση πόρων . Αυτή η δήλωση κλείνει αυτόματα όλους τους πόρους στο τέλος της δήλωσης.
Για να μάθετε περισσότερα, επισκεφθείτε τη δήλωση java try-with-resources.