logo

Rekenkundige uitzondering in Java

De Uitzondering Afhandeling is een van de krachtigste mechanismen om runtimefouten af ​​te handelen, zodat de normale stroom van de applicatie behouden kan blijven. In Java is uitzondering een abnormale toestand. De Java-programmeertaal definieert verschillende uitzonderingen. In deze sectie bespreken we een van de prominente uitzonderingen Rekenkundige uitzondering op Java.

De rekenkundige uitzondering is een soort ongebruikelijke uitkomst of ongecontroleerde fout van de code, die wordt gegenereerd of gegenereerd wanneer tijdens de runtime een verkeerde wiskundige of rekenkundige bewerking in de code verschijnt. Een runtimeprobleem, ook wel een uitzondering genoemd, treedt op wanneer de noemer van een breuk 0 is en de JVM het resultaat niet kan achterhalen; daarom wordt de uitvoering van het programma beëindigd en wordt er een uitzondering gegenereerd. Merk op dat het programma eindigt op het punt waar de uitzondering is opgetreden. De code daarvoor wordt echter uitgevoerd en het juiste resultaat wordt weergegeven.

Rekenkundige uitzonderingsstructuur

De basisklasse voor rekenkundige uitzonderingen is java.lang.ArithmeticException, de onderliggende klasse van java.lang.RuntimeException, die op zijn beurt de onderliggende klasse is van java.lang.Exception.

Constructor voor rekenkundige uitzonderingen

    Rekenkundige uitzondering():Het wordt gebruikt om een ​​rekenkundige uitzondering te definiëren waarbij nul parameters worden doorgegeven.Rekenkundige uitzondering (String s):Het wordt gebruikt om een ​​rekenkundige uitzondering te definiëren waarbij één parameter wordt doorgegeven.

Hoe komen rekenkundige uitzonderingen voor?

Hieronder volgen twee situaties waarin de rekenkundige uitzondering kan voorkomen.

  1. Wanneer we een deling uitvoeren waarbij 0 als deler wordt gebruikt, d.w.z. 0 komt als de noemer.
  2. Een lang decimaal getal dat niet eindigt op Big Decimal.

Deel door 0

Bestandsnaam: 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); } } 

Uitgang:

 Exception in thread 'main' java.lang.ArithmeticException: / by zero at ArithmeticException.divide(ArithmeticException.java:6) at ArithmeticException.main(ArithmeticException.java:16) 

Niet-afsluitend groot decimaal

Bestandsnaam: RekenkundigeException1.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()); } } 

Uitgang:

 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) 

Uitleg: In het bovenstaande programma weet de klasse Big Decimal niet welke exacte uitvoer, die na deling komt, moet worden weergegeven. Dit komt omdat de uitvoer een niet-afsluitende decimale uitbreiding is. Eén manier om dit op te lossen is door de limiet te bepalen. We kunnen bijvoorbeeld expliciet in het programma aangeven dat de uitvoer beperkt moet worden tot 6 decimalen. Neem het volgende programma in acht.

Bestandsnaam: RekenkundigeException2.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()); } } 

Uitgang:

 0.647058 

Rekenkundige uitzonderingen verwerken

We kunnen de rekenkundige uitzondering zelf afhandelen met behulp van het try-catch-blok. Neem de volgende programma's in acht.

Bestandsnaam: 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); } } 

Uitgang:

 Should avoid dividing by 0 java.lang.ArithmeticException: / by zero 

Voor niet-beëindigende decimale uitbreiding hoeven we alleen maar de lijn waar de deling plaatsvindt binnen het try-blok te plaatsen.

Bestandsnaam: 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); } } } 

Uitgang:

 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.