본문 바로가기
JAVA/개념정리

[JAVA] 예외처리

by JJH0100 2022. 10. 14.
728x90
반응형

코드

public class ArrayIndexEx {
	public static void main(String[] args) {
		String data1 = args[0];
		String data2 = args[1];
		System.out.println("args[0] : " + data1);
		System.out.println("args[1] : " + data2);
	}
}

결과

 

 

Run - Debug Cofigurations - Arguments 창을 열어서

 

 

이렇게 입력해주면 

 

화면에 이렇게 출력이 된다.

 

 

 

다중 catch

발생하는 예외별로 예외 처리 코드를 다르게 하는 다중 catch 블록이다.
catch 블록의 예외 클래스 타입은 try 블록에서 발생된 예외의 종류 말한다.
try 블록에서 해당 타입 예외가 발생하면 catch 블록을 실행하게 된다.

public class CatchExceptionKindExample {
	public static void main(String[] args) {	
		//다중 catch
		try {
			String data1 = args[0];
			String data2 = args[1];
			int value1 = Integer.parseInt(data1);
			int value2 = Integer.parseInt(data2);
			int result = value1 + value2;
			System.out.println(data1 + "+" + "data2" + "=" + result);
		}catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("실행 매개값의 수가 부족합니다.");
			return;
		}catch(NumberFormatException e){
			System.out.println("숫자로 변환할 수 없습니다.");
		}finally{
			System.out.println("다시 실행하세요");
		}		
	}
}

 

 

규칙1. 다중 catch 블록 작성 시 상위 예외 클래스가 하위 예외 클래스보다 아래 위치해야 함

 

 

 

 


 

 

throw와 throws

throw는 예외 발생 throws 예외 전가

throw

public class TryCatchEx2 {
	public void aa() {
		System.out.println("aa를 호출합니다.");
		bb();
	}
	public void bb () {
		try {
			throw new Exception();
		} catch (Exception e) {
			System.out.println("오류가 발생 했네요.");
		}
	}
	public static void main(String[] args) {
		TryCatchEx2 tr = new TryCatchEx2();
		tr.aa();
		System.out.println("메인 프로그램을 종료 합니다.");
	}
}

 

throws

예외가 발생했을 때 try catch로 처리하지 않고 나를 호출한 상대에게 오류를 전가하는 것

메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 넘기는 역할
throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분하여 나열

 

Ex01

public class ThrowsExample {
	public static void main(String[] args) {		
		try {
			findClass();
		} catch (ClassNotFoundException e) {
			System.out.println("클래스가 존재하지 않습니다.");
		}		
	}
	public static void findClass() throws ClassNotFoundException{
		Class clazz = Class.forName("java.lang.String2");
	}
}

 

Ex02

public class TryCatchEx3 {
	public void aa1() throws Exception {
		System.out.println("aa를 호출합니다.");
		bb1();
	}
	public void bb1 () throws Exception {
		throw new Exception();
	}
	public static void main(String[] args) throws Exception {
		TryCatchEx3 tr = new TryCatchEx3();
		tr.aa1();
		System.out.println("메인 프로그램을 종료 합니다.");
	}
}
728x90
반응형

'JAVA > 개념정리' 카테고리의 다른 글

[JAVA] Vector<E>  (0) 2022.10.26
[JAVA] 컬렉션(Collection) & 제네릭(Generics)  (0) 2022.10.26
[JAVA] Swing : MouseEvent  (0) 2022.10.13
[JAVA] Swing : 외부선언, 내부선언  (0) 2022.10.13
[JAVA] Swing의 JFrame  (0) 2022.10.13

댓글