코드일기장

[Java] 메서드에 예외 선언, finally 블럭 (예외처리 1-4) 본문

Java

[Java] 메서드에 예외 선언, finally 블럭 (예외처리 1-4)

codeStudy123 2022. 1. 12. 23:59

 

 

🎈 메서드에 예외 선언


예외를 처리하는 방법은 try&catch 말고 예외 메서드를 선언하는 방법이 있다.

try&catch문은 예외에 대한 직접처리를 한다. 반대로 예외 메서드는 예외를 떠넘기고 처리는 안 한다.

 

메서드에 예외를 선언하려면 메서드 선언부에 throws 키워드를 사용 메서드 내에서 발생할 수 있는 예외를 적으면 된다.

 

 

static void method()throws Exception,ArrayIndexOutOfBoundsException{
		//메서드 내용
}

이런 식으로 method 메서드 선언부에 throws 키워드 작성 후 예외들을 적는다. 예외들은 한 개 이상 적을 수 있다. 2개 이상부터 예외들을 쉼표(,)로 구분한다. 

 


 

public class Hello {
	
	public static void main(String[] args) throws Exception {
		method();
	}
	
	static void method()throws Exception{
		method2();
	}
	static void method2()throws Exception{
		Exception e=new Exception();
		throw e;
	}
}

위 코드는 비정상 종료가 된다. 처음 main()에서 method()를 호출한다. method()는 다시 method2()를 호출한다. 현재 호출 스택에는 제일 밑으로 main->method->method2가 있는 상태이다.

 

여기서 method2는 예외를 강제적으로 발생시켰다. 하지만 try&catch로 예외처리를 안 해주어서 Exception예외는 호출스택 제일 위에 있던 method에게 떠넘겨진다.  method역시 예외처리를 안해 그대로 main메서드에게 떠넘긴다.

main메서드 역시 예외처리를 안해 JVM에게 예외가 떠넘겨 저 프로그램이 강제적으로 종료된다.

 

결론적으로 예외 던지기는 호출한 쪽으로 던지는 거다.

 

 

public class Hello {
	
	public static void main(String[] args) throws Exception{
		try {
			method();
		}catch(Exception e) {
			System.out.println("예외 발생  "+e.getMessage());
		}
	}
	
	static void method()throws Exception{
		method2();
	}
	static void method2()throws ArrayIndexOutOfBoundsException{
		throw new ArrayIndexOutOfBoundsException("예외발생111");
	}
}

 

 


 

🎈 finally 블럭

 

 

예외 발생 여부 관계없이 수행되어야 하는 코드

finally블럭은 try-catch문 맨 마지막에 위치해야 한다.

 

만들어진 이유는 예외가 발생하거나 발생하지 않건 실행되어야 할 코드가 있을 것이다.  그 코드를 try와 catch둘다 작성하는 건 중복코드이므로 중복코드 제거를 위해 만들어진 것 이다.

 

'try->catch->finally' 순이다.

 

만약 예외 발생 안 하면

'try->finally' 순이다.

 

public static void main(String[] args) {
		try {
			System.out.println(0/0);
		}catch(Exception e){
		
		}finally {
			System.out.println("무조건 실행");
		}
	
}

 

 

 

public static void main(String[] args) {
		try {
			
		}catch(Exception e){
		
		}finally {
			System.out.println("무조건 실행");
		}
	
}

 

 


 

 

 

 

 

 

 

🚀 다음 글 보기 (예외처리 1-5)



 

 

 

 

🚀 이전 글 보기 (예외처리 1-3)



 

 

 

 

 

 

 

 

커버사진

<div>아이콘 제작자 <a href="https://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/kr/" title="Flaticon">www.flaticon.com</a></div>

 

https://www.flaticon.com/kr/free-icon/java_154878

Comments