본문 바로가기

BackEnd/Java

[java] ch11 예외 처리 3

728x90
반응형

◎  예제 1

public class Exception01 {
	public static void main(String[] args) {
		try {
			int[] a = {2, 0};
			int b = 4;
			int c = b/a[2];
			System.out.println(c);
		} catch(ArithmeticException e) {
			System.out.println("산술 오류 발생");
		} catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("배열 길이 오류발생");
		}
		System.out.println("예외 처리 공부 중");
	}
}

//	출력 : 
//	배열 길이 오류발생
//	예외 처리 공부 중


▷ a[2]를 사용해서 c에 저장했으므로 배열길이의 오류가 발생합니다.
ArrayIndexOutOfBoundsException을 통해서 배열 길이 오류가 발생되면 catch할 수 있습니다.

 

 

◎  예제 2

public class Exception02 {
	public static void main(String[] args) {		
		int a = 0;
		int b = 2;
		
		try {
			System.out.println("외부로 접속");
			int c = b/a;
			System.out.println("연결 해제");
		} catch(ArithmeticException e) {
			System.out.println("오류 발생하였습니다.");
		} finally {
			System.out.println("무조건 연결 해제");			
		}
	}
}

//	출력 : 
//	외부로 접속
//	오류 발생하였습니다.
//	무조건 연결 해제


▷ 2를 0으로 나누면 오류가 발생합니다.
▷ ArithmeticException은 0으로 나누면 무한대로 가기때문에 계산을 못하는 예외 발생시 catch하는 것입니다.

 

 

◎  예제 3

public class Exception03 {
	public static void main(String[] args) {		
		
		try {
			Exception e = new Exception("고의 예외");
			throw e;
		} catch(Exception e) {
			System.out.println("예외 발생");
			System.out.println(e.getMessage());
		}
	}
}

//	출력 : 
//	예외 발생
//	고의 예외


▷ throw를 통해 e를 예외로 만들어주고 '예외 발생' 문구 먼저 출력합니다. 
▷ 이후 getMessage를 통해 '고의 예외' 문구를 출력합니다.

 

 

◎  예제 4

public class Exception04 {
	
	public static void methodA() throws Exception{
		methodB();
	}
	
	public static void methodB() throws Exception{
		methodC();
	}
	
	public static void methodC() throws Exception{
		Exception e = new Exception();
		throw e;
	}
	
	public static void main(String[] args) {			
		try {
			methodA();
		} catch(Exception e) {
			System.out.println("메인에서 처리");
		}
	}
}

//	출력 : 
//	메인에서 처리


methodC에서 에러를 Exception으로 보내고 methodB, methodA에서 차례로 호출하고 main에서 A를 호출합니다.
▷ 이때 예외가 있으면 catch에서 문구를 출력합니다.

 

 

◎  예제 5

class AgeException extends Exception{
	public AgeException() {}
	public AgeException(String message) {
		super(message);
	}
}

public class Exception05 {
	
	public static void ticketing(int age) throws AgeException{
		if(age < 0){
			throw new AgeException("나이 입력이 잘못되었습니다.");
		}
	}
	
	public static void main(String[] args) {			
		int age = -19;
		try {
			ticketing(age);
		} catch(AgeException e) {
			e.printStackTrace();
		}
	}
}

//	출력 : 
//	java0118.AgeException: 나이 입력이 잘못되었습니다.
//		at java0118.Exception05.ticketing(Exception05.java:14)
//		at java0118.Exception05.main(Exception05.java:21)


AgeException 클래스를 Exception의 자식 클래스로 만들어줍니다.
age가 0보다 작으면 잘못입력되었다는 문구를 출력하고 AgeException으로 던져줍니다.
▷ 메인에서 age가 0보다 작기때문에 오류가 나타납니다.

 

 

◎  예제 6

public class RethorwExample {
	/** Main method **/
	
	public static void main(String[] args) {
		// Try some code
		try {
			System.out.println("외부 try...");
			
			try {
				System.out.println("내부 try...");
				Exception e = new Exception();
				throw e;
			} catch(Exception e) {
				System.out.println("(내부 try-catch) exception : " + e);
				System.out.println("예외 던지기 한번 더 : ");
				throw e;
			} finally {
				System.out.println("finally 구문출력");
			}
		} catch(Exception e) {
			System.out.println("(외부 try-catch)Catch exception : " + e);
		}
		System.out.println("종료");
	}
}

//	출력 : 
//	외부 try...
//	내부 try...
//	(내부 try-catch) exception : java.lang.Exception
//	예외 던지기 한번 더 : 
//	finally 구문출력
//	(외부 try-catch)Catch exception : java.lang.Exception
//	종료


먼저 외부 try를 실행하고 다음은 내부 try, throw를 통해 예외를 만들어주고 catch를 통해 예외를 받아 줍니다.
catch문 안에 또 throw가 있기때문에 외부의 catch문에 예외를 받고 실행문을 출력합니다.
이때, 내부 catch문 다음에는 바로 finally가 실행한 후 외부 catch문을 실행합니다.
이후 종료 문구를 출력합니다.

 

이렇게 예외 처리를 다루는 예제들을 여러개 다뤄보았습니다!

 

좀 더 사용해보면서 익혀야겠어요!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형