프로그래밍 언어/JAVA

[JAVA] 예외 종류에 따른 처리 코드

김곰댕 2021. 7. 27. 16:40
728x90

다중 catch

- 여러개의 catch가 있더라도 하나의 catch 블록만 실행됨

 

예제)

package sec04_multi_catch;

public class CatchByExceptionKindExample 
{
	public static void main(String[] args) 
	{
		try 
		{
			String data1 = args[0]; //ArrayIndexOutOfBoundsException 발생할 수 있음
			String data2 = args[1]; //ArrayIndexOutOfBoundsException 발생할 수 있음

			int value1 = Integer.parseInt(data1); //NumberFormatException 발생할 수 있음
			int value2 = Integer.parseInt(data2); //NumberFormatException 발생할 수 있음

			int result = value1 + value2;
			System.out.println(data1 + "+" + data2 + "=" + result);
		}
		//다중 catch
		catch(ArrayIndexOutOfBoundsException e)
		{
			System.out.println("실행 매개값의 수가 부족합니다.");
			System.out.println("[실행방법]");
			System.out.println("jdava TryCatchFinallyRuntimeExceptionExample num1 num2");
		}
		catch(NumberFormatException e)
		{
			System.out.println("숫자로 변환할 수 없습니다.");
		}
		finally
		{
			System.out.println("다시 실행하세요.");
		}
	}
}

매개값에 숫자가 아닌 값을 넣은 경우
출력 결과1
매개값을 2개 넣은 경우
출력 결과2
매개값을 1개 넣은 경우
출력 결과3

 

catch 순서

- 구체적인 예외를 위에 놔두는 것이 좋음 ( 덜 구체적인 예외가 더 광범위하게 오류를 잡아낼것이기 때문 )

잘못된 예
옳은 예

 

예제)

package sec04_multi_catch;

public class CatchOrderExample 
{
	public static void main(String[] args) 
	{
		try 
		{
			String data1 = args[0]; //ArrayIndexOutOfBoundsException 발생할 수 있음
			String data2 = args[1]; //ArrayIndexOutOfBoundsException 발생할 수 있음

			int value1 = Integer.parseInt(data1); //NumberFormatException 발생할 수 있음
			int value2 = Integer.parseInt(data2); //NumberFormatException 발생할 수 있음

			int result = value1 + value2;
			System.out.println(data1 + "+" + data2 + "=" + result);
		}
		//다중 catch
		catch(ArrayIndexOutOfBoundsException e)
		{
			System.out.println("실행 매개값의 수가 부족합니다.");
			System.out.println("[실행방법]");
			System.out.println("jdava TryCatchFinallyRuntimeExceptionExample num1 num2");
		}
		catch(Exception e) //그 밖의 다른 예외 발생시 실행
		{
			System.out.println("숫자로 변환할 수 없습니다.");
		}
		finally
		{
			System.out.println("다시 실행하세요.");
		}
	}
}

 

 

멀티(multi) catch

- 자바 7부터는 하나의 catch 블록에서 여러개의 예외 처리가 가능함

- 멀티 catch 다중 catch 서로 의미는 똑같지만 작성 문법이 다름

catch(Array~Exception e)
{
       //예외 처리 코드1
}
catch(Number~Exception e)
{
       //예외 처리 코드1
}
catch(Exception e)
{
       //예외 처리 코드2
}

// 멀티 catch를 사용하여 코드 중복을 줄일 수 있음
(멀티 catch를 사용한다면 예외처리코드1을 2번 작성할 필요가 없음)

 

예제)

package sec04_multi_catch;

public class MultiCatchExample 
{
	public static void main(String[] args) 
	{
		try 
		{
			String data1 = args[0]; //ArrayIndexOutOfBoundsException 발생할 수 있음
			String data2 = args[1]; //ArrayIndexOutOfBoundsException 발생할 수 있음

			int value1 = Integer.parseInt(data1); //NumberFormatException 발생할 수 있음
			int value2 = Integer.parseInt(data2); //NumberFormatException 발생할 수 있음

			int result = value1 + value2;
			System.out.println(data1 + "+" + data2 + "=" + result);
		}
		//다중 catch
		catch(ArrayIndexOutOfBoundsException | NumberFormatException e) //멀티 catch
		{
			System.out.println("실행 매개값의 수가 부족하거나 숫자로 변환할 수 없음.");

		}
		catch(Exception e) //그 밖의 다른 예외 발생시 실행
		{
			System.out.println("알 수 없는 예외 발생");
		}
		finally
		{
			System.out.println("다시 실행하세요.");
		}
	}
}
728x90