자바의정석 8장

ch8-1 프로그램 오류

  • 컴파일 에러 : 컴파일 할 때 발생하는 에러
  • 런타임 에러 : 실행 할 때 발생하는 에러
  • 논리적 에러 : 작성 의도와 다르게 동작

Java의 런타임 에러

  • 에러(error) : 코드에 의해 수습될 수 없는 심각한 오류
    (out of Memory error)
  • 예외(exception) : 코드에 의해 수습될 수 있는 다소 미약한 오류
    --> 에러는 어쩔 수 없지만, 예외는 처리하자.

예외처리의 정의와 목적

정의: 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적: 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

ch8-3 Exception과 RuntimeException

Exception클래스와 그 자손
: 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
RuntimeException과 그 자손
: 프로그래머의 실수로 발생하는 예외

ch8-4 예외 처리하기. try-catch문

try{ //괄호 생략 불가!!
	//예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exception1 e1) {
	//Exception1 발생 시 이를 처리 할 문장을 적는다.
} catch (Exception2 e2) {
	//Exception2 발생 시 이를 처리 할 문장을 적는다.
} catch (ExceptionN eN) {
	//ExceptionN 발생 시 이를 처리 할 문장을 적는다.
}

ch8-5 try-catch문에서의 흐름

ch8-6 예외의 발생과 catch블럭

  • 예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감
  • 일치하는 catch블럭이 없으면, 예외는 처리 안됨
  • Exception이 선언된 catch블럭은 모든 예외 처리(마지막 catch블럭에 넣음)

ch8-7 printStackTrace()와 getMessage()

printStackTrace()
: 예외발생 당시의 호출스택에 있었던 메서드의 정보와
예외 메시지를 화면에 출력
getMessage()
: 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

ch8-8 멀티 catch 블럭

  • 내용이 같은 catch블럭을 하나로 합친 것(JDK1.7부터)

ch8-9 예외 발생시키기

  1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음
    Exception e = new Exception("고의로 발생시킴");

  2. 키워드 throw를 이용해서 예외를 발생시킨다.
    throw e;

--> throw new Exception("고의로 발생시킴");

ch8-10 checked예외, unchecked예외

  • checked예외 : 컴파일러가 예외 처리 여부를 체크(예외처리 필수)
    (checked예외 -> Exception과 자손)
  • unchecked예외 : 컴파일러가 예외 처리 여부를 체크 안함(예외처리 선택)
    (unchecked예외 -> RuntimeException과 자손)

ch8-11 메서드에 예외 선언하기

  • 예외를 처리하는 방법
  1. try-catch문(직접처리)
  2. 예외 선언하기(예외 떠넘기기, 알리기)
  3. 은폐
  • 메서드가 호출시 발생가능한 예외를 호출하는 쪽에 알리는 것
    (throw/throws 구분 잘 하기)
//메서드 예외 선언
void method() throws Exception1, Exception2, ... {
	//메서드의 내용
}

//method()에서 Exception과 그 자손 예외 발생 가능
void method() throws Exception {
	//메서드의 내용
}

ch8-14 finally 블럭

  • 예외 발생여부와 관계없이 수행되어야 하는 코드를 넣는다.

ch8-15 사용자 정의 예외 만들기

  • 우리가 직접 예외 클래스를 정의할 수 있다.
  • 조상은 Exception과 RuntimeException중에서 선택

ch8-17 예외 되던지기(exception re-throwing)

  • 예외를 처리한 후에 다시 예외를 발생시키는 것
  • 호출한 메서드와 호출된 메서드 양쪽 모두에서 예외처리하는 것

ch8-18 연결된 예외(chained exception)

  • 한 예외가 다른 예외를 발생시킬 수 있다.
  • 예외 A가 예외 B를 발생시키면, A는 B의 원인 예외

Throwable initCause(Throwable cause)
: 지정한 예외를 원인 예외로 등록
Throwable getCause()
: 원인 예외를 반환

[이유1] 여러 예외를 하나로 묶어서 다루기 위해서

[이유2] checked예외를 unchecked예외로 변경하려 할 때

좋은 웹페이지 즐겨찾기