logo

Aritmetikai kivétel Java nyelven

A Kivétel A kezelés az egyik leghatékonyabb mechanizmus a futásidejű hibák kezelésére, így az alkalmazás normál áramlása fenntartható. A Java nyelvben a kivétel rendellenes állapot. A Java programozási nyelv számos kivételt határoz meg. Ebben a részben az egyik kiemelkedő kivételről fogunk beszélni Aritmetikai kivétel Java nyelven.

Az aritmetikai kivétel a szokatlan kimenetel vagy a kód ellenőrizetlen hibája, amely akkor jelenik meg, ha rossz matematikai vagy aritmetikai művelet jelenik meg a kódban futás közben. Kivételnek is nevezett futásidejű probléma akkor jelenik meg, ha egy tört nevezője 0, és a JVM nem tudja kideríteni az eredményt; így a program végrehajtása megszakad, és kivétel keletkezik. Ne feledje, hogy azon a ponton, ahol a kivétel felmerül, a program leáll. Azonban az ennél korábbi kód végrehajtásra kerül, és megjelenik a megfelelő eredmény.

Aritmetikai kivételszerkezet

Az aritmetikai kivétel alaposztálya a java.lang.ArithmeticException, amely a java.lang.RuntimeException gyermekosztálya, amely viszont a java.lang.Exception gyermekosztálya.

Aritmetikai kivételkonstruktor

    Aritmetikai kivétel():Aritmetikai kivétel definiálására szolgál, nulla átadott paraméterrel.Aritmetikai kivétel (karakterláncok):Aritmetikai kivétel definiálására szolgál egy átadott paraméterrel.

Hogyan történik az aritmetikai kivétel?

A következőkben két olyan helyzetet mutatunk be, amikor előfordulhat számtani kivétel.

  1. Amikor olyan osztást hajtunk végre, ahol a 0-t használjuk osztóként, azaz 0 lesz a nevező.
  2. Hosszú decimális szám, amely nem végződik nagy tizedesvel.

Oszd 0-val

Fájl név: AritmetikaiKivétel.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); } } 

Kimenet:

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

Nem végződő nagy tizedesjegy

Fájl név: Aritmetikai kivétel1.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()); } } 

Kimenet:

 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) 

Magyarázat: A fenti programban a Big Decimal osztály nem ismeri a pontos kimenetet, amely osztás után jön, és megjelenik. Ez azért van, mert a kimenet nem végződő decimális bővítés. A megoldás egyik módja a korlát megadása. Például a programban kifejezetten megmondhatjuk, hogy a kimenetet 6 tizedesjegyre kell korlátozni. Vegye figyelembe a következő programot.

Fájl név: AritmetikaiKivétel2.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()); } } 

Kimenet:

 0.647058 

Aritmetikai kivételek kezelése

Az aritmetikai kivételt a try-catch blokk segítségével magunk is kezelhetjük. Vegye figyelembe a következő programokat.

Fájl név: 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); } } 

Kimenet:

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

A nem végződő decimális bővítéshez mindössze annyit kell tennünk, hogy a try blokkon belül tördeljük azt a sort, ahol az osztás történik.

Fájl név: 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); } } } 

Kimenet:

 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.