Тхе Изузетак Руковање је један од најмоћнијих механизама за руковање грешкама током извршавања тако да се може одржати нормалан ток апликације. У Јави, изузетак је ненормално стање. Програмски језик Јава дефинише различите изузетке. У овом одељку ћемо разговарати о једном од истакнутих изузетака који је АритхметицЕкцептион у Јави.
Аритметички изузетак је врста необичног исхода или непроверене грешке кода, која се избацује или подиже сваки пут када се погрешна математичка или аритметичка операција појави у коду током времена извршавања. Проблем током извршавања, који се такође назива изузетак, појављује се кад год је именилац разломка 0, а ЈВМ није у могућности да сазна резултат; због тога се извршавање програма прекида и ствара се изузетак. Имајте на уму да на месту где је изузетак подигнут, програм се завршава. Међутим, код који је раније од тога се извршава и приказује се одговарајући резултат.
Структура аритметичких изузетака
Основна класа аритметичког изузетка је јава.ланг.АритхметицЕкцептион, која је подређена класа јава.ланг.РунтимеЕкцептион, што је заузврат подређена класа јава.ланг.Екцептион.
Конструктор аритметичких изузетака
Како се појављује аритметички изузетак?
Следе две ситуације у којима може доћи до аритметичког изузетка.
- Када извршимо дељење где се 0 користи као делилац, тј. 0 долази као именилац.
- Дугачак децимални број који се не завршава великом децималом.
Подели са 0
Назив документа: АритхметицЕкцептион.јава
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); } }
Излаз:
Exception in thread 'main' java.lang.ArithmeticException: / by zero at ArithmeticException.divide(ArithmeticException.java:6) at ArithmeticException.main(ArithmeticException.java:16)
Велика децимала без прекида
Назив документа: АритхметицЕкцептион1.јава
// 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()); } }
Излаз:
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)
Објашњење: У горњем програму, класа Биг Децимал не зна тачан излаз, који долази након дељења, да прикаже. То је зато што је излаз децимално проширење без прекида. Један од приступа да се то реши је да се обезбеди граница. На пример, можемо експлицитно рећи у програму да излаз треба да буде ограничен на 6 децималних места. Обратите пажњу на следећи програм.
Назив документа: АритхметицЕкцептион2.јава
// 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()); } }
Излаз:
0.647058
Руковање аритметичким изузетком
Можемо сами да обрадимо аритметички изузетак помоћу блока три-цатцх. Обратите пажњу на следеће програме.
Назив документа: ХандлеАритхметицЕкцептион.јава
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); } }
Излаз:
Should avoid dividing by 0 java.lang.ArithmeticException: / by zero
За незавршно децимално проширење, све што треба да урадимо је да премотамо линију где се дељење дешава унутар блока три.
Назив документа: ХандлеАритхметицЕкцептион1.јава
// 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); } } }
Излаз:
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.