logo

Aritmetinė išimtis Java

The Išimtis Tvarkymas yra vienas iš galingiausių mechanizmų, leidžiančių valdyti vykdymo klaidas, kad būtų galima palaikyti įprastą programos srautą. Java, išimtis yra neįprasta sąlyga. Java programavimo kalba apibrėžia įvairias išimtis. Šiame skyriuje aptarsime vieną iš svarbiausių išimčių Aritmetinė išimtis Java kalboje.

Aritmetinė išimtis yra neįprastos baigties arba nepatikrintos kodo klaidos tipas, kuris išmetamas arba iškeliamas, kai kode vykdymo metu atsiranda neteisinga matematinė ar aritmetinė operacija. Vykdymo laiko problema, dar vadinama išimtimi, atsiranda, kai trupmenos vardiklis yra 0, o JVM negali sužinoti rezultato; todėl programos vykdymas nutraukiamas ir iškeliama išimtis. Atkreipkite dėmesį, kad tuo metu, kai buvo iškelta išimtis, programa baigiasi. Tačiau kodas vykdomas anksčiau ir rodomas atitinkamas rezultatas.

Aritmetinė išimčių struktūra

Aritmetinės išimties pagrindinė klasė yra java.lang.ArithmeticException, kuri yra java.lang.RuntimeException antrinė klasė, kuri savo ruožtu yra antrinė java.lang.Exception klasė.

Aritmetinių išimčių konstruktorius

    Aritmetinė išimtis():Jis naudojamas apibrėžti aritmetinę išimtį su nuliniais parametrais.Aritmetinė išimtis (eilutės):Jis naudojamas apibrėžti aritmetinę išimtį su vienu parametru.

Kaip atsiranda aritmetinė išimtis?

Toliau pateikiamos dvi situacijos, kai gali atsirasti aritmetinė išimtis.

  1. Kai atliekame padalijimą, kur 0 naudojamas kaip daliklis, ty 0 yra vardiklis.
  2. Ilgas dešimtainis skaičius, kuris nesibaigia dideliu dešimtainiu.

Padalinti iš 0

Failo pavadinimas: Aritmetinė išimtis.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); } } 

Išvestis:

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

Nesibaigiantis didelis dešimtainis

Failo pavadinimas: Aritmetinė išimtis1.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()); } } 

Išvestis:

 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) 

Paaiškinimas: Aukščiau pateiktoje programoje „Big Decimal“ klasė nežino tikslios išvesties, kuri ateina po padalijimo ir turi būti rodoma. Taip yra todėl, kad išvestis yra nesibaigianti dešimtainė plėtra. Vienas iš būdų tai išspręsti yra nustatyti ribą. Pavyzdžiui, programoje galime aiškiai nurodyti, kad išvestis turėtų būti ribojama iki 6 skaitmenų po kablelio. Stebėkite šią programą.

Failo pavadinimas: Aritmetinė išimtis2.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()); } } 

Išvestis:

 0.647058 

Aritmetinės išimties tvarkymas

Su aritmetine išimtimi galime susidoroti patys, naudodami try-catch bloką. Stebėkite šias programas.

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

Išvestis:

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

Jei norite išplėsti dešimtainį skaičių be pabaigos, tereikia įvesti eilutę, kurioje vyksta padalijimas, trynimo bloke.

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

Išvestis:

 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.