예외처리
컴파일 오류(compile error) : 프로그램 코드 작성 중 발생하는 문법적 오류 (컴파일 시에 보임.)
실행 오류(runtime error) : 실행 시 발생하는 에러 (컴파일 시에는 보이지 않음.)
→ Throwable 클래스를 상속해서 구현한 클래스에는 Exception 클래스와 Error클래스가 있다.
→ 그리고 Exception 클래스에는 IOException (체크드 예외)와 RuntimeException (언체크드 예외)가 있는데,
여기서 체크드 예외란 예외를 처리하지 않으면 컴파일 에러가 발생하는 예외이고,
언체크드 예외는 굳이 예외 처리를 하지 않아도 에러가 발생하지 않는 에러이다.
이러한 예외를 처리하기 위해서 try-catch문과 throws를 사용한다.
try-catch문
try {
//예외가 발생할 수 있는 코드 부분
} catch(처리할예외타입 e) {
try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분
}
try-catch-finally 문
try {
//예외가 발생할 수 있는 코드 부분
} catch(처리할예외타입 e) {
//try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분
} finally {
//try문이 실행되면 만드시 실행된다.
}
예외처리 미루기 (throws)
: 메소드 선언부 끝에 작성하여 메소드를 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 한다.
try-catch문, throws 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package ch08; public class MainTest2 { public static void main(String[] args) { // 예외처리 구문 작성 // 10 / 0 연산시키고 예외 처리 작성 // try-catch문 try { int result = 10 / 0; } catch (ArithmeticException e) { System.out.println("0으로 나눌 수 없습니다."); e.printStackTrace(); } // 클래스 설계 throws Calc c = new Calc(); try { c.cal(100, 0); System.out.println(c.result); } catch (Exception e) { System.out.println("0으로 나눌 수 없습니다."); } } } class Calc { int result; public void cal(int a, int b) throws Exception { this.result = a / b; } } | cs |
→ 0으로 나누면 ArithmeticException을 발생시키기 때문에 이것을 try-catch문과 throws를 이용하여 예외처리하는 예제이다.
→ try-catch :
try 문에 예외가 발생할만한 코드 int result = 10/0; 적고 catch()에 처리할 예외 타입을 작성해준 다음 .printStackTrace()를 이용하여 Exception 발생 이유와 위치를 출력하였다.
→ throws :
클래스를 설계하여 메소드에서 throws키워드를 사용해 예외를 떠넘기는 방식이다.
Calc 클래스를 만들어 메소드를 만들어주고 나눈 값의 출력을 받기 위한 멤버 변수 result를 선언한다. 그리고 main함수에서 Calc 클래스 객체를 생성하고 try - catch 문을 사용하여 try에 0으로 나눈 값과 그 결과값이 나오도록 적어주고 catch문에 Exception e를 선언하였다. (Exception e는 모든 예외의 조상이므로 모든 예외를 걸러준다.)
결과 화면
'프로그래밍 > Java' 카테고리의 다른 글
Java_Thread (0) | 2023.02.17 |
---|---|
Java_Swing 키보드 방향키로 이미지를 창 안에서만 움직이게 하기 (0) | 2023.02.16 |
Java_추상 클래스(abstract class) (0) | 2023.02.14 |
Java_Object클래스 (0) | 2023.02.14 |
Java_인터페이스 (0) | 2023.02.14 |