///////
Search

예외처리

날짜
2022/09/28
텍스트

try - catch

에러가 나면 프로그램이 강제 종료된다. 강제 종료되는 것을 막기 위한 문법
import java.util.InputMismatchException; import java.util.Scanner; public class ExceptionTest { public static void main(String[] args) { Scanner kb = new Scanner(System.in); try{ System.out.print("a/b... a? "); int n1 = kb.nextInt(); System.out.print("a/b... b? "); int n2 = kb.nextInt(); System.out.printf("%d / %d = %d \n", n1, n2, n1/n2); }catch (Exception err) { err.printStackTrace(); // 에러 원인 메세지 출력 System.out.println(err.getMessage()); }finally { System.out.println("finally 내부. 무조건 실행."); } System.out.println("try-catch 바깥"); } }
Java
복사
예제 코드를 보자.
try 문 내부의 System.out.printf("%d / %d = %d \n", n1, n2, n1/n2); 에서 n2에 0이 들어가면 에러가 난다.
이 때 생기는 에러를 catch 문에서 Exception err 로 잡는다.
에러가 잡혔으니 catch 내부의 문장을 실행한다.
finally 문은 항상 작동한다.
// 에러 원인 메세지 출력((에러가 뜨고 break 된 위치를 알려줌)) err.printStackTrace(); // 에러 원인만 출력 System.out.println(err.getMessage());
Java
복사
catch 문의 예외처리 종류는 많다.
catch (InputMismatchException err) { System.out.println(err.getMessage()); }catch (ArithmeticException err) { System.out.println(err.getMessage()); }catch (Exception err) { System.out.println(err.getMessage()); }
Java
복사
입력 타입이 다르거나, 0으로 나누거나 등 각 상황에 맞는 예외처리가 있다.
모든 예외 처리의 부모 예외처리가 있다. Exception 를 쓰면 다 처리가 된다.
Exceptioncatch 에서 선언될 때, 맨 위에서 선언되어야 한다
→ 컴파일러가 Exception 이 부모라서 모든 에러를 처리할 수 있다는 걸 안다.
→ 그래서 아래의 다른 예외처리 문은 쓸모없다고 생각해 컴파일 에러가 남
catch (Exception err) { System.out.println(err.getMessage()); }catch (ArithmeticException err) { System.out.println(err.getMessage()); }catch (InputMismatchException err) { System.out.println(err.getMessage()); }
Java
복사
→ 이런 식이면 컴파일 에러

throws

예외처리를 호출한 함수에게 맡기는 것
import java.io.FileReader; import java.io.IOException; public class ExceptionTest_3 { public static void main(String[] args) throws IOException { // 예외처리를 호추한 함수(여기선 main)에게 맡긴다 // JVM 에게 IOException 을 던지겠다(내가 처리 안하고) // >> 테스트용으로 에러처리 안하겠다. FileReader fr = new FileReader("test.txt"); fr.read(); byte[] byteArr = {'a', 'b', 'c'}; System.out.write(byteArr); } }
Java
복사
public static void main(String[] args) throws IOException, InputMismatchException { } }
Java
복사
위처럼 여러개의 예외처리를 throw 할 수 있다.
예외 클래스 구분.
노란색 박스 부분: Checked Exception
그 외 부분: Unchecked Exception
자주 쓰이는 예외 클래스가 있다.