Εξαίρεση Χειρισμός σε Java

⚡ Έξυπνη Σύνοψη

Java Ο Χειρισμός Εξαιρέσεων παρέχει έναν δομημένο μηχανισμό για τη διαχείριση σφαλμάτων χρόνου εκτέλεσης που διαταράσσουν την κανονική ροή του προγράμματος. Χρησιμοποιεί λέξεις-κλειδιά try, catch, finally, throw και throws για την ανίχνευση, την απομόνωση και την ανάκτηση από εξαιρετικές συνθήκες, διατηρώντας παράλληλα...ping εφαρμογές ισχυρές και προβλέψιμες.

  • ⚠️ Ορισμός εξαίρεσης: Μια εξαίρεση είναι ένα συμβάν χρόνου εκτέλεσης που διακόπτει την τυπική ακολουθία εκτέλεσης και αναπαρίσταται ως ένα αντικείμενο που περιγράφει τη συνθήκη σφάλματος.
  • 🧯 Δοκιμάστε το Catch Block: Τυλίξτε επικίνδυνο κώδικα μέσα σε ένα μπλοκ try και ακολουθήστε το με ένα ή περισσότερα μπλοκ catch για να καταγράψετε συγκεκριμένους τύπους εξαιρέσεων με ομαλό τρόπο.
  • 🔁 Τέλος, Συμπεριφορά: Το μπλοκ finally εκτελείται πάντα μετά από try and catch, καθιστώντας το ιδανικό για το κλείσιμο αρχείων, sockets ή την απελευθέρωση άλλων πόρων του συστήματος.
  • Ιεραρχία εξαιρέσεων: Όλες οι εξαιρέσεις κληρονομούνται από το Throwable, το οποίο διακλαδίζεται σε Error και Exception, με το RuntimeException να καλύπτει μη ελεγμένες περιπτώσεις όπως η διαίρεση με το μηδέν.
  • 🧪 Καλυτερα Πρακτικές: Εντοπίστε πρώτα την πιο συγκεκριμένη εξαίρεση, αποφύγετε τα κενά μπλοκ catch, καταγράψτε σημαντικά μηνύματα και χρησιμοποιήστε πολλαπλά catch για να διατηρήσετε τον κώδικα συνοπτικό και συντηρήσιμο.

Εξαίρεση Χειρισμός σε Java

Τι είναι μια εξαίρεση στο Java?

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

Υπάρχουν δύο ευρείες κατηγορίες σφαλμάτων στο Java:

  1. Μεταγλώττιση χρονικών σφαλμάτων
  2. Σφάλματα χρόνου εκτέλεσης

Τα σφάλματα χρόνου μεταγλώττισης μπορούν να ταξινομηθούν σε δύο επιπλέον τύπους:

  • Σφάλματα σύνταξης
  • Σημασιολογικά λάθη

Παράδειγμα συντακτικών σφαλμάτων:

Αντί να δηλώσει int a; κατά λάθος το δηλώσατε ως in a;, για το οποίο ο μεταγλωττιστής θα εμφανίσει σφάλμα.

Παράδειγμα Σημασιολογικών Σφαλμάτων: Έχετε δηλώσει μια μεταβλητή int a; και μετά από μερικές γραμμές κώδικα δηλώνετε ξανά έναν ακέραιο ως int a;. Όλα αυτά τα σφάλματα επισημαίνονται κατά τη μεταγλώττιση του κώδικα.

Παράδειγμα σφαλμάτων χρόνου εκτέλεσης

Ένα σφάλμα χρόνου εκτέλεσης αναφέρεται ως ΕξαίρεσηΕίναι οποιοδήποτε συμβάν που διακόπτει την κανονική ροή εκτέλεσης προγράμματος. Παραδείγματα εξαιρέσεων περιλαμβάνουν την αριθμητική εξαίρεση, την εξαίρεση NullPointerException, την εξαίρεση διαίρεσης με το μηδέν και πολλά άλλα. Εξαιρέσεις στο Java είναι συνθήκες που συχνά βρίσκονται εκτός του άμεσου ελέγχου ενός προγραμματιστή.

Πατήστε εδώ εάν το βίντεο δεν είναι προσβάσιμο

Γιατί χρειαζόμαστε τον χειρισμό εξαιρέσεων;

Ας υποθέσουμε ότι έχετε κωδικοποιήσει ένα πρόγραμμα για πρόσβαση σε έναν διακομιστή. Τα πράγματα λειτουργούν καλά όσο εσείς το αναπτύσσετε.ping τον κώδικα σε τοπικό περιβάλλον με ελεγχόμενες συνθήκες.

Java εξαίρεση Χειρισμός

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

Java εξαίρεση Χειρισμός

Πώς να χειριστείτε μια εξαίρεση στο Java

Μέχρι στιγμής έχουμε δει ότι μια εξαίρεση είναι συχνά πέρα ​​από τον έλεγχο ενός προγραμματιστή. Ωστόσο, το να αποδίδουμε την αποτυχία του κώδικα σε περιβαλλοντικά ζητήματα δεν αποτελεί πραγματική λύση. Χρειάζεστε ισχυρό προγραμματισμό που να αντιμετωπίζει εξαιρετικές καταστάσεις. Ένας τέτοιος κώδικας είναι γνωστός ως Χειριστής εξαιρέσεων.

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

Java εξαίρεση Χειρισμός

Για να το εφαρμόσετε αυτό, θα μπορούσατε να γράψετε κώδικα για να συνδεθείτε στον διακομιστή χρησιμοποιώντας τις παραδοσιακές συνθήκες if και else. Θα ελέγξετε αν ο διακομιστής είναι εκτός λειτουργίας και, εάν ναι, θα γράψετε κώδικα για να συνδεθείτε στον εφεδρικό διακομιστή. Αυτή η οργάνωση κώδικα χρησιμοποιώντας κλάδους "if" και "else" δεν είναι αποτελεσματική όταν ο κώδικάς σας έχει πολλαπλούς Java εξαιρέσεις διαχειρίζομαι.

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

Δοκιμάστε το Catch Block στο Java

Java Παρέχει έναν ενσωματωμένο μηχανισμό χειρισμού εξαιρέσεων που διαχωρίζει την κανονική λογική από τη λογική αποκατάστασης σφαλμάτων.

  1. Ο κανονικός κώδικας μπαίνει στο a ΔΟΚΙΜΑΣΤΕ ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ.
  2. Ο κώδικας χειρισμού εξαιρέσεων μπαίνει στο ΑΛΙΕΥΜΑΤΩΝ ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ.

Δοκιμάστε το Catch Block

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

Δοκιμάστε το Catch Block

Έτσι, λοιπόν, αντιμετωπίζεται μια εξαίρεση Java.

Σύνταξη για τη χρήση try και catch

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

Παράδειγμα μπλοκ δοκιμής catch

Βήμα 1) Αντιγράψτε τον παρακάτω κώδικα σε ένα πρόγραμμα επεξεργασίας.

class JavaException {
   public static void main(String args[]){
      int d = 0;
      int n = 20;
      int fraction = n/d;
     System.out.println("End Of Main");
   }
}

Βήμα 2) Αποθηκεύστε το αρχείο και μεταγλωττίστε τον κώδικα. Εκτελέστε το πρόγραμμα χρησιμοποιώντας την εντολή java. JavaΕξαίρεση.

Βήμα 3) Μια Αριθμητική Εξαίρεση, διαιρώντας με το μηδέν, εμφανίζεται για τη γραμμή 5 και η γραμμή 6 δεν εκτελείται ποτέ.

Βήμα 4) Ας εξετάσουμε τώρα πώς το try και το catch θα μας βοηθήσουν να χειριστούμε αυτήν την εξαίρεση. Θα βάλουμε τη γραμμή κώδικα που προκαλεί την εξαίρεση σε ένα προσπαθώ μπλοκ, ακολουθούμενο από α αλιευμάτων φραγμός. Αντιγράψτε τον παρακάτω κώδικα στο πρόγραμμα επεξεργασίας.

class JavaException {
 public static void main(String args[]) {
  int d = 0;
  int n = 20;
  try {
   int fraction = n / d;
   System.out.println("This line will not be Executed");
  } catch (ArithmeticException e) {
   System.out.println("In the catch Block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Βήμα 5) Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα. Θα λάβετε το ακόλουθο αποτέλεσμα.

Δοκιμάστε το Catch Block

Όπως παρατηρείτε, η εξαίρεση αντιμετωπίζεται και εκτελείται και η τελευταία γραμμή κώδικα. Επίσης, σημειώστε ότι η γραμμή 7 δεν θα εκτελεστεί επειδή Μόλις δημιουργηθεί εξαίρεση, η ροή του ελέγχου μεταπηδά στο μπλοκ αλίευσης.

Σημείωση: Το αντικείμενο ArithmeticException "e" μεταφέρει πληροφορίες σχετικά με την εξαίρεση που έχει προκύψει, οι οποίες μπορούν να είναι χρήσιμες κατά την εκτέλεση ενεργειών ανάκτησης.

Java Ιεραρχία Κλάσης Εξαίρεσης

Αφού εκτελεστεί μία εντολή catch, οι άλλες παρακάμπτονται και η εκτέλεση συνεχίζεται μετά το μπλοκ try και catch. Τα ένθετα μπλοκ catch πρέπει να ακολουθούν την ιεραρχία εξαιρέσεων από την πιο συγκεκριμένη υποκλάση έως την πιο γενική γονική κλάση.

Java Ιεραρχία Εξαίρεσης

  • Όλες οι τάξεις εξαίρεσης σε Java Επεκτείνετε την κλάση Throwable. Η Throwable έχει δύο υποκλάσεις, Error και Exception.
  • Η κλάση Error ορίζει τις εξαιρέσεις ή τα προβλήματα που δεν αναμένεται να προκύψουν υπό κανονικές συνθήκες στο πρόγραμμά σας, για παράδειγμα, σφάλμα μνήμης, σφάλμα υλικού ή σφάλμα JVM.
  • Η κλάση Exception αντιπροσωπεύει τις εξαιρέσεις που μπορούν να χειριστεί το πρόγραμμά σας και το πρόγραμμά σας μπορεί να ανακάμψει από αυτές τις εξαιρέσεις χρησιμοποιώντας μπλοκ try and catch.
  • Μια RuntimeException είναι μια υποκλάση της κλάσης Exception. Οι εξαιρέσεις αυτού του τύπου αντιπροσωπεύουν μη ελεγμένες εξαιρέσεις που εμφανίζονται κατά τον χρόνο εκτέλεσης και δεν μπορούν να ανιχνευθούν κατά τον χρόνο μεταγλώττισης. Καλά παραδείγματα περιλαμβάνουν την εξαίρεση διαίρεσης με το μηδέν και την εξαίρεση δείκτη null.
  • Η εξαίρεση IOException δημιουργείται κατά τη διάρκεια των λειτουργιών εισόδου και εξόδου.
  • ΔιακοπείσαΕξαίρεσηστο Java δημιουργείται κατά τη διάρκεια πολυνηματικών λειτουργιών όταν ένα νήμα διακόπτεται.

Παράδειγμα: Ένθεση μπλοκ δοκιμής και πιάσματος

Βήμα 1) Αντιγράψτε τον παρακάτω κώδικα σε ένα πρόγραμμα επεξεργασίας.

class JavaException {
 public static void main(String args[]) {
  try {
   int d = 1;
   int n = 20;
   int fraction = n / d;
   int g[] = {
    1
   };
   g[20] = 100;
  }
  /*catch(Exception e){
  	System.out.println("In the catch block due to Exception = "+e);
  }*/
  catch (ArithmeticException e) {
   System.out.println("In the catch block due to Exception = " + e);
  } catch (ArrayIndexOutOfBoundsException e) {
   System.out.println("In the catch block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Βήμα 2) Αποθηκεύστε το αρχείο και μεταγλωττίστε τον κώδικα. Εκτελέστε το πρόγραμμα χρησιμοποιώντας την εντολή, Ιάβα JavaΕξαίρεση.

Βήμα 3) Δημιουργείται ένα ArrayIndexOutOfBoundsException. Αλλάξτε την τιμή του int d σε 0. Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα.

Βήμα 4) Πρέπει να δημιουργηθεί μια ArithmeticException.

Βήμα 5) Αποσχολιάστε τη γραμμή 10 έως τη γραμμή 12. Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα.

Βήμα 6) Σφάλμα μεταγλώττισης; Αυτό συμβαίνει επειδή η Exception είναι η βασική κλάση της ArithmeticException. Οποιαδήποτε εξαίρεση που προκύπτει από την ArithmeticException μπορεί επίσης να αντιμετωπιστεί από την κλάση Exception. Έτσι, το μπλοκ catch της ArithmeticException δεν θα έχει ποτέ την ευκαιρία να εκτελεστεί, γεγονός που το καθιστά περιττό. Εξ ου και το σφάλμα μεταγλώττισης.

Java Επιτέλους Μπλοκ

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

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

Εάν προκύψει εξαίρεση στο μπλοκ try, το μπλοκ finally εκτελείται αφού ολοκληρωθεί το μπλοκ catch.

Παράδειγμα τελικά μπλοκαρίσματος

Βήμα 1) Αντιγράψτε τον παρακάτω κώδικα σε ένα πρόγραμμα επεξεργασίας.

class JavaException {
   public static void main(String args[]){
    try{
       int d = 0;
       int n =20;
       int fraction = n/d;
    }
  catch(ArithmeticException e){
    System.out.println("In the catch block due to Exception = "+e);
  }
  finally{
	System.out.println("Inside the finally block");
  }
}
}

Βήμα 2) Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα.

Βήμα 3) Αναμενόμενη έξοδος: Το μπλοκ finally εκτελείται παρόλο που προκύπτει μια εξαίρεση.

Βήμα 4) Αλλάξτε την τιμή της μεταβλητής d = 1. Αποθηκεύστε, μεταγλωττίστε και εκτελέστε τον κώδικα και παρατηρήστε την έξοδο.

καλυτερα Πρακτικές για Java εξαίρεση Χειρισμός

Η τήρηση μερικών αποδεδειγμένων κανόνων θα σας βοηθήσει να διατηρήσετε το Java κώδικας ανθεκτικός, ευανάγνωστος και εύκολος στην αποσφαλμάτωση:

  • Εντοπίστε πρώτα την πιο συγκεκριμένη εξαίρεση και μετά τις πιο γενικές, για να διατηρήσετε την ακεραιότητα της ιεραρχίας εξαιρέσεων.
  • Αποφύγετε τα κενά μπλοκ catch. Καταγράψτε τουλάχιστον την εξαίρεση, ώστε να μην χαθεί ποτέ η βασική αιτία.
  • Χρησιμοποιήστε το μπλοκ finally ή δοκιμάστε με πόρους για να απελευθερώσετε αρχεία, υποδοχές και συνδέσεις βάσεων δεδομένων.
  • Ρίξτε ελεγμένες εξαιρέσεις μόνο όταν ο καλών μπορεί να ανακάμψει εύλογα και χρησιμοποιήστε μη ελεγμένες εξαιρέσεις για σφάλματα προγραμματισμού.
  • Τυλίξτε τις εξαιρέσεις χαμηλού επιπέδου σε μια ουσιαστική επιχειρηματική εξαίρεση για να διατηρήσετε το API contracείναι καθαρό.
  • Ποτέ μην καταπίνετε το InterruptedException σιωπηλά σε πολυνηματικό κώδικα, επαναφέρετε αντ' αυτού τη σημαία διακοπής.

Συχνές Ερωτήσεις

Οι ελεγμένες εξαιρέσεις επαληθεύονται κατά τη στιγμή της μεταγλώττισης και πρέπει να δηλωθούν ή να εντοπιστούν, όπως το IOException. Οι μη ελεγμένες εξαιρέσεις επεκτείνουν το RuntimeException, εμφανίζονται κατά τον χρόνο εκτέλεσης και δεν απαιτούν υποχρεωτικό χειρισμό, όπως το NullPointerException ή το ArithmeticException.

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

Η λέξη-κλειδί throw χρησιμοποιείται μέσα σε μια μέθοδο για να εγείρει ένα αντικείμενο εξαίρεσης, ενώ η λέξη-κλειδί throws χρησιμοποιείται σε μια υπογραφή μεθόδου για να δηλώσει ότι η μέθοδος μπορεί να περάσει ορισμένες ελεγμένες εξαιρέσεις στον καλούντα της για χειρισμό.

Ναι. Ένα μπλοκ try μπορεί να ακολουθείται από ένα μπλοκ finally χωρίς μπλοκ catch. Αυτό το μοτίβο χρησιμοποιείται όταν ο προγραμματιστής θέλει να διασφαλίσει ότι ο κώδικας καθαρισμού εκτελείται παρόλο που η ίδια η εξαίρεση μεταδίδεται στον καλούντα.

Ναι. Εργαλεία παρατηρησιμότητας με τεχνητή νοημοσύνη αναλύουν τη στοίβα traces, αρχεία καταγραφής και διαδρομές κώδικα για την πρόβλεψη των πιθανών εξαιρέσεων κατά τον χρόνο εκτέλεσης. Προτείνουν αμυντικούς ελέγχους, συνιστούν την τοποθέτηση των catch και τις ανωμαλίες της επιφάνειας, βοηθούνping Οι ομάδες αποτρέπουν τα ατυχήματα πριν φτάσουν στην παραγωγή.

Οι βοηθοί τεχνητής νοημοσύνης αναλύουν στοίβα traces, τα συσχετίζουν με τον πηγαίο κώδικα και προτείνουν πιθανές βασικές αιτίες καθώς και διορθώσεις. Δημιουργούν πρότυπα try catch, προτείνουν βελτιώσεις στην καταγραφή, ακόμη και ξαναγράφουν ελαττωματικές μεθόδους, μειώνοντας δραματικά τον χρόνο που αφιερώνουν οι προγραμματιστές στη διάγνωση. Java εξαιρέσεις.

Συνοψίστε αυτήν την ανάρτηση με: