다음은 예외를 발생(throw)시키고 하고 던지기(throw) 하고 잡아(catch) 처리하는 코드이다.

예외 처리의 흐름을 잘 파악 해보자.


// 예외 다시 던지기

public class Test157
{
	public static void main(String[] args)
	{
		Test157 ob = new Test157();

		try
		{
			int a = ob.getValue(-2);
			System.out.println("a : " + a);
		}
		catch (Exception e)
		{
			System.out.println("ⓑ printStackTrace...........");
			e.printStackTrace();
		}


	}

	public int getData(int data) throws Exception
	{
		if (data < 0)
			throw new Exception("data 가 0 보다 작습니다.");
			// ① 예외 발생

		return data + 10;
	}
	// 잡아낸 예외 다시 던지는 것이 가능하도록 처리
	public int getValue(int value) throws Exception
	{
		int a = 0;
		
		try
		{
			a = getData(-1);	// ② 예외 발생
		}
		catch (Exception e)		// ③ 예외 잡아내기
		{
			// ④ 잡아낸 예외에 대한 처리
			System.out.println("ⓐ printStackTrace............");
			e.printStackTrace();

			// ⑤ 잡아낸 예외 다시 던지기 check~!!!
			throw e;
			//-- 주석 처리 시(즉, 잡아낸 예외를 다시 던지지 않을 경우)
			//	 getValue() 메소드를 호출하고 있는 main() 메소드의
			//   예외 처리 구문은 수행되지 않게 된다.
		}
		
		return a;
	}
}

 

실행 결과

// 실행 결과
/*
ⓐ printStackTrace............
java.lang.Exception: data 가 0 보다 작습니다.
        at Test157.getData(Test157.java:30)
        at Test157.getValue(Test157.java:42)
        at Test157.main(Test157.java:15)
ⓑ printStackTrace...........
java.lang.Exception: data 가 0 보다 작습니다.
        at Test157.getData(Test157.java:30)
        at Test157.getValue(Test157.java:42)
        at Test157.main(Test157.java:15)
계속하려면 아무 키나 누르십시오 . . .
*/

 


// 다른 예외 다시 던지기

public class Test158
{
	public int getValue(int value) throws Exception			// ⑦ 예외 던지기
	{								//   (파란 폭탄)
		int a = 0;
		
		try
		{
			a = getData(-2);				// ③ 예외 발생
		}							//   (빨간 폭탄)
		catch (Exception e)					// ④ 예외 잡아내기
		{							//   (빨간 폭탄)
			// ⑤ 예외 처리(빨간 폭탄)						    
			System.out.println("printStactTrace.............");
			e.printStackTrace();

			throw new Exception("value 가 음수입니다");	// ⑥ 새로운 예외 발생
		}							//    (파란 폭탄)
		

		return a;
	}

	public int getData(int data) throws Exception			// ② 예외 던지기
	{								//   (빨간 폭탄)
		if (data<0)
			throw new Exception("data가 0 보다 작습니다.");	// ① 예외 발생
									//   (빨간 폭탄)
		return data + 10;
	}

	public static void main(String[] args)
	{
		Test158 ob = new Test158();
		
		try
		{
			int a = ob.getValue(-2);			// ⑧ 예외 발생
			System.out.println("a : " + a);			//    (파란 폭탄)
		}
		catch (Exception e)					// ⑨ 예외 잡아내기
		{							//    (파란 폭탄)
			System.out.println("printStackTrace............");
			e.printStackTrace();
		}


	}
}

 

실행 결과

// 실행 결과
/*
printStactTrace.............
java.lang.Exception: data가 0 보다 작습니다.
        at Test158.getData(Test158.java:33)
        at Test158.getValue(Test158.java:15)
        at Test158.main(Test158.java:44)
printStackTrace............
java.lang.Exception: value 가 음수입니다
        at Test158.getValue(Test158.java:23)
        at Test158.main(Test158.java:44)
계속하려면 아무 키나 누르십시오 . . .
*/

+ Recent posts