본문 바로가기

자바

28. 예외 처리

예외란 프로그램에서 외부환경요인 등에 문제가 일어나 정상적인 작동을 하지 않는 것을 말한다. 예외 처리란 프로그램이 죽은 상태에서 정확히 원하는 결과는 얻지 못하더라도 어디가 잘못된지 알려주는 방법이다. 일반적으로 프로그램에서 오류가 나면 예외처리가 되어있어 오류가 어디서 났는지 띄워준다.

package com.Except;

public class ExceptClass {
	public static void main(String[] args) {
		int i = 10;
		int j = 2;
		
		System.out.println(i+j);
		System.out.println(i-j);
		System.out.println(i*j);
		System.out.println(i/j);
		
		int a = 2;
		int b = 0;
		
		System.out.println(a+b);
		System.out.println(a-b);
		System.out.println(a*b);
		//System.out.println(a/b); 예외처리 발생, 0으로 나누었음
	}
}

 

 

try-catch문은 try에서 발생한 오류를 catch에서 포착하여 오류의 내용을 알려주는 방법이다. 한 개의 try에 여러 개의 catch문이 있을 수 있다.

package com.Except;

public class HowToUseTryCatch {
	public static void main(String[] args) {
		int a = 10;
		int b = 0;
		
		System.out.println(a+b);
		System.out.println(a-b);
		System.out.println(a*b);
		try { //0으로 나누어 문제가 생김
			System.out.println(a/b);
		}
		catch(Exception e) { //0으로 나눈 문제점을 표현
			System.out.println(e.getMessage()); //오류난 곳을 표출
			e.printStackTrace(); //더 자세한 오류를 띄워줌
		}
		finally { //오류가 발생하더라도 무조건 실행
			System.out.println("무조건 실행합니다.");
		}
	}
}

 

 

throws는 오류가 난 곳을 직접 처리하지 않고 오류 처리하는 부분에 오류가 난 곳을 넘기는 방법이다.

package com.Except;

public class ThrowsExClass {
	public ThrowsExClass() {
		actionC();
	}
	
	private void actionA() throws Exception{
		System.out.println("actionA");
		
		int[] iArr= {1,2,3,4};
		System.out.println(iArr[4]); //예외 발생, throws는 나를 호출한 곳으로 예외를 던진다.
		
		System.out.println("endA");
	}
	
	private void actionB() {
		System.out.println("actionB");
		
		//try-catch는 내가 알아서 예외를 처리한다.
		try {
			actionA();
		}
		catch(Exception e){
			System.out.println("예외 처리하는 부분");
			System.out.println(e.getMessage() + "에서 오류가 납니다.");
		}
		
		System.out.println("endB");
	}
	
	private void actionC() {
		System.out.println("actionC");
		actionB();
		System.out.println("endC");
	}
}

 

package com.Except;

public class HowToUseThrows {
	public static void main(String[] args) {
		ThrowsExClass TEC = new ThrowsExClass();
	}
}

 

 

Exception클래스는 수많은 예외 클래스를 가지고 있다. 그 중 자주 보게되는 오류에 대해 알아보자.

1. ArrayIndexOutOfBoundsException : 배열에 존재하지 않는 인덱스를 접근시 나타난다.

2. NullPointerException : 존재하지 않는 객체를 가리킬 때 나타난다.

3. NumberFormatException : 문자를 숫자로 처리할 때 발생

package com.Except;

public class VeryUsefulExceptionClass {
	public static void main(String[] args) {
		int[] iArr= {0,1,2,3};
		int plus = 100;
		String str = null;
		String num = "abc";
		
		//인덱스 범위 오류
		try {
			for(int i = 0; i <= 4; i++) {
				System.out.println(iArr[i]);
			}
		}
		catch(ArrayIndexOutOfBoundsException e) {
			System.out.println(e.getMessage() + "에서 오류 발생");
		}
		
		//빈 공간을 참조한 경우
		try {
			char c = str.charAt(4);
		}
		catch(NullPointerException e) {
			System.out.println(e.getMessage() + "참조");
		}
		
		//문자를 숫자로 처리할 때 발생, 숫자로 절대 변경할 수 없는 문자열을 변경할 때 발생
		try {
			int j = Integer.parseInt(num);
			System.out.println(j + plus);
		}
		catch(NumberFormatException e){
			System.out.println(e.getMessage() + "가 숫자가 아님");
		}
	}
}

'자바' 카테고리의 다른 글

30. Java Collection2  (0) 2019.08.14
29. Java collection1  (0) 2019.08.12
27. API(StringTokenizer)  (0) 2019.08.08
26.API(Timer)  (0) 2019.08.08
25.API(Wrapper)  (0) 2019.08.07