예외 (Exception)

Mia Lee·2022년 1월 12일
0

JAVA

목록 보기
90/98
package ex_exception;

public class Ex1 {

	public static void main(String[] args) {

		/*
		 * 예외(Exception)
		 *
		 * < 예외 관련 용어 >
		 * 1. 예외가 발생했을 때 예외 발생 여부를 감지하는 대상 : 리스너(Listener)
		 * 2. 예외가 발생했을 정상적으로 종료될 수 있도록 처리하는 것 : 예외 처리
		 *    => 예외가 발생하지 않도록 미리 원인을 제거하는 것은 예외 처리가 아니며,
		 *       예외가 발생할 상황을 미리 탐지하여 예외가 발생했을 때 프로그램이 정상 종료되도록
		 *       처리하는 것을 예외 처리라고 한다! 
		 * 
		 */
		
		System.out.println("프로그램 시작!");
		
		int num1 = 10, num2 = 2;
		
//		// 자바에서 연산 시 두번째 피연산자가 0일 경우 나눗셈 과정에서 예외 발생함
//		System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));
//		
//		// => 예외 발생 코드 아래쪽의 나머지 코드는 실행되지 못한 채 비정상 종료됨!
//		System.out.println("프로그램 종료!");
		
		// 예외가 발생할 경우 예외 상황이 메세지로 출력
		/*
		 * Exception in thread "main" java.lang.ArithmeticException: / by zero
		 * 		at ex_exception.Ex1.main(Ex1.java:24)
		 *  1) Exception in thread "main" java.lang.ArithmeticException:
		 *     => 예외 발생 상황 정보 및 예외 발생을 탐지한 예외 클래스명
		 *        (예외 발생을 탐지하는 리스너 객체 : ArithmeticException)
		 *  2) / by zero
		 *     => 예외 발생 원인 메세지(0에 의한 나눗셈으로 인해 예외 발생했다는 의미)
		 *  3) at ex_exception.Ex1.main(Ex1.java:24)
		 *     => 예외 발생 위치(Ex1.java 클래스의 24번 라인에서 예외 발생)
		 * 
		 */
		
		// 만약, 예외가 발생하지 않도록 if문을 통해 피연산자 값 검사하는 경우
		if (num2 != 0) {
			System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));
			
		} // => 예외 처리가 아니다!
		
		String str = null; // 참조 변수에 저장된 주소값이 없음
		// null 값을 참조하는 객체에 접근하여 작업을 수행하려 할 경우
//		System.out.println(str.length()); // str 문자열 크기 
		// 접근이 불가능하므로 NullPointerException 예외가 발생하게 된다!
		
		int[] arr = new int[2];
		// 배열 인덱스 사용 시 존재하지 않는 인덱스 사용할 경우
		arr[2] = 10;
		// ArrayIndexOutOfBoundsException예외가 발생하게 된다!
		
		
		System.out.println("프로그램 종료!");
		
		
	}

}






package ex_exception;

public class Ex2 {

	public static void main(String[] args) {

		/*
		 * 예외 처리
		 * 
		 * < 기본 문법 >
		 * try {
		 * 		// 일반적인 코드 및
		 *		// 예외 발생 가능성이 있는 코드들
		 * 
		 * } catch (예외클래스명 변수명) {
		 * 		// 예외클래스에 해당하는 예외가 발생할 경우 처리할 코드를 기술
		 * 
		 * }
		 * 
		 */
		
		System.out.println("프로그램 시작!");
		
		// 예외가 발생할 것으로 예상되는 코드(또는 코드 범위)를 try{} 블록으로 감싸기
		try {
			
			System.out.println("try 블록 시작!");
			
			int num1 = 3;
			int num2 = 1;
			
//			if (num2 != 0) {} // 예외가 발생하지 않도록 코드를 수정하는 것은 예외 처리가 아니다!
			// => 예외 처리란?
			//    예외가 발생하더라도 나머지 코드들이 정상적으로 수행되도록 하는 것
			
			System.out.println(num1 / num2); // 예외(ArithmeticException)가 발생하는 코드
			// 현재 예외가 발생한 코드의 아래쪽 나머지 코드들은 실행되지 못하고, catch 블록으로 가서 
			// 예외 객체에 해당하는 클래스를 찾아 해당 catch 블록 내의 코드들을 실행!
			
			System.out.println("try 블록 끝!"); // 예외 발생 시 실행되지 못하는 코드
			
			String str = null;
			System.out.println(str.length()); // NullPointerException 예외 발생!
			
		} catch (Exception e) {
			// ArithmeticException 예외가 try 블록 내에서 발생하면
			// JVM에 의해 ArithmeticException 예외 객체가 생성되고 던져짐
			// 따라서, catch 블록의 소괄호 안에 해당 예외 클래스와 일치하는 참조변수를 선언하여
			// 던져지는 예외 객체를 전달받아야 한다.(catch)
			// => chat 블록 중괄호 내에서 예외 발생 시 수행할 작업들을 명시
			System.out.println("ArithmeticException 예외 발생! - 0으로 나눌 수 없습니다!");
			
			if (e instanceof NullPointerException) {
				System.out.println("NullPointerExcepiont 예외 발생!");
			}
			
		}
		
		System.out.println("프로그램 종료!");
		// try 문에서 예외가 발생하더라도 try문 내의 아래쪽 코드 실행만 불가능하고
		// catch 블록 코드 실행 후 try ~ cat 문 밖으로 나와 나머지 코드를 정상적으로 실행함
		// => 예외가 발생하더라도 프로그램이 정성작으로 종료되도록 처리됨!
		
	}

}








0개의 댓글