Java ρίξει και ρίχνει τη λέξη-κλειδί

Σε αυτό το σεμινάριο, θα μάθουμε να χρησιμοποιούμε λέξη-κλειδί ρίψης και ρίψης για χειρισμό εξαιρέσεων με τη βοήθεια παραδειγμάτων.

Στην Java, οι εξαιρέσεις μπορούν να κατηγοριοποιηθούν σε δύο τύπους:

  • Ένα μη ελεγμένο Εξαιρέσεις: Δεν ελέγχονται κατά τη μεταγλώττιση χρόνο, αλλά σε run-χρόνο.Για παράδειγμα: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, εξαιρέσεις σύμφωνα με Errorτην κατηγορία, κ.λπ.
  • Έλεγχοι Εξαιρέσεις: Ελέγχονται κατά το χρόνο μεταγλώττισης. Για παράδειγμα, IOException, InterruptedException, κ.λπ.

Ανατρέξτε στις Εξαιρέσεις Java για να μάθετε λεπτομερώς σχετικά με τις ελεγμένες και τις μη ελεγμένες εξαιρέσεις.

Συνήθως, δεν χρειάζεται να χειριστούμε μη ελεγμένες εξαιρέσεις. Αυτό συμβαίνει επειδή οι μη ελεγμένες εξαιρέσεις συμβαίνουν λόγω σφαλμάτων προγραμματισμού. Και, είναι καλή πρακτική να τα διορθώνετε αντί να τα χειρίζεστε.

Αυτό το σεμινάριο θα εστιάσει τώρα στο πώς να λαβή ελέγχονται εξαιρέσεις χρησιμοποιώντας throwκαι throws.

Η Java ρίχνει τη λέξη-κλειδί

Χρησιμοποιούμε τη throwsλέξη-κλειδί στη δήλωση μεθόδου για να δηλώσουμε τον τύπο εξαιρέσεων που ενδέχεται να προκύψουν μέσα σε αυτήν.

Η σύνταξή του είναι:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

Όπως μπορείτε να δείτε από την παραπάνω σύνταξη, μπορούμε να χρησιμοποιήσουμε throwsγια να δηλώσουμε πολλές εξαιρέσεις.

Παράδειγμα 1: Η Java ρίχνει τη λέξη-κλειδί

 import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce 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κλάση.

Εάν μια μέθοδος δεν χειρίζεται εξαιρέσεις, ο τύπος των εξαιρέσεων που ενδέχεται να προκύψουν μέσα σε αυτήν πρέπει να προσδιοριστεί στην throwsενότητα έτσι ώστε οι μέθοδοι που βρίσκονται στη στοίβα κλήσεων να μπορούν να τις χειριστούν ή να τις καθορίσουν χρησιμοποιώντας τη throwsλέξη-κλειδί.

Η findFile()μέθοδος καθορίζει ότι IOExceptionμπορεί να ρίξει. Η main()μέθοδος καλεί αυτή τη μέθοδο και χειρίζεται την εξαίρεση εάν ρίχνεται.

Ρίχνουν πολλές εξαιρέσεις

Δείτε πώς μπορούμε να ρίξουμε πολλές εξαιρέσεις χρησιμοποιώντας τη throwsλέξη-κλειδί.

 import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) ) 

Εδώ, η findFile()μέθοδος ορίζει ότι μπορεί να ρίξει NullPointerException, IOExceptionκαι InvalidClassExceptionτο της throwsρήτρας.

Σημειώστε ότι δεν έχουμε χειριστεί το NullPointerException. Αυτό συμβαίνει επειδή είναι μια ανεξέλεγκτη εξαίρεση. Δεν είναι απαραίτητο να το προσδιορίσετε στην throwsενότητα και να το χειριστείτε.

ρίχνει τη λέξη-κλειδί Vs. δοκιμάστε … πιάστε … επιτέλους

Μπορεί να υπάρχουν πολλές μέθοδοι που μπορούν να προκαλέσουν εξαιρέσεις. Το γράψιμο try… catchγια κάθε μέθοδο θα είναι κουραστικό και ο κώδικας γίνεται μακρύς και λιγότερο ευανάγνωστος.

throws είναι επίσης χρήσιμο όταν έχετε ελέγξει την εξαίρεση (μια εξαίρεση που πρέπει να αντιμετωπιστεί) που δεν θέλετε να πιάσετε με την τρέχουσα μέθοδο σας.

Λέξη κλειδί Java

Η throwλέξη-κλειδί χρησιμοποιείται για να ρίξει ρητά μια εξαίρεση.

Όταν δημιουργείται μια εξαίρεση, η ροή της εκτέλεσης του προγράμματος μεταφέρεται από το tryμπλοκ στο catchμπλοκ. Χρησιμοποιούμε τη throwλέξη-κλειδί μέσα σε μια μέθοδο.

Η σύνταξή του είναι:

 throw throwableObject;

Ένα αντικείμενο με δυνατότητα ρίψης είναι μια παρουσία κλάσης Throwableή υποκατηγορίας της Throwableκλάσης.

Παράδειγμα 2: Λέξη-κλειδί Java

 class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) ) 

Παραγωγή

 Εξαίρεση στο νήμα "main" java.lang.ArithmeticException: Προσπάθεια διαίρεσης με 0 στο Main.divideByZero (Main.java:3) στο Main.main (Main.java:7) κατάσταση εξόδου 1 

Σε αυτό το παράδειγμα, ρίχνουμε ρητά ένα ArithmeticException.

Σημείωση: ArithmeticException είναι μια μη ελεγμένη εξαίρεση. Συνήθως δεν είναι απαραίτητο να χειριστείτε μη ελεγμένες εξαιρέσεις.

Παράδειγμα 3: Ρίψη ελεγμένης εξαίρεσης

 import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) ) 

Παραγωγή

 Το αρχείο δε βρέθηκε 

Η findFile()μέθοδος ρίχνει ένα IOExceptionμε το μήνυμα που περάσαμε στον κατασκευαστή του.

Σημειώστε ότι δεδομένου ότι είναι μια ελεγχόμενη εξαίρεση, πρέπει να την καθορίσουμε στην throwsενότητα.

Οι μέθοδοι που ονομάζουν αυτήν τη findFile()μέθοδο πρέπει είτε να χειριστούν αυτήν την εξαίρεση είτε να την προσδιορίσουν χρησιμοποιώντας τη throwsλέξη-κλειδί από μόνες τους.

Έχουμε χειριστεί αυτήν την εξαίρεση στη main()μέθοδο. Η ροή της εκτέλεσης του προγράμματος μεταφέρεται από το tryμπλοκ στο catchμπλοκ κατά την εξαίρεση. Έτσι, ο υπόλοιπος κώδικας στο tryμπλοκ παραλείπεται και catchεκτελούνται δηλώσεις στο μπλοκ.

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