logo

Aritmetička iznimka u Javi

The Iznimka Rukovanje je jedan od najmoćnijih mehanizama za rukovanje pogreškama u vremenu izvođenja tako da se može održati normalan tok aplikacije. U Javi je izuzetak nenormalno stanje. Programski jezik Java definira razne iznimke. U ovom odjeljku raspravljat ćemo o jednoj od istaknutih iznimaka, tj ArithmeticException u Javi.

Aritmetička iznimka vrsta je neobičnog ishoda ili neprovjerene pogreške koda, koja se javlja ili javlja kad god se u kodu pojavi pogrešna matematička ili aritmetička operacija tijekom vremena izvođenja. Problem s vremenom izvođenja, koji se naziva i iznimka, pojavljuje se kad god je nazivnik razlomka 0, a JVM ne može saznati rezultat; stoga se izvršavanje programa prekida i pokreće se iznimka. Imajte na umu da na mjestu gdje je podignuta iznimka, program završava. Međutim, kod koji je raniji od toga se izvršava i prikazuje se odgovarajući rezultat.

Struktura aritmetičke iznimke

Osnovna klasa aritmetičke iznimke je java.lang.ArithmeticException, koja je podređena klasa java.lang.RuntimeException, koja je pak podređena klasa java.lang.Exception.

Konstruktor aritmetičkih iznimki

    ArithmeticException():Koristi se za definiranje aritmetičke iznimke s nultim proslijeđenim parametrima.ArithmeticException(String s):Koristi se za definiranje aritmetičke iznimke s jednim proslijeđenim parametrom.

Kako se javlja aritmetička iznimka?

Sljedeće su dvije situacije u kojima se može pojaviti aritmetička iznimka.

  1. Kada izvodimo dijeljenje gdje se 0 koristi kao djelitelj, tj. 0 dolazi kao nazivnik.
  2. Dugi decimalni broj koji ne završava velikom decimalom.

Podijeli s 0

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

Izlaz:

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

Nezavršna velika decimala

Naziv datoteke: 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()); } } 

Izlaz:

 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) 

Obrazloženje: U gornjem programu, klasa Big Decimal ne zna točan izlaz koji dolazi nakon dijeljenja za prikaz. To je zato što je izlaz neprekinuto decimalno proširenje. Jedan pristup rješavanju je davanje granice. Na primjer, u programu možemo eksplicitno reći da izlaz treba biti ograničen na 6 decimalnih mjesta. Pridržavajte se sljedećeg programa.

Naziv datoteke: 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()); } } 

Izlaz:

 0.647058 

Rukovanje aritmetičkom iznimkom

Možemo sami riješiti aritmetičku iznimku pomoću bloka try-catch. Pridržavajte se sljedećih programa.

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

Izlaz:

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

Za neprekinuto decimalno proširenje, sve što moramo učiniti je omotati liniju u kojoj se događa dijeljenje unutar bloka try.

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

Izlaz:

 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.