Der Ausnahme Die Handhabung ist einer der leistungsstärksten Mechanismen zur Behandlung von Laufzeitfehlern, sodass der normale Ablauf der Anwendung aufrechterhalten werden kann. In Java ist eine Ausnahme ein abnormaler Zustand. Die Programmiersprache Java definiert verschiedene Ausnahmen. In diesem Abschnitt werden wir eine der prominentesten Ausnahmen besprechen Arithmetische Ausnahme in Java.
Die arithmetische Ausnahme ist eine Art ungewöhnliches Ergebnis oder ein ungeprüfter Fehler des Codes, der immer dann ausgelöst oder ausgelöst wird, wenn während der Laufzeit eine falsche mathematische oder arithmetische Operation im Code auftritt. Ein Laufzeitproblem, auch Ausnahme genannt, tritt immer dann auf, wenn der Nenner eines Bruchs 0 ist und die JVM das Ergebnis nicht herausfinden kann; Daher wird die Programmausführung abgebrochen und eine Ausnahme ausgelöst. Beachten Sie, dass das Programm an der Stelle beendet wird, an der die Ausnahme ausgelöst wurde. Allerdings wird der frühere Code ausgeführt und das entsprechende Ergebnis angezeigt.
Arithmetische Ausnahmestruktur
Die Basisklasse für arithmetische Ausnahmen ist java.lang.ArithmeticException, die untergeordnete Klasse von java.lang.RuntimeException, die wiederum die untergeordnete Klasse von java.lang.Exception ist.
Konstruktor für arithmetische Ausnahmen
Wie kommt es zu einer arithmetischen Ausnahme?
Im Folgenden sind zwei Situationen aufgeführt, in denen eine arithmetische Ausnahme auftreten kann.
- Wenn wir eine Division durchführen, bei der 0 als Teiler verwendet wird, d. h. 0 als Nenner kommt.
- Eine lange Dezimalzahl, die nicht durch Big Decimal endet.
Durch 0 dividieren
Dateiname: ArithmeticException.java
public class ArithmeticException { void divide(int a, int b) { // performing divison and storing th result int res = a / b; System.out.println('Division process has been done successfully.'); System.out.println('Result came after division is: ' + res); } // main method public static void main(String argvs[]) { // creating an object of the class ArithmeticException ArithmeticException obj = new ArithmeticException(); obj.divide(1, 0); } }
Ausgabe:
Exception in thread 'main' java.lang.ArithmeticException: / by zero at ArithmeticException.divide(ArithmeticException.java:6) at ArithmeticException.main(ArithmeticException.java:16)
Nicht terminierende große Dezimalzahl
Dateiname: ArithmeticException1.java
// import statement import java.math.BigDecimal; public class ArithmeticException1 { // main method public static void main(String[] argvs) { // creating two objects of BigDecimal BigDecimal a1 = new BigDecimal(11); BigDecimal a2 = new BigDecimal(17); // 11 / 17 = 0.6470588235294118... a1 = a1.divide(a2); System.out.println(a1.toString()); } }
Ausgabe:
Exception in thread 'main' java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.base/java.math.BigDecimal.divide(BigDecimal.java:1766) at ArithmeticException1.main(ArithmeticException1.java:9)
Erläuterung: Im obigen Programm kennt die Big Decimal-Klasse nicht die genaue Ausgabe, die nach der Division angezeigt werden soll. Dies liegt daran, dass es sich bei der Ausgabe um eine nicht terminierende Dezimalentwicklung handelt. Ein Lösungsansatz besteht darin, den Grenzwert anzugeben. Beispielsweise können wir im Programm explizit festlegen, dass die Ausgabe auf 6 Nachkommastellen beschränkt werden soll. Beachten Sie das folgende Programm.
Dateiname: ArithmeticException2.java
// import statement import java.math.BigDecimal; public class ArithmeticException2 { // main method public static void main(String[] argvs) { // creating two objects of BigDecimal BigDecimal a1 = new BigDecimal(11); BigDecimal a2 = new BigDecimal(17); // 11 / 17 = 0.6470588235294118... // rounding up to decimal places a1 = a1.divide(a2, 6, BigDecimal.ROUND_DOWN); System.out.println(a1.toString()); } }
Ausgabe:
0.647058
Behandlung einer arithmetischen Ausnahme
Mit dem Try-Catch-Block können wir die arithmetische Ausnahme selbst behandeln. Beachten Sie die folgenden Programme.
Dateiname: HandleArithmeticException.java
public class HandleArithmeticException { void divide(int a, int b) { int res; try { // performing divison and storing th result res = a / b; System.out.println('Division process has been done successfully.'); System.out.println('Result came after division is: ' + res); } // handling the exception in the catch block catch(java.lang.ArithmeticException ex) { System.out.println('Should avoid dividing by 0 ' + ex); } } // main method public static void main(String argvs[]) { // creating an object of the class ArithmeticException ArithmeticException obj = new ArithmeticException(); obj.divide(1, 0); } }
Ausgabe:
Should avoid dividing by 0 java.lang.ArithmeticException: / by zero
Für eine nicht terminierende Dezimalerweiterung müssen wir lediglich die Zeile, in der die Division erfolgt, in den Try-Block einschließen.
Dateiname: HandleArithmeticException1.java
// import statement import java.math.BigDecimal; public class HandleArithmeticException1 { // main method public static void main(String[] argvs) { // creating two objects of BigDecimal BigDecimal a1 = new BigDecimal(11); BigDecimal a2 = new BigDecimal(17); try { // 11 / 17 = 0.6470588235294118... a1 = a1.divide(a2); System.out.println(a1.toString()); } // handling the exception in the catch block catch(ArithmeticException ex) { System.out.println('Should avoid dividing by an integer that leads to non-terminating decimal expansion. ' + ex); } } }
Ausgabe:
Should avoid dividing by an integer that leads to non-terminating decimal expansion. java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.