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



Ιάβα

Μπορούμε να χειριστούμε εξαιρέσεις με διαφορετικούς τρόπους στην Java. Στο προηγούμενο σεμινάριο, έχουμε δει πώς να χειριστούμε το εξαίρεση χρησιμοποιώντας το μπλοκ try-catch. Σε αυτό το σεμινάριο, θα μάθουμε σχετικά με το χειρισμό εξαιρέσεων χρησιμοποιώντας τη λέξη-κλειδί Java και Throw.

Λέξη κλειδί Java  

Σε προηγούμενα μαθήματα, έχουμε δει πώς να χειριστούμε τις ενσωματωμένες εξαιρέσεις όπως το ArithmeticException (για το χειρισμό διαίρεσης με 0 σφάλμα), το ArrayIndexOutOfBounds (για τον χειρισμό ζητημάτων ευρετηρίου συστοιχιών) κ.λπ. Ομοίως, μπορούμε να ορίσουμε τους δικούς μας κανόνες για να ρίξουμε εξαίρεση για μια συγκεκριμένη κατάσταση χρησιμοποιώντας το java βολή λέξη-κλειδί. Μπορούμε να χειριστούμε αυτές τις ειδικές συνθήκες χρησιμοποιώντας την υπάρχουσα κατηγορία Exception (ArithmeticException, NullPointerException, NumberFormatException, κλπ).

Σύνταξη

throw new excpetion_class("Exception message");

βολή - java λέξη-κλειδί για την εξαίρεση

νέος - λέξη-κλειδί java για να δημιουργήσετε μια νέα εξαίρεση

εξαίρεση_ τάξη  - μπορεί να είναι οποιαδήποτε από τις υπάρχουσες καθορισμένες κατηγορίες εξαιρέσεων.

Μήνυμα εξαίρεσης - το προσαρμοσμένο μήνυμα σχετικά με την απροσδόκητη κατάσταση ή εξαίρεση

Παράδειγμα

Στο παρακάτω παράδειγμα, δημιουργούμε μια νέα συνθήκη για μια εξαίρεση όπου δεν επιτρέπει σε ένα άτομο με ηλικία> 60 ετών. Σε αυτήν την περίπτωση, δημιουργούμε έναν τύπο ArithmeticException χρησιμοποιώντας τη λέξη-κλειδί java throw και εκτυπώνουμε ένα προσαρμοσμένο μήνυμα "Δεν επιτρέπονται οι ηλικιωμένοι".

public class ThrowExample {

  int age;
  public static void display(int age) {
    if(age>60)
      throw new ArithmeticException("Senior citizens are not allowed");
    else
      System.out.println("Person with age: " + age + " is allowed");
  }
  
  public static void main(String[] args) {
    display(65);
  }

}
Exception in thread "main" java.lang.ArithmeticException: Senior citizens are not allowed
  at ThrowExample.display(ThrowExample.java:6)
  at ThrowExample.main(ThrowExample.java:12)

Μόλις ρίξει μια εξαίρεση, τότε δεν εκτελεί τις υπόλοιπες δηλώσεις. Για παράδειγμα, εάν έχουμε μια άλλη κλήση μεθόδου με διαφορετική τιμή, δεν θα εκτελέσει αυτήν τη μέθοδο. Αυτό σημαίνει ότι δεν θα εκτελέσει τη δήλωση οθόνη (45)  δεδομένου ότι η προηγούμενη δήλωση έχει δημιουργήσει μια εξαίρεση.

public static void main(String[] args) {
    display(65);
    display(45);
  }

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

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

Βλέπε επίσης
ConcurrentMap στην Ιάβα

Σύνταξη

Παρακάτω είναι η σύνταξη της χρήσης του ρίχνει λέξη-κλειδί. Είναι σημαντικό να χειριστείτε την εξαίρεση χρησιμοποιώντας το try-catch από το οποίο καλούμε τη μέθοδο. Διαφορετικά θα ρίξει σφάλμα συλλογής.

class class_name{
  static void method_name() throws ExceptionType{
    
  }
  
  public static void main(String[] args) {
    try {
      method_name();
    }
    catch(ExceptionType e) {
      
    }
  }
}

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

Ας το καταλάβουμε με ένα παράδειγμα.

Παράδειγμα μη ελεγμένων εξαιρέσεων

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

public class ThrowsDemo {

  static void display() throws ArithmeticException {
    int result = 10/0;
    System.out.println("Result:" + result);
  }
  
  
  public static void main(String[] args) {
    try {
      display();
    }
    catch(ArithmeticException e) {
      System.out.println("Exception: " + e.getMessage());
    }
    
    System.out.println("Exceptions example");

  }

}
Exception: / by zero
Exceptions example

Παράδειγμα επιλεγμένων εξαιρέσεων

Ακολουθεί ένα παράδειγμα χειρισμού ελεγμένων εξαιρέσεων χρησιμοποιώντας τη λέξη-κλειδί ρίψεων. Σε αυτό το παράδειγμα, έχουμε δώσει ένα λανθασμένο όνομα αρχείου. Ως εκ τούτου, όταν εκτελεί τη δήλωση Αρχείο f = νέο αρχείο (όνομα αρχείου) ρίχνει IOException ειδικά για το FileNotFound.

import java.io.*;


public class ThrowsExample {

  public static void readFile() throws IOException {
    String filename = "E:\\CheckedExceptions.txt";
    int i;
    File f = new File(filename);
    FileReader fr = new FileReader(f);
    
  }
  public static void main(String[] args) {
    try {
      readFile();
    } catch (IOException e) {
      System.out.println(e.getMessage());
    }

  }

}
E:\CheckedExceptions.txt (The system cannot find the file specified)

Χειρισμός πολλαπλών εξαιρέσεων χρησιμοποιώντας ριχτάρια

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

Βλέπε επίσης
Σηματοφόρος στην Ιάβα

Αυτό το παράδειγμα δείχνει πώς μπορείτε να χειριστείτε το IOException και το ClassNotFoundException χρησιμοποιώντας τη λέξη-κλειδί ρίψεων.

public class MultiExceptions {

  static void showData() throws IOException,ClassNotFoundException{
    //code that may generate exception
      
  }
  public static void main(String[] args) {
    try {
      showData();
    }
    catch(IOException e) {
      System.out.println("Exception: " + e.getMessage());
    }
    catch(ClassNotFoundException e) {
      System.out.println("Exception: " + e.getMessage());
    }
  }

}

Παράδειγμα: Χρήση ρίψης και ρίψεων  

Μπορούμε να χρησιμοποιήσουμε και τα δύο βολή ρίχνει τη λέξη-κλειδί για χειρισμό εξαιρέσεων σε Java. Χρησιμοποιούμε το ρίχνει λέξη-κλειδί στη δήλωση μεθόδου και ρίξτε μια νέα εξαίρεση μέσα χρησιμοποιώντας το βολή λέξη-κλειδί. Ρίχνει μια νέα εξαίρεση όταν ικανοποιεί την ηλικία του όρου> 60.

public class MultiExceptions {

  static void showData(int age) throws ArithmeticException {
    if(age > 60)
      throw new ArithmeticException("Senior citizen not allowed");
    else
      System.out.println("Age: " + age);	
  }
  public static void main(String[] args) {
    try {
      showData(70);
    }
    catch(ArithmeticException e) {
      System.out.println("Exception: Division by 0 not allowed");
    }
    
  }

}
Exception: Division by 0 not allowed

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

Λέξη-κλειδί Java Throws

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

import java.io.FileNotFoundException;

public class ExceptionDemo {

  public static void print() throws FileNotFoundException {
    throw new FileNotFoundException("File not found");
  }
  public static void main(String[] args) {
    try {
      print();
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }

}
java.io.FileNotFoundException: File not found
  at ExceptionDemo.print(ExceptionDemo.java:6)
  at ExceptionDemo.main(ExceptionDemo.java:10)

Διαφορά μεταξύ λέξης-κλειδιού ρίψης και ρίψεων  

Java ρίξτεΗ Java ρίχνει
Χρησιμοποιείται μέσα στη μέθοδοΧρησιμοποιείται στη δήλωση μεθόδου
Χρησιμοποιείται για να ρίξει μια νέα εξαίρεση μέσα στη μέθοδοΧρησιμοποιείται για να δηλώσει μια εξαίρεση που μπορεί να προκύψει μέσα στη μέθοδο
Μπορούμε να ρίξουμε μόνο μία εξαίρεση κάθε φοράΜπορούμε να χειριστούμε πολλές εξαιρέσεις ταυτόχρονα στη δήλωση μεθόδου
Μπορεί να χρησιμοποιηθεί μόνο με ανεξέλεγκτη εξαίρεση.Μπορεί να χρησιμοποιηθεί τόσο για ελεγμένες όσο και για μη ελεγμένες εξαιρέσεις
Δεν απαιτείται δοκιμαστικό catch για την αντιμετώπιση της εξαίρεσηςΕίναι η ευθύνη της καλούμενης μεθόδου να χειριστεί την εξαίρεση χρησιμοποιώντας το try-catch
Βλέπε επίσης
Νήμα στην Ιάβα

Αναφορά