logo

Java의 산술 예외

그만큼 예외 처리는 애플리케이션의 정상적인 흐름이 유지될 수 있도록 런타임 오류를 처리하는 가장 강력한 메커니즘 중 하나입니다. Java에서 예외는 비정상적인 조건입니다. Java 프로그래밍 언어는 다양한 예외를 정의합니다. 이 섹션에서는 눈에 띄는 예외 중 하나에 대해 논의하겠습니다. 산술 예외 자바에서.

산술 예외는 런타임 동안 코드에 잘못된 수학 또는 산술 연산이 나타날 때마다 발생하거나 발생하는 코드의 비정상적인 결과 또는 확인되지 않은 오류의 유형입니다. 예외라고도 하는 런타임 문제는 분수의 분모가 0이고 JVM이 결과를 찾을 수 없을 때마다 나타납니다. 따라서 프로그램 실행이 종료되고 예외가 발생합니다. 예외가 발생한 지점에서 프로그램이 종료된다는 점에 유의하세요. 그러나 그 이전의 코드가 실행되고 그에 맞는 결과가 표시됩니다.

산술 예외 구조

산술 예외 기본 클래스는 java.lang.ArithmeticException이며, 이는 java.lang.RuntimeException의 하위 클래스이며, 이는 차례로 java.lang.Exception의 하위 클래스입니다.

산술 예외 생성자

    산술예외():전달된 매개변수가 0인 산술 예외를 정의하는 데 사용됩니다.산술예외(문자열 s):하나의 매개변수가 전달된 산술 예외를 정의하는 데 사용됩니다.

산술 예외는 어떻게 발생합니까?

다음은 산술 예외가 발생할 수 있는 두 가지 상황입니다.

  1. 0을 제수로 사용하는 나눗셈을 수행하면, 즉 0이 분모가 됩니다.
  2. Big Decimal로 끝나지 않는 긴 십진수입니다.

0으로 나누기

파일 이름: 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); } } 

산출:

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

종료되지 않는 큰 십진수

파일 이름: 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()); } } 

산출:

 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) 

설명: 위 프로그램에서 Big Decimal 클래스는 나눗셈 후에 표시할 정확한 출력을 알지 못합니다. 출력이 비종료 십진수 확장이기 때문입니다. 이를 해결하는 한 가지 접근 방식은 한계를 제공하는 것입니다. 예를 들어, 출력이 소수점 이하 6자리로 제한되어야 한다고 프로그램에서 명시적으로 알릴 수 있습니다. 다음 프로그램을 관찰하세요.

파일 이름: 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()); } } 

산출:

 0.647058 

산술 예외 처리

try-catch 블록을 사용하여 산술 예외를 스스로 처리할 수 있습니다. 다음 프로그램을 관찰하세요.

파일 이름: 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); } } 

산출:

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

비종료 소수점 확장의 경우 우리가 해야 할 일은 나누기가 발생하는 줄을 try 블록 내부에 래핑하는 것뿐입니다.

파일 이름: 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); } } } 

산출:

 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.