Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java-vangst Meerdere uitzonderingen

Java catch Meerdere uitzonderingen

In deze tutorial leren we met behulp van voorbeelden om te gaan met meerdere uitzonderingen in Java.

Vóór Java 7 moesten we meerdere uitzonderingsbehandelingscodes schrijven voor verschillende soorten uitzonderingen, zelfs als er coderedundantie was.

Laten we een voorbeeld nemen.

Voorbeeld 1:Meerdere catch-blokken

class Main {
  public static void main(String[] args) {
    try {
      int array[] = new int[10];
      array[10] = 30 / 0;
    } catch (ArithmeticException e) {
      System.out.println(e.getMessage());
    } catch (ArrayIndexOutOfBoundsException e) {
      System.out.println(e.getMessage());
    } 
  }
}

Uitvoer

/ by zero

In dit voorbeeld kunnen zich twee uitzonderingen voordoen:

  • ArithmeticException omdat we een getal proberen te delen door 0.
  • ArrayIndexOutOfBoundsException omdat we een nieuwe integer-array hebben gedeclareerd met array-grenzen 0 tot 9 en we proberen een waarde toe te wijzen aan index 10.

We printen het uitzonderingsbericht in zowel de catch blokken, d.w.z. dubbele code.

De associativiteit van de toewijzingsoperator = is van rechts naar links, dus een ArithmeticException wordt als eerste gegooid met het bericht / by zero .


Meerdere uitzonderingen in een catch-blok afhandelen

In Java SE 7 en hoger kunnen we nu meer dan één type uitzondering opvangen in één catch blok.

Elk uitzonderingstype dat kan worden afgehandeld door de catch blok wordt gescheiden met een verticale balk of pijp | .

De syntaxis is:

try {
  // code
} catch (ExceptionType1 | Exceptiontype2 ex) { 
  // catch block
}

Voorbeeld 2:Blok voor meerdere vangsten

class Main {
  public static void main(String[] args) {
    try {
      int array[] = new int[10];
      array[10] = 30 / 0;
    } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
      System.out.println(e.getMessage());
    }
  }
}

Uitvoer

/ by zero

Meerdere uitzonderingen opvangen in één catch block vermindert codeduplicatie en verhoogt de efficiëntie.

De bytecode die wordt gegenereerd tijdens het compileren van dit programma zal kleiner zijn dan het programma met meerdere catch blokkeert omdat er geen coderedundantie is.

Opmerking: Als een catch blok verwerkt meerdere uitzonderingen, de catch-parameter is impliciet final . Dit betekent dat we geen waarden kunnen toewijzen aan vangparameters.


Uitzondering vangstbasis

Bij het opvangen van meerdere uitzonderingen in een enkele catch blok, wordt de regel gegeneraliseerd naar gespecialiseerd.

Dit betekent dat als er een hiërarchie van uitzonderingen is in de catch blok, kunnen we alleen de basisuitzondering opvangen in plaats van meerdere gespecialiseerde uitzonderingen te vangen.

Laten we een voorbeeld nemen.

Voorbeeld 3:Alleen basisuitzonderingsklasse vangen

class Main {
  public static void main(String[] args) {
    try {
      int array[] = new int[10];
      array[10] = 30 / 0;
    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }
}

Uitvoer

/ by zero

We weten dat alle uitzonderingsklassen subklassen zijn van de Exception klas. Dus in plaats van meerdere gespecialiseerde uitzonderingen te vangen, kunnen we eenvoudig de Exception . vangen klasse.


Als de basisuitzonderingsklasse al is opgegeven in de catch blok, gebruik geen onderliggende uitzonderingsklassen in dezelfde catch blok. Anders krijgen we een compilatiefout.

Laten we een voorbeeld nemen.

Voorbeeld 4:Vangbasis- en kinduitzonderingsklassen

class Main {
  public static void main(String[] args) {
    try {
      int array[] = new int[10];
      array[10] = 30 / 0;
    } catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) {
      System.out.println(e.getMessage());
    }
  }
}

Uitvoer

Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing

In dit voorbeeld ArithmeticException en ArrayIndexOutOfBoundsException zijn beide subklassen van de Exception klas. We krijgen dus een compilatiefout.


Java

  1. Java-operators
  2. Java-opmerkingen
  3. Java voor elke lus
  4. Java-strings
  5. Java-interface
  6. Java anonieme klasse
  7. Java proberen ... vangen
  8. Java worp en worpen
  9. Java proberen-met-bronnen
  10. Java-annotaties
  11. Java-beweringen