[16] Exception과 Error

4750 단어 Java예외처리Java
  • Exception
    : code level 예외처리를 통해 해결할 수 있는 문제이다.
    : 자바의 모든 예외와 관련해서 관련 클래스가 존재한다.

ex1) NumberFormatException
: Integer.parselnt(문자열)에서,
-> 문자열이 숫자 모양의 문자열이 아니면 발생한다.

ex2) ArraylndexOutOfBoundsException
: 생성된 배열보다 더 많이 사용할 경우 발생한다.

ex3) ArithmeticException
: 숫자를 0으로 나누면 발생한다.

  • 예외처리의 방법
  1. throws를 사용하여 회피하기
    public void method()throws 예외클래스 {
    예외 발생
    }

  2. try~catch를 사용하여 적극적으로 처리하기
    try { // (1) 게이트 치기
    예외 발생
    } catch (예외클래스) { // (2) 예외 클래스 지정
    예외 메세지 출력 // (3) 메세지 출력
    } finally { (4)
    예외가 발생과 관계없이 무조건 실행되는 영역
    close()
    }

  • 예외처리 예제
public class ExceptionExam {

public static void add() {
	int a = 10;
	int b = 0;
	a = a/b; // ArithmeticException
}
	
public static void main(String[] args) {
		
	add();
  }
}
  • 결과값
    Exception in thread "main" java.lang.ArithmeticException: / by zero
    at kosta.basic.ExceptionExam.add(ExceptionExam.java:8)
    at kosta.basic.ExceptionExam.main(ExceptionExam.java:13)
  • throws를 사용한 해결
public class ExceptionExam {

public static void add()throws Exception {
	int a = 10;
	int b = 0;
	a = a/b; // ArithmeticException
}
	
public static void main(String[] args) {
		
	add(); // Unhandled exception type Exception
 }
}
  • 결과값
    오류가 뜬다.
  • try~catch를 사용하여 적극적으로 처리하기
public class ExceptionExam {

public static void add()throws Exception {
	int a = 10;
	int b = 0;
	a = a/b; // ArithmeticException
}
	
public static void main(String[] args) {
		
	try { // 게이트 치기
		add(); // 예외 발생
	} catch (Exception e) { // 예외 클래스 지정
		// e.printStackTrace(); // 예외 메세지를 출력
	}
	System.out.println("Done!!");
   }
}
  • 결과값
    Done!!
    -> e.printStackTrace(); 이 소스코드를 넣으면, 예외 메세지가 나온다.
    -> e는 변수이다. 대부분 Exception의 약자로 e로 쓰인다.
  • 예외의 발생 여부에 따른 실행 순서
package kosta.basic;

public class ExceptionExam {

public static void add()throws Exception {
	int a = 10;
	int b = 0;
	a = a/b; // ArithmeticException
}
	
public static void main(String[] args) {
		
	try { // 게이트 치기
		System.out.println("a"); // 먼저 실행되어 출력된다. -> a 
		add(); // 예외 발생
		System.out.println("b");
	} catch (Exception e) { // 예외 클래스 지정
			System.out.println("c"); // a에서 catch문으로 가서 -> c
		// e.printStackTrace(); // 예외 메세지를 출력
	} finally {
			System.out.println("d");
	}
	System.out.println("Done!!"); // c에서 done!!으로 가서 출력하고 나온다.
		
	// 출력결과를 나열하라.
	// a,c,d,Done!!	
 }
}
  • 결과값
    a
    c
    d
    Done!!
  • 인위적으로 예외를 발생켜서 코드를 만들기
public class ExceptionExam {

public static void add()throws Exception {
	int a = 10;
	int b = 0;
	a = a/b; // ArithmeticException
}
	
// 은행거래로직 -> 인출 : 잔액 - 출금 : 잔액 < 출금 -> 인출(x) -> 인위적으로 예외를 발생
// -> throw new Exception를 사용한다.
// 자바 문법상 문제는 없다. 그래서 예외를 시켜야한다.
public static void multi()throws Exception { // throws Exception 예외 회피
	int a = 10;
	int b = 10;
		
	if (a == b) { // 내 프로그램에서 a와 b가 절대로 같으면 안될 때
		throw new Exception("같은 값"); // 이것만 쓰면, 예외처리가 뜬다.
	}
}
	
public static void main(String[] args) {
		
	try {
		multi();
	} catch (Exception e) {
		e.printStackTrace();
	}
   }
  }
  • 결과값
    java.lang.Exception: 같은 값
    at kosta.basic.ExceptionExam.multi(ExceptionExam.java:19)
    at kosta.basic.ExceptionExam.main(ExceptionExam.java:26)
  • 자바 API를 예외처리하는 방법

1. sleep()

try {
		Thread.sleep(1000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}

2. readLine()

try {
		br.readLine();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

  • 처리방법
    : Surround With try/catch를 사용한다.

좋은 웹페이지 즐겨찾기