try catch finally
Σε αυτό το σεμινάριο, θα συζητήσουμε διάφορες λέξεις-κλειδιά που χρησιμοποιούνται στο Java για Εξαίρεση χειρισμού, όπως Try, Catch, Τέλος, Throw και Throws με παραδείγματα:
Στα προηγούμενα μαθήματά μας, έχουμε δει τα βασικά του χειρισμού εξαιρέσεων στην Java μαζί με τις διάφορες εξαιρέσεις που υποστηρίζονται από την τάξη Java Exception. Συζητήσαμε επίσης λεπτομερώς το NullPointerException.
Μπορούμε να συμπεριλάβουμε εξαιρέσεις στο πρόγραμμά μας χρησιμοποιώντας συγκεκριμένες λέξεις-κλειδιά που παρέχονται στην Java. Αυτές οι λέξεις-κλειδιά ορίζουν διάφορα τμήματα κώδικα που διευκολύνουν τον ορισμό και το χειρισμό εξαιρέσεων.
=> Επισκεφτείτε εδώ για την αποκλειστική σειρά εκπαιδευτικών εκμάθησης Java.
Τι θα μάθετε:
Δοκιμάστε, πιάστε, τέλος στην Ιάβα
Οι παρακάτω λέξεις-κλειδιά χρησιμοποιούνται στην Java για εξαίρεση.
- Προσπαθήστε
- Σύλληψη
- Τελικά
- Βολή
- Ρίχνει
Ο παρακάτω πίνακας περιγράφει εν συντομία αυτές τις λέξεις-κλειδιά.
Λέξη-κλειδί | Περιγραφή |
---|---|
Προσπαθήστε | Καθορίζουμε το μπλοκ του κώδικα που μπορεί να προκαλέσει την εξαίρεση σε ένα ειδικό μπλοκ με μια λέξη-κλειδί 'Δοκιμάστε'. |
Σύλληψη | Όταν τεθεί η εξαίρεση, πρέπει να το πιάσει το πρόγραμμα. Αυτό γίνεται χρησιμοποιώντας μια λέξη-κλειδί «catch». Έτσι, ένα μπλοκ σύλληψης ακολουθεί το μπλοκ δοκιμής που δημιουργεί μια εξαίρεση. Η λέξη-κλειδί catch πρέπει πάντα να χρησιμοποιείται με μια δοκιμή. |
Τελικά | Μερικές φορές έχουμε έναν σημαντικό κώδικα στο πρόγραμμά μας, ο οποίος πρέπει να εκτελεστεί ανεξάρτητα από το εάν απορρίπτεται η εξαίρεση. Αυτός ο κωδικός τοποθετείται σε ένα ειδικό μπλοκ ξεκινώντας από τη λέξη-κλειδί «Τέλος». Το μπλοκ Τέλος ακολουθεί το μπλοκ Try-catch. |
Βολή | Η λέξη-κλειδί 'ρίξτε' χρησιμοποιείται για να ρίξει την εξαίρεση ρητά. |
Ρίχνει | Η λέξη-κλειδί 'Throws' δεν ρίχνει μια εξαίρεση αλλά χρησιμοποιείται για να δηλώσει εξαιρέσεις. Αυτή η λέξη-κλειδί χρησιμοποιείται για να δείξει ότι ενδέχεται να προκύψει εξαίρεση στο πρόγραμμα ή τη μέθοδο. |
Σε αυτό το σεμινάριο, θα συζητήσουμε λεπτομερώς όλες τις παραπάνω λέξεις-κλειδιά μαζί με τα παραδείγματα προγραμματισμού.
Δοκιμάστε το Block In Java
Κάθε φορά που γράφουμε ένα πρόγραμμα θα μπορούσε να υπάρχει ένας κωδικός που υποψιάζουμε ότι μπορεί να ρίξει μια εξαίρεση. Για παράδειγμα, ίσως υποψιαζόμαστε ότι μπορεί να υπάρχει μια λειτουργία 'διαίρεση με μηδέν' στον κώδικα που θα δημιουργήσει μια εξαίρεση.
Αυτός ο κωδικός που μπορεί να δημιουργήσει μια εξαίρεση περικλείεται σε ένα μπλοκ με τη λέξη-κλειδί 'δοκιμάστε'. Έτσι, το μπλοκ δοκιμής περιέχει τον κώδικα ή το σύνολο των δηλώσεων που μπορούν να δημιουργήσουν μια εξαίρεση.
Η γενική σύνταξη του μπλοκ δοκιμής έχει ως εξής:
try{ //set of statements that can raise exception }
Ως εκ τούτου, εάν ένας προγραμματιστής πιστεύει ότι ορισμένες δηλώσεις θα δημιουργήσουν εξαιρέσεις, τότε θα τις συμπεριλάβετε σε ένα μπλοκ δοκιμής. Σημειώστε ότι όταν εμφανίζεται μια εξαίρεση σε μια συγκεκριμένη δήλωση σε ένα μπλοκ δοκιμής, τότε ο υπόλοιπος κώδικας δεν εκτελείται.
Όταν εμφανίζεται μια εξαίρεση σε ένα μπλοκ δοκιμής σε μια συγκεκριμένη δήλωση, τότε ο έλεγχος βγαίνει και το πρόγραμμα τερματίζεται απότομα. Για να αποτρέψουμε αυτόν τον απότομο τερματισμό του προγράμματος, πρέπει να 'χειριστούμε' αυτήν την εξαίρεση. Αυτός ο χειρισμός γίνεται χρησιμοποιώντας τη λέξη-κλειδί «catch». Έτσι, ένα μπλοκ δοκιμής έχει πάντα ένα μπλοκ catch που το ακολουθεί.
Catch Block σε Java
Χρησιμοποιούμε μπλοκ για να χειριστούμε τις εξαιρέσεις. Αυτό είναι το μπλοκ με τη λέξη-κλειδί 'catch'. Το μπλοκ σύλληψης ακολουθεί το μπλοκ δοκιμής.
Κάθε φορά που εμφανίζεται μια εξαίρεση στο μπλοκ δοκιμής, τότε εκτελείται ο κωδικός στο μπλοκ catch που αντιστοιχεί στην εξαίρεση.
Η γενική σύνταξη του block catch είναι:
catch (Exception e){ //code to handle exception e }
Γενικά, η δηλωμένη εξαίρεση πρέπει να είναι η γονική κλάση όλων των εξαιρέσεων, δηλαδή εξαίρεση. Αλλά αν υπάρχουν περισσότερες από μία εξαιρέσεις, μπορούμε επίσης να γράψουμε συγκεκριμένους τύπους εξαιρέσεων ή εξαγόμενες εξαιρέσεις.
Στη συνέχεια, θα συζητήσουμε το μπλοκ try-catch. Σημειώστε ότι για κάθε δοκιμαστικό μπλοκ, μπορούμε να έχουμε πολλά μπλοκ catch.
Δοκιμάστε το Catch Java
Η γενική σύνταξη του μπλοκ try-catch φαίνεται παρακάτω:
try{ //code causing exception } catch (exception (exception_type) e (object)) { //exception handling code }
Το μπλοκ δοκιμής μπορεί να έχει πολλές γραμμές κώδικα που μπορούν να δημιουργήσουν πολλές εξαιρέσεις. Κάθε μία από αυτές τις εξαιρέσεις αντιμετωπίζεται από ένα ανεξάρτητο μπλοκ αλιευμάτων.
Ο γενικός χειριστής εξαιρέσεων, αντικείμενο e της κλάσης Εξαίρεσης μπορεί να χειριστεί όλες τις εξαιρέσεις, αλλά αν θέλουμε να χειριστούμε συγκεκριμένες εξαιρέσεις, τότε συνιστάται να ορίσετε το γενικό χειριστή εξαίρεσης ως το τελευταίο μπλοκ αλιευμάτων.
Παράδειγμα Java Try Catch
Τώρα ας δείξουμε ένα μπλοκ δοκιμής-catch στην Java. Εδώ στο μπλοκ δοκιμής, ορίζουμε μια λειτουργία διαίρεσης. Ο διαιρέτης είναι μηδέν. Έτσι, η δήλωση που χωρίζει τους δύο αριθμούς δημιουργεί μια αριθμητική εξαίρεση. Έχουμε ένα μπλοκ catch που ορίζει έναν χειριστή για την αριθμητική εξαίρεση.
Δίνεται παρακάτω ένα παράδειγμα προγράμματος Java.
class Main { public static void main(String args()) { int val1, val2; try { //this block will contain statements that may raise exceptions System.out.println('Try Block:: Start'); val1 = 0; val2 = 25 / val1; System.out.println(val2); System.out.println('Try Block:: End'); } catch (ArithmeticException e) { //handler for ArithmeticException System.out.println('ArithmeticException :: Divide by Zero!!'); } System.out.println('Outside try-catch:: Rest of the code.'); } }
Παραγωγή
html συνεντεύξεις ερωτήσεις και απαντήσεις για έμπειρους
Αντιμετώπιση πολλαπλών εξαιρέσεων
Όπως ήδη αναφέρθηκε, ένα μπλοκ δοκιμής μπορεί να περιέχει έναν κωδικό που δημιουργεί περισσότερες από μία εξαιρέσεις. Σε αυτήν την περίπτωση, θα χρειαστούμε περισσότερα από ένα μπλοκ για να χειριστούμε κάθε εξαίρεση. Ένα μοναδικό μπλοκ δοκιμής μπορεί να ακολουθηθεί από πολλαπλά μπλοκ σύλληψης. Κάθε μπλοκ σύλληψης θα χειρίζεται τις ανεξάρτητες εξαιρέσεις.
Στην περίπτωση πολλαπλών μπλοκ σύλληψης, πρέπει να θυμόμαστε τα παρακάτω σημεία:
- Σε ένα πρόγραμμα Java, ανά πάσα στιγμή, μπορεί να προκύψει μόνο μία εξαίρεση. Επίσης, σε οποιοδήποτε σημείο, εκτελείται μόνο ένα μπλοκ σύλληψης.
- Τα πολλαπλά μπλοκ αλίευσης πρέπει να ταξινομηθούν με τέτοιο τρόπο ώστε το μπλοκ αλίευσης για την πιο συγκεκριμένη εξαίρεση να έρχεται πρώτα και μετά το γενικό.
Για παράδειγμα, Αν έχουμε ArithmeticException και γενική εξαίρεση, τότε το χειρισμό μπλοκ αλιείας ArithmeticException θα έρθει πρώτα ακολουθούμενο από την εξαίρεση χειρισμού μπλοκ catch.
Το παρακάτω παράδειγμα δείχνει πολλαπλά μπλοκ σύλληψης.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); myArray (5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
Παραγωγή
Στο παραπάνω πρόγραμμα, εμφανίζεται ένα ArithmeticException που βρίσκεται στο πρώτο μπλοκ catch. Εάν αυτό το μπλοκ αλιευμάτων δεν είχε καθοριστεί, τότε η εξαίρεση θα είχε μεταδοθεί στο γενικευμένο μπλοκ αλιευμάτων.
Ας τροποποιήσουμε ελαφρώς το παραπάνω πρόγραμμα έτσι ώστε το μπλοκ δοκιμών να δημιουργήσει δύο εξαιρέσεις. Τώρα ας δούμε την έξοδο.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); System.out.println('Array element 10 : ' + myArray(10)); myArray(5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
Παραγωγή
Εάν δούμε αυτήν την έξοδο, δείχνει το ArrayIndexOutOfBoundsException να ρίχνεται. Αυτό συμβαίνει επειδή η δήλωση που αυξάνει το ArrayIndexOutOfBoundsException εκτελείται πρώτα. Η εξαίρεση ρίχνεται και ο έλεγχος πηγαίνει στο αντίστοιχο μπλοκ σύλληψης.
Ένθετο Try-Catch
Ένα μπλοκ δοκιμής μέσα σε ένα άλλο μπλοκ δοκιμής ονομάζεται μπλοκ ένθεσης δοκιμής. Χρειαζόμαστε τέτοιες δομές σε ορισμένες περιπτώσεις, όταν ένα κομμάτι κώδικα που περιέχεται σε έναν κωδικό δοκιμής μπορεί να είναι τέτοιο ώστε ορισμένες γραμμές να δημιουργούν ορισμένες εξαιρέσεις και ένα άλλο κομμάτι κώδικα δημιουργεί μια εντελώς διαφορετική εξαίρεση.
Στην περίπτωση ένθετων μπλοκ δοκιμής, πρώτα, εκτελείται το εσωτερικό μπλοκ δοκιμής και αντιμετωπίζεται η εξαίρεση. Εάν το εσωτερικό μπλοκ δοκιμής δεν έχει αντίστοιχο μπλοκ σύλληψης, τότε διαδίδεται ένα επίπεδο μέχρι το μπλοκ δοκιμής γονέα. Με αυτόν τον τρόπο η εξαίρεση διαδίδεται προς τα πάνω μέχρι να βρεθεί αντίστοιχος χειριστής εξαιρέσεων.
Εάν δεν υπάρχει χειριστής εξαίρεσης που να ταιριάζει με την εξαίρεση, τότε το πρόγραμμα τερματίζεται απότομα με ένα μήνυμα που δημιουργείται από το σύστημα.
Η γενική σύνταξη ενός ένθετου μπλοκ δοκιμής δίνεται παρακάτω:
try { //try_block 1; try { //try_block 2; } catch(Exception e) { //exception handler code } } catch(Exception e) { //exception handler code }
Ας εφαρμόσουμε ένα πρόγραμμα για να δείξουμε το ένθετο μπλοκ δοκιμής.
class Main{ public static void main(String args()){ //Main try block try{ //try block1 try{ System.out.println('Try Block1'); int num =15/0; System.out.println(num); } catch(ArithmeticException e1){ System.out.println('Block1 Exception: e1'); } //try block2 try{ System.out.println('Try Block2'); int num =100/0; System.out.println(num); } catch(ArrayIndexOutOfBoundsException e2){ System.out.println('Block2 Exception: e2'); } System.out.println('General statement after Block1 and Block2'); } catch(ArithmeticException e3){ System.out.println('Main Block Arithmetic Exception'); } catch(ArrayIndexOutOfBoundsException e4){ System.out.println('Main Block ArrayIndexOutOfBoundsException'); } catch(Exception e5){ System.out.println('Main Block General Exception'); } System.out.println('Code after Nested Try Block'); } }
Παραγωγή
Στο παραπάνω πρόγραμμα, έχουμε δύο μπλοκ δοκιμής που περικλείονται στο κύριο μπλοκ δοκιμής. Και τα δύο μπλοκ εσωτερικής δοκιμής έχουν έναν κωδικό που αυξάνει την ArithmeticException. Ωστόσο, έχουμε παράσχει ένα αντίστοιχο μπλοκ σύλληψης μόνο για το πρώτο μπλοκ και όχι για το δεύτερο μπλοκ δοκιμής.
Ως εκ τούτου, το δεύτερο μπλοκ μεταδίδει την εξαίρεσή του στο κύριο μπλοκ δοκιμής και στη συνέχεια το χειρίζεται. Αυτό είναι εμφανές από την έξοδο.
Τέλος μπλοκ στην Java
Μέχρι στιγμής έχουμε δει το μπλοκ δοκιμής και ένθεσης. Γνωρίζουμε ότι ο κώδικας που αναμένεται να αυξήσει την εξαίρεση τοποθετείται σε ένα μπλοκ δοκιμής. Όταν παρουσιαστεί μια εξαίρεση, τότε το υπόλοιπο του κώδικα στο μπλοκ δοκιμής δεν εκτελείται.
Είτε το πρόγραμμα τερματίζεται απότομα εάν δεν γίνεται χειρισμός μιας εξαίρεσης ή ο έλεγχος μεταβιβάζεται στον χειριστή εξαιρέσεων.
Σε μια τέτοια περίπτωση, προκύπτει η ανάγκη να συμπεριληφθεί ένας κώδικας που θα εκτελεστεί ανεξάρτητα από το εάν συμβαίνει μια εξαίρεση ή όχι. Αυτό σημαίνει ότι θα εκτελέσουμε ένα κομμάτι κώδικα ακόμη και όταν προκύψει εξαίρεση και επίσης όταν δεν υπάρχει εξαίρεση.
Αλλά καθώς το μπλοκ δοκιμής εξέρχεται μετά την εξαίρεση, δεν μπορούμε να βάλουμε αυτόν τον κώδικα στο μπλοκ δοκιμής. Ομοίως, το μπλοκ αλιευμάτων έχει έναν χειριστή εξαίρεσης, οπότε δεν μπορούμε να το βάλουμε και στο μπλοκ αλίευσης.
Επομένως, χρειαζόμαστε ένα ξεχωριστό μπλοκ που περιέχει έναν κώδικα που εκτελεί ανεξάρτητα από το εάν συμβαίνει μια εξαίρεση ή όχι. Η Java παρέχει ένα μπλοκ 'τελικά' που περιέχει αυτό το κομμάτι κώδικα.
Ως εκ τούτου, ένα μπλοκ επιτέλους στην Java μπορεί να περιέχει κρίσιμες δηλώσεις που πρόκειται να εκτελεστούν στο πρόγραμμα. Η εκτέλεση αυτών των δηλώσεων πρέπει να πραγματοποιείται ακόμα και όταν υπάρχει εξαίρεση ή όχι.
Επομένως, θα βάλουμε κώδικα όπως κλείσιμο συνδέσεων, ροή αντικειμένων κ.λπ. ή οποιονδήποτε κώδικα εκκαθάρισης στο μπλοκ επιτέλους, έτσι ώστε να μπορούν να εκτελεστούν ακόμη και αν προκύψει εξαίρεση.
Το τέλος μπλοκ στην Java συνήθως τοποθετείται μετά από ένα μπλοκ δοκιμής ή σύλληψης. Σημειώστε ότι το μπλοκ επιτέλους δεν μπορεί να υπάρχει χωρίς μπλοκ δοκιμής. Όταν το μπλοκ επιτέλους συμπεριλαμβάνεται στο try-catch, γίνεται « δοκιμάστε-πιάστε-τελικά ' ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ.
Μπορούμε να παρακάμψουμε το τελευταίο μπλοκ στον κώδικα χειρισμού εξαιρέσεων. Αυτό σημαίνει ότι τελικά το μπλοκ είναι προαιρετικό.
Εάν το μπλοκ δοκιμής δεν δημιουργήσει καμία εξαίρεση, τότε το μπλοκ τελικά θα εκτελεστεί μετά το μπλοκ δοκιμής. Εάν υπάρχει μια εξαίρεση στο μπλοκ δοκιμής, τότε ο έλεγχος θα περάσει πρώτα στο μπλοκ σύλληψης και έπειτα στο μπλοκ τελικά.
Μια εξαίρεση που εμφανίζεται τελικά στο μπλοκ συμπεριφέρεται με τον ίδιο τρόπο όπως οποιαδήποτε άλλη εξαίρεση. Ακόμα και αν το μπλοκ δοκιμής περιέχει δήλωση επιστροφής ή διακλάδωση δηλώσεις όπως διακοπή και συνέχεια, τότε το τέλος μπλοκ θα εξακολουθεί να εκτελείται.
Λαμβάνοντας υπόψη αυτά τα σημεία, προχωρήστε με τη γενική σύνταξη και παραδείγματα επιτέλους αποκλεισμού.
Η γενική σύνταξη του τελικού μπλοκ έχει ως εξής:
try { //code that might raise exception }catch { //code that handles exception }finally { //mandatory code to be executed }
Παρόλο που τελικά το μπλοκ εκτελείται πάντα, υπάρχουν ορισμένες καταστάσεις ή περιπτώσεις στις οποίες δεν εκτελείται.
Αυτές είναι οι παρακάτω περιπτώσεις:
- Όταν το νήμα είναι νεκρό.
- Όταν χρησιμοποιείται η μέθοδος System.exit ().
- Όταν εμφανίζεται μια εξαίρεση στο μπλοκ τελικά.
Ας εφαρμόσουμε μερικά προγράμματα για να δείξουμε το τέλος.
class Main { public static void main (String args()) { //try block try { System.out.println ('::Try Block::'); int data = 125 / 5; System.out.println ('Result:' + data); } //catch block catch (NullPointerException e) { System.out.println ('::Catch Block::'); System.out.println (e); } //finally block finally { System.out.println (':: Finally Block::'); System.out.println ('No Exception::finally block executed'); } System.out.println ('rest of the code...'); } }
Παραγωγή
Το παραπάνω πρόγραμμα δείχνει ένα μπλοκ try-catch-akhirnya. Στο μπλοκ δοκιμής, εκτελείται μια έγκυρη λειτουργία και ως εκ τούτου δεν υπάρχει εξαίρεση. Επομένως, ο έλεγχος δεν περνά για να πιάσει από την προσπάθεια αλλά για να μπλοκάρει τελικά.
Το ακόλουθο πρόγραμμα είναι ένα άλλο παράδειγμα του μπλοκ try-catch-Akhirnya, αλλά σε αυτήν την περίπτωση, η εξαίρεση ρίχνεται στο μπλοκ δοκιμής καθώς εκτελούμε μια διαίρεση με μηδενική λειτουργία. Έτσι, το μπλοκ επιτέλους εκτελείται μετά την εκτέλεση του μπλοκ δοκιμής.
class Main { public static void main(String args()) { //try block try{ System.out.println('::Try block::'); int num=67/0; System.out.println(num); } //catch block catch(ArithmeticException e){ System.out.println('::Catch block::'); System.out.println('ArithmeticException::Number divided by zero'); } //finally block finally{ System.out.println('::Finally block::'); } System.out.println('Rest of the code continues...'); } }
Παραγωγή
Ρίξτε μια εξαίρεση στην Ιάβα
Η Java παρέχει μια λέξη-κλειδί 'ρίξτε' χρησιμοποιώντας την οποία μπορούμε να ρίξουμε ρητά τις εξαιρέσεις στον κώδικα. Για παράδειγμα, αν ελέγχουμε αριθμητικές πράξεις και θέλουμε να αυξήσουμε ορισμένες εξαιρέσεις αφού ελέγξουμε τελεστές, μπορούμε να το κάνουμε χρησιμοποιώντας τη λέξη-κλειδί «ρίξτε».
Χρησιμοποιώντας τη λέξη-κλειδί ρίψης, μπορούμε να ρίξουμε τις επιλεγμένες ή μη ελεγμένες εξαιρέσεις. Η λέξη-κλειδί ρίψης χρησιμοποιείται επίσης για τη ρίψη προσαρμοσμένων εξαιρέσεων.
Η γενική σύνταξη της λέξης-κλειδιού ρίψης είναι:
throw exception; or throw new exception_class('error message');
Δίνεται παρακάτω ένα παράδειγμα προγράμματος για την επίδειξη της λέξης-κλειδιού ρίψης.
public class Main{ static void validate_Age(int age){ //if specified age is <18, throw ArithmeticException if(age<18) throw new ArithmeticException('Not eligible to vote and drive!!'); else //print the message System.out.println('Eligible to vote and drive!!'); } public static void main(String args()){ //call validate_Age method validate_Age(10); System.out.println('rest of the code...'); } }
Παραγωγή
Στο παραπάνω πρόγραμμα, χρησιμοποιούμε μια μέθοδο για την επικύρωση της ηλικίας. Εάν η ηλικία είναι<18, then an exception is thrown to indicate the age is not valid.
Ρίχνει ρήτρα
Έχουμε δει να προσπαθούμε να αποκλείσουμε εξαιρέσεις. Περιέχει τον κώδικα που μπορεί να δημιουργήσει εξαιρέσεις. Υπάρχει ένας άλλος τρόπος για να δηλώσετε μια εξαίρεση και χρησιμοποιεί τη λέξη-κλειδί «ρίχνει».
Η δήλωση εξαίρεσης χρησιμοποιώντας τη λέξη-κλειδί «ρίχνει» λέει στον προγραμματιστή ότι μπορεί να υπάρχει μια εξαίρεση που καθορίζεται μετά τη λέξη-κλειδί «ρίψεις» και ο προγραμματιστής θα πρέπει να παρέχει τον αντίστοιχο κωδικό χειριστή για αυτήν την εξαίρεση για να διατηρήσει την κανονική ροή του προγράμματος.
Ωστόσο, τίθεται το ερώτημα γιατί χρειαζόμαστε μια λέξη-κλειδί 'ρίχνει' όταν έχουμε ένα πιο αξιόπιστο μπλοκ δοκιμής για να δηλώσουμε και να χειριστούμε τις εξαιρέσεις;
Ένας λόγος είναι ότι ο αριθμός των εξαιρέσεων που ενδέχεται να συμβούν αυξάνεται, ο αριθμός των μπλοκ αλιείας που χειρίζεται τις εξαιρέσεις αυξάνεται επίσης καθώς ένα μπλοκ αλιευμάτων μπορεί να χειριστεί μόνο μία εξαίρεση.
Ομοίως, εάν υπάρχουν πολλές μέθοδοι σε ένα πρόγραμμα και κάθε μέθοδος έχει πολλές εξαιρέσεις, τότε ο κώδικας θα γίνει άσκοπα μακρύς και μη διαχειρίσιμος.
Έτσι, η δήλωση εξαίρεσης με τη λέξη-κλειδί ρίχνει στην υπογραφή της μεθόδου και, στη συνέχεια, ο χειρισμός της κλήσης μεθόδου χρησιμοποιώντας το try-catch φαίνεται να είναι μια βιώσιμη λύση.
Ένα άλλο πλεονέκτημα της δήλωσης εξαιρέσεων χρησιμοποιώντας τη λέξη-κλειδί ρίχνει είναι ότι είμαστε αναγκασμένοι να χειριστούμε τις εξαιρέσεις. Εάν δεν παρέχουμε ένα πρόγραμμα χειρισμού για μια εξαιρούμενη δήλωση, τότε το πρόγραμμα θα δημιουργήσει ένα σφάλμα.
Η γενική σύνταξη της λέξης-κλειδιού ρίχνει ως εξής:
return_type method_name() throws exception_class_name{ //method code }
Ας εφαρμόσουμε τώρα ένα πρόγραμμα Java για να δείξουμε τη λέξη-κλειδί «ρίχνει».
Σε αυτό το πρόγραμμα, έχουμε μια κλάση Example_throw στην οποία έχουμε μια μέθοδο testMethod. Στην υπογραφή αυτής της μεθόδου test, δηλώνουμε δύο εξαιρέσεις IOException και Arithmetic Exception χρησιμοποιώντας τη λέξη-κλειδί ρίψεων. Στη συνέχεια, στην κύρια λειτουργία, οι εξαιρέσεις που ρίχνονται αντιμετωπίζονται από το μπλοκ σύλληψης.
import java.io.*; class Example_Throw { //declare exception using throws in the method signature void testMethod(int num) throws IOException, ArithmeticException{ if(num==1) throw new IOException('IOException Occurred'); else throw new ArithmeticException('ArithmeticException'); } }class Main{ public static void main(String args()){ try{ //this try block calls the above method so handle the exception Example_Throw obj=new Example_Throw(); obj.testMethod(1); }catch(Exception ex){ System.out.println(ex); } } }
Παραγωγή
Συχνές Ερωτήσεις
Ε # 1) Πότε να χρησιμοποιήσετε ρίψεις ρίξτε VS try-catch στην Java;
Απάντηση: Η λέξη-κλειδί 'ρίχνει' χρησιμοποιείται για να δηλώσει την εξαίρεση με την υπογραφή της μεθόδου. Η λέξη-κλειδί ρίψης χρησιμοποιείται για τη ρητή εξαίρεση της εξαίρεσης. Το μπλοκ try-catch χρησιμοποιείται για τον χειρισμό των εξαιρέσεων που ρίχνονται από άλλους.
Ε # 2) Μπορούμε να χρησιμοποιήσουμε ρίψεις, να δοκιμάσουμε και να πιάσουμε με μία μόνο μέθοδο;
Απάντηση: Όχι. Δεν μπορείτε να ρίξετε την εξαίρεση και να την πιάσετε με την ίδια μέθοδο. Η εξαίρεση που δηλώνεται με τη χρήση βολών πρέπει να αντιμετωπίζεται στη μέθοδο κλήσης που καλεί τη μέθοδο που έχει ρίξει την εξαίρεση.
Ε # 3) Τι συμβαίνει όταν ένα μπλοκ αλίευσης ρίξει μια εξαίρεση;
Απάντηση: Όταν μια εξαίρεση ρίχνεται στο μπλοκ catch, τότε το πρόγραμμα θα σταματήσει την εκτέλεση. Σε περίπτωση που το πρόγραμμα πρέπει να συνεχιστεί, τότε πρέπει να υπάρχει ένα ξεχωριστό μπλοκ δοκιμής για να χειριστεί την εξαίρεση που εγείρεται στο μπλοκ αλιευμάτων.
Q # 4) Τι είναι το catch-catch-Java στην Java;
Απάντηση: Το μπλοκ try-catch-akhirnya περιέχει τα τρία μπλοκ, δηλαδή μπλοκ δοκιμής, μπλοκ αλυσίδας και τελικά μπλοκ.
Δοκιμάστε το μπλοκ περιέχει τον κώδικα που μπορεί να ρίξει μια εξαίρεση. Το Catch block περιέχει τον χειριστή εξαιρέσεων για εξαιρέσεις στο μπλοκ δοκιμής. Το μπλοκ επιτέλους περιέχει τον κρίσιμο κώδικα που θα εκτελεστεί ανεξάρτητα από το αν η εξαίρεση έχει συμβεί ή όχι.
καλύτερο λογισμικό συντονισμού υπολογιστή 2019
Ε # 5) Μπορεί τελικά να μπλοκάρει το try-catch;
Απάντηση: Ναι, εάν έχουμε έναν κώδικα εκκαθάρισης που μπορεί να ρίξει μια εξαίρεση στο τέλος μπλοκ, τότε μπορούμε να έχουμε ένα μπλοκ δοκιμής. Ωστόσο, φαίνεται άσχημο.
συμπέρασμα
Σε αυτό το σεμινάριο, συζητήσαμε τις διάφορες λέξεις-κλειδιά που χρησιμοποιούνται στον χειρισμό εξαιρέσεων στην Java. Συζητήσαμε τις λέξεις-κλειδιά όπως δοκιμή, πιάσιμο, τέλος, ρίψη και ρίψη.
Ο κωδικός που πιθανώς θα ρίξει μια εξαίρεση περικλείεται στο μπλοκ δοκιμής και το catch παρέχει τον χειριστή για την εξαίρεση. Το τέλος μπλοκ εκτελεί τον κωδικό που περικλείεται σε αυτό, ανεξάρτητα από το αν η εξαίρεση ρίχνεται ή όχι. Το μπλοκ τελικά ακολουθεί γενικά το μπλοκ try-catch.
Χρησιμοποιούμε τη λέξη-κλειδί ρίψεων για να δηλώσουμε εξαιρέσεις με την υπογραφή της μεθόδου και η ρίψη χρησιμοποιείται ρητά για την εξαίρεση. Συνήθως χρησιμοποιούμε λέξη-κλειδί ρίψης για να ρίξουμε προσαρμοσμένες εξαιρέσεις.
=> Ανατρέξτε στον τέλειο οδηγό εκπαίδευσης Java εδώ.
Συνιστώμενη ανάγνωση
- Εξαιρέσεις Java και χειρισμός εξαιρέσεων με παραδείγματα
- Πώς να χειριστείτε το ArrayIndexOutOfBoundsException στην Java;
- Εκπαιδευτικό πρόγραμμα JAVA για αρχάριους: 100+ πρακτικά εκπαιδευτικά βίντεο Java
- Χειρισμός εξαιρέσεων JDBC - Τρόπος χειρισμού εξαιρέσεων SQL
- C # Εκπαιδευτικός χειρισμός εξαίρεσης με παραδείγματα κώδικα
- Πλήρης οδηγός για την εξαίρεση PL SQL με παραδείγματα
- Εξαίρεση χειρισμός σε C ++
- Python Try Except - Εξαίρεση χειρισμού Python με παραδείγματα