2023.08.12 - java 문법 종합반(4주차)

mjjin·2023년 8월 12일
0

Java 문법 종합반

목록 보기
8/8

오류와 예외

오류(Error)

오류는 일반적으로 회복이 불가능한 문제이다.
이는 시스템 레벨에서, 또는 주로 환경적인 이유로 발생한다.
코드의 문제로 발생하는 경우도 있지만, 일단 발생하는경우 일반적으로 회복이 불가능하다.
오류에는 컴파일에러, 런타임에러가 있다.

컴파일 오류는
컴파일 할 때 발생하는 오류이며, 런타임 에러는 실행할 때 발생하는 오류이다.

예외(Exception)

오류는 어쩔 수 없지만,

프로그램의 비정상 종료를 막고, 정상적인 실행 상태를 유지하기 위해
코드로 예외를 처리를 진행해야 한다.

예외클래스

예외 클래스의 계층구조

출처 : www.javachobo.com -Java의 정석

RuntimeException클래스

  • 프로그래머의 실수로 발생하는 예외로, 예외처리가 필수이다.

Exception클래스

  • 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외로, 예외처리는 선택이다.

try-catch

try {
	// 예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exceptionl e1) {
    	// Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception2 e2) {
    	// Exception2가 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
}

if문과 달리 try블럭이나 catch블럭 내에 포함된 문장이 하나라고 해서 괄호 {}를 생략할 수는 없다.

  • try블럭에서 예외가 발생하면, 발생한 예외를 처리할 catch 블럭을 찾는다.

  • 첫번째 catch블럭부터 순서대로 찾아 내려가며,
    일치하는 catch블럭이 없으면 예외는 처리되지 않는다.

  • 예외의 최고 조상인 Exception을 처리하는 catch블럭은 모든 종류의 예외를 처리할 수 있다.

  • 발생한 예외 객체를 catch블럭의 참조변수로 접근할 수 있다.

finally 블럭

try {
	// 예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exceptional e1) {
	// 예외 처리를 위한 문장을 적는다.
} finally {
	// 예외의 발생여부에 관계없이 항상 수행되어야 하는 문장들을 넣는다.
    // finally블럭은 try-catch문의 맨 마지막에 위치해야 한다.
}
  • 예외의 발생 여부와 관계없이 실행되어야 하는 코드를 넣는다.
  • 선택적으로 사용할 수 있으며, try-catch-finally의 순서로 구성된다.
  • 예외 발생시, try-> catch -> finally의 순서로 실행되고
  • 예외 미발생시, try -> finally의 순서로 실행된다.
  • try 또는 catch블럭에서 return문을 만나도 finally 블럭은 수행된다.

메서드에 예외 선언하기

void method() throws Exception1, Exception2, ... {
	// 메서드의 내용
}

예외를 발생시키는 키워드 throw와 예외를 메서드에 선언할 때 쓰이는 throws를 잘 구별해야 한다.

  • 예외를 처리하는 또 다른 방법
  • 사실은 예외를 처리하는 것이 아니라, 호출한 메서드로 전달해주는 것
  • 호출한 메서드에서 예외처리를 해야만 할 때 사용

예외 되던지기(re-throwing)

class ExceptionEx23 {
	public static void main (String[] args) {
    	try {
        	method1 ();
        } catch (Exception e) {
        	System.out.println("main메서드에서 예외가 처리되었습니다.");
        }
    }
}

static void method1 () throws Exception {
	try {
    	throw new Exception();
    } catch (Exception e) {
    	System.out.println("method1 메서드에서 예외가 처리되었습니다.");
        throw e;		//다시 예외를 발생시킨다.
    }
}
  • 예외를 처리한 후에 다시 예외를 생성해서 호출한 메서드로 전달하는 것
  • 예외가 발생한 메서드와 호출한 메서드, 양쪽에서 예외를 처리해야 하는 경우에 사용

0개의 댓글