JAVA

JAVA 예외 처리 try-catch-fianlly, throw

짱코딩러 2022. 7. 13. 14:51

예외(Exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

예외처리(Exception handling) : 예외 발생에 대비한 코드를 작성해 정상적인 실행상태를 유지시키는 것.

 

try-catch

try{
	예외가 발생할 가능성이 있는 실행문 
}
catch(처리할 예외타입 선언){
	예외 처리문
}

 

try-catch-fianlly

fianlly 블록문에는 예외 발생 여부와 상관 없이 무조건 실행되는 문장을 넣어준다.

 예시

public class ArrayException {

	public static void main(String[] args) {
		int[] intArray = new int[5];
		intArray[0] = 0;
		
		try {
			for (int i = 0; i < 5; i++) {
				intArray[i + 1] = i + 1 + intArray[i];
				System.out.println("intArray[" + i + "]" + "=" + intArray[i]);
			} 
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("배열의 인덱스가 범위를 벗어났습니다.");
		}
		}
	}

출력:

intArray[0]=0
intArray[1]=1
intArray[2]=3
intArray[3]=6
배열의 인덱스가 범위를 벗어났습니다.

 

throw

일부러 예외를 만들어줌

import java.util.Scanner;

//사칙연산을 처리하는 계산기를 작성해보자
//단, 0으로 나누거나 0을 곱하는 것은 오류로 처리하고,
//처리 결과가 음수로 나와도 오류를 발생시키도록 한다.
public class Ex1026 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.print("첫번째 수를 입력하세요 : ");
		int a = scan.nextInt();

		System.out.print("계산할 연산자를 입력하세요 : ");
		String b = scan.next();

		System.out.print("두번째 수를 입력하세요 : ");
		int c = scan.nextInt();

		try {
			switch (b) {
			case "+":
				System.out.println(a + "+" + c + "=" + (a + c));
				break;
			case "-":
				System.out.println(a + "-" + c + "=" + (a - c));
				break;
			case "*":
				if(a==0 || c==0)
					throw new Exception("0으로 곱하면 어차피 0임ㅋ;");
				System.out.println(a + "*" + c + "=" + (a * c));
				break;
			case "/":
				if(c==0)
					throw new Exception("0으로 못나눔...");
				System.out.println(a + "/" + c + "=" + (a / c));
				break;
			}
			if(a/c <0)
				throw new Exception("결과가 음수네요ㅠㅠ");
		} catch (Exception e) {
			System.out.print("발생 오류 ==> ");
			System.out.println(e.getMessage());
		}
	}
}

 

throws

예외처리 해야할 메소드명 옆에 throws 메소드명 적어줌(예외를 적용해줌)

그러면 그 메소드에서이제 예외가 발생하고! 그걸 예외처리 해주면 됨.