Java δοκιμάστε ... πιάστε (με παραδείγματα)

Σε αυτό το σεμινάριο, θα μάθουμε για τη δήλωση δοκιμής 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.

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