프로그램 오류

- 컴파일 에러(compile-time error) : 컴파일 할 때 발생하는 에러

(자바 컴파일러가 하는 일 : 구문체크, 번역, 최적화)

- 런타임 에러(runtime error) : 실행할 때 발생하는 에러

- 논리적 에러(logical error) : 작성 의도와 다르게 동작

 

- Java의 런타임 에러

에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류

예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

 

- 예외 처리의 정의와 목적

예외처리란? 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것

목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

 

예외 클래스의 계층 구조

 

ExceptionRuntimeException

- Exception클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외

- RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외

ex) ArithmeticException (산술계산예외), ClassCastException(형변환오류), NullPointerException (빈 객체를 사용할 때), indexOutOfBoundsException (배열 벗어남)

 

 

예외 처리하기. try-catch

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

 

try-catch문에서의 흐름

 

try블럭 내에서 예외가 발생한 경우,

1. 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.

2. 일치하는 catch블럭을 찾게 되면, catch블럭 내의 문장들을 수행하고 전체 try-catch 문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch블럭을 찾지 못하면, 예외는 처리되지 못한다.

 

try블럭 내에서 예외가 발생하지 않은 경우,

1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.

 

ex) 예외가 없는 경우의 try-catch 블럭

public class Ex8_1 {

	public static void main(String[] args) {
		System.out.println(1);
		try {
			System.out.println(2);
			System.out.println(3);
		} catch (Exception e) {
			System.out.println(4);
		} // try-catch의 끝
		System.out.println(5);

	}

}

 

ex) 예외가 있는 경우의 try-catch 블록

public class Ex8_2 {

	public static void main(String[] args) {
		System.out.println(1);
		try {
			System.out.println(0/0);
			System.out.println(2);
		} catch (ArithmeticException e) {
			System.out.println(3);
		} // try-catch의 끝
		System.out.println(4);
	} // main 메소드의 끝

}

 

예외의 발생과 catch블럭

- 예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감

- 일치하는 catch블럭이 없으면, 예외는 처리 안됨

- Exception이 선언된 catch블럭은 모든 예외 처리 가능(마지막 catch블럭)

(Exception catch블럭은 가장 마지막에 놓는 것이 좋다. Exception은 모든 예외의 최고조상)

 

ex)

public class Ex8_4 {

	public static void main(String[] args) {
		System.out.println(1);
		System.out.println(2);
		try {
			System.out.println(3);
			System.out.println(args[0]); // ArrayIndexOutOfBoundsException 발생했으나 
								// 처리해줄 catch블럭이 없어 예외처리가 되지 않고 프로그램이 종료됨.
			System.out.println(0/0);
			System.out.println(4);	// 실행되지 않는다.
			
		} catch (ArithmeticException ae)	{
			if (ae instanceof ArithmeticException)
				System.out.println("true");
			System.out.println("ArithmeticException");
		}  // try-catch의 끝
		System.out.println(6);
	}

}

 


출처 - 유튜브 남궁성의 정석코딩 [자바의 정석 - 기초편] 

+ Recent posts