The Izņēmums Apstrāde ir viens no jaudīgākajiem mehānismiem, lai apstrādātu izpildlaika kļūdas, lai varētu uzturēt normālu lietojumprogrammas plūsmu. Java valodā izņēmums ir neparasts stāvoklis. Java programmēšanas valoda definē dažādus izņēmumus. Šajā sadaļā mēs apspriedīsim vienu no ievērojamākajiem izņēmumiem Aritmētiskais izņēmums Java valodā.
Aritmētiskais izņēmums ir neparasts iznākums vai nepārbaudīta koda kļūda, kas tiek izmests vai parādīts ikreiz, kad izpildes laikā kodā parādās nepareiza matemātiska vai aritmētiska darbība. Izpildlaika problēma, ko sauc arī par izņēmumu, parādās ikreiz, kad daļdaļas saucējs ir 0 un JVM nevar uzzināt rezultātu; līdz ar to programmas izpilde tiek pārtraukta un tiek izvirzīts izņēmums. Ņemiet vērā, ka brīdī, kad tiek izvirzīts izņēmums, programma tiek pārtraukta. Tomēr kods tiek izpildīts agrāk, un tiek parādīts atbilstošais rezultāts.
Aritmētiskā izņēmuma struktūra
Aritmētiskā izņēmuma pamatklase ir java.lang.ArithmeticException, kas ir java.lang.RuntimeException pakārtotā klase, kas savukārt ir java.lang.Exception pakārtotā klase.
Aritmētisko izņēmumu konstruktors
Kā notiek aritmētiskais izņēmums?
Tālāk ir norādītas divas situācijas, kurās var rasties aritmētiskais izņēmums.
- Veicot dalīšanu, kur 0 tiek izmantots kā dalītājs, t.i., 0 nāk kā saucējs.
- Garš decimālskaitlis, kas nebeidzas ar lielo decimāldaļu.
Sadalīt ar 0
Faila nosaukums: AritmētikaIzņēmums.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); } }
Izvade:
Exception in thread 'main' java.lang.ArithmeticException: / by zero at ArithmeticException.divide(ArithmeticException.java:6) at ArithmeticException.main(ArithmeticException.java:16)
Nebeidzams lielais decimāls
Faila nosaukums: AritmētikaIzņēmums1.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()); } }
Izvade:
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)
Paskaidrojums: Iepriekš minētajā programmā Big Decimal klase nezina precīzu izvadi, kas tiek parādīta pēc dalīšanas. Tas ir tāpēc, ka izvade ir nebeidzama decimālā izvēršana. Viena no metodēm, kā to atrisināt, ir noteikt ierobežojumu. Piemēram, programmā mēs varam skaidri norādīt, ka izvadei jābūt ierobežotai līdz 6 zīmēm aiz komata. Ievērojiet tālāk norādīto programmu.
Faila nosaukums: Aritmētiskais izņēmums2.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()); } }
Izvade:
0.647058
Aritmētiskā izņēmuma apstrāde
Ar aritmētisko izņēmumu varam tikt galā paši, izmantojot try-catch bloku. Ievērojiet tālāk norādītās programmas.
Faila nosaukums: 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); } }
Izvade:
Should avoid dividing by 0 java.lang.ArithmeticException: / by zero
Lai veiktu nebeidzamu decimālo izvērsumu, viss, kas mums jādara, ir ietīt līniju, kurā notiek dalīšana, try blokā.
Faila nosaukums: 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); } } }
Izvade:
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.