logo

Aritmetická výjimka v Javě

The Výjimka Zpracování je jedním z nejúčinnějších mechanismů pro zpracování chyb za běhu, aby bylo možné zachovat normální tok aplikace. V Javě je výjimka abnormální stav. Programovací jazyk Java definuje různé výjimky. V této části probereme jednu z významných výjimek, kterou je Aritmetická výjimka v Javě.

Aritmetická výjimka je typ neobvyklého výsledku nebo nekontrolované chyby kódu, která je vyvolána nebo vyvolána vždy, když se během běhu v kódu objeví chybná matematická nebo aritmetická operace. Problém za běhu, nazývaný také výjimka, se objeví vždy, když je jmenovatel zlomku 0 a JVM není schopno zjistit výsledek; proto je provádění programu ukončeno a je vyvolána výjimka. Všimněte si, že v bodě, kde byla vyvolána výjimka, se program ukončí. Kód dříve než je však proveden a zobrazí se příslušný výsledek.

Struktura aritmetických výjimek

Základní třída aritmetické výjimky je java.lang.ArithmeticException, což je podřízená třída java.lang.RuntimeException, která je zase podřízenou třídou java.lang.Exception.

Konstruktor aritmetických výjimek

    Aritmetická výjimka():Používá se k definování aritmetické výjimky s nulovými předávanými parametry.Aritmetická výjimka (řetězce s):Používá se k definování aritmetické výjimky s jedním předávaným parametrem.

Jak dochází k aritmetické výjimce?

Následují dvě situace, kdy může dojít k aritmetické výjimce.

  1. Když provádíme dělení, kde 0 je použito jako dělitel, tj. 0 přichází jako jmenovatel.
  2. Dlouhé desetinné číslo, které není zakončeno velkým desetinným místem.

Dělit 0

Název souboru: 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); } } 

Výstup:

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

Neukončené velké desetinné číslo

Název souboru: Aritmetická výjimka1.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()); } } 

Výstup:

 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) 

Vysvětlení: Ve výše uvedeném programu třída Big Decimal nezná přesný výstup, který se zobrazí po dělení. Je to proto, že výstupem je neukončený desetinný rozvoj. Jedním ze způsobů, jak to vyřešit, je poskytnout limit. Například můžeme v programu výslovně říci, že výstup by měl být omezen na 6 desetinných míst. Dodržujte následující program.

Název souboru: 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()); } } 

Výstup:

 0.647058 

Zpracování aritmetické výjimky

Aritmetickou výjimku můžeme zpracovat sami pomocí bloku try-catch. Dodržujte následující programy.

Název souboru: 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); } } 

Výstup:

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

Pro nekoncový desetinný rozvoj stačí zalomit řádek, kde dochází k dělení, uvnitř bloku try.

Název souboru: 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); } } } 

Výstup:

 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.