예외처리
: 예외가 발생했을때 try ~ catch 혹은 throws 둘중 하나를 처리해줘야한다.
예외 처리란?
에러와 예외는 다른 개념이다.
컴파일 에러가 아닌 다른 경우는 모두 예외로 처리한다 (언어마다 다르기 때문에)
•
에러 : 컴파일 오류, 문법의 오류
•
예외 : 프로그램(문법상)의 오류는 없으나 프로그램 실행과정 혹은 논리적으로 문제가 있는것
예) 나이를 입력하라고 했는데 0보다 작은 값이 입력되었다.
•
예외처리 : 자바는 예외처리 메커니즘을 제공
JVM 자바 가상머신
: 예외처리를 발생해야하는 상황을 감지 -> 예외처리를 할 수 있는 인스턴스 생성(예외클래스) -> 가상머신에 의해 생성된 인스턴스의 참조 값 전달
try ~ catch문
: try 영역에서 발생하는 에러는 catch에서 해결하겠다
: 코드를 한눈에 알아보기 쉽다
•
try : 예외 발생의 감지 대상을 감싸는 목적
•
catch : 발생한 예외상황의 처리를 위한 목적
try ~ catch 문법
•
하나의 try 블록에 둘 이상의 catch 블록을 구성할 수 있다.
: catch 블록의 매개변수가 해당 예외 인스턴스의 참조 값을 받을 수 있는지 순서대로 확인하면서 내려온다
•
항상 실행되는 finally
: try블록으로 일단 진입이 되면! 100% 실행!
만약 에러가 발생되지 않았다면 catch 넘어서 finally는 실행
중간에 return문을 실행하더라도 finally 블록이 실행된 다음에 메소드를 빠져나간다
try{
//아! 예외 발생 가능지역이구나!
//정상적 영역 : try영역에서 발생한 예외상황은
일반적인 흐름이지만 예외가 발생할 수 있는 상황
}catch{
//아! 예외처리 코드이구나
//예외처리 : 이어서 등장하는 catch 영역에서 처리된다.
}
Plain Text
복사
package com.codelion.day08;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Practice05 {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
try {
System.out.print("a/b... a? ");
int n1 = kb.nextInt();
System.out.print("a/b... b? ");
int n2 = kb.nextInt();
System.out.printf("%d / %d = %d \\n", n1, n2, n1 / n2);
} catch (ArithmeticException e) {//1
e.printStackTrace();
System.out.println(e.getMessage());
} catch (InputMismatchException e) {//2
e.printStackTrace();
System.out.println(e.getMessage());
//-------------------
} catch (Exception e) {//전체를 포괄하여 예외처리를 할 경우
e.printStackTrace();
System.out.println(e.getMessage());
} finally {
System.out.println("무조건 실행");
}
System.out.println("Good bye~~!");
}
}
Plain Text
복사
•
1번과 2번 에러 이외의 예외사항이 발생할 경우 위에서 부터 찾는것 catch문
•
만약 Exception을 최상단에 적고 그 하위 예외 클래스를 정의할 경우
아래의 캐치문을 탈 일이 없기 때문에 데드코드가 된다.
e.getMessage()
•
ArithmeticException 클래스와 같이 예외 상황을 알리기 위해 정의된 클래슬르 가리켜 예외 클래스라고 한다.
•
모두 예외 클래스는 throwable 클래스를 상속하며, 이 클래스에는 getMessage 메소드가 정의되어 있다.
: 예외클래스는 모두 throwable을 참조하고 있기 때문에 getMessage를 가지고 있다.
•
getMessage 메소드는 예외가 발생한 원인정보를 문자열의 형태로 반환해준다
throws
: 예외처리를 호출한 함수한테 맡긴다
: JVM에 해당에러를 던지겠다 (JVM이 에러 메시지를 띄우고 프로그램을 종료하는 것)
•
에러처리 방법은 try ~ catch, throws가 있다
package com.codelion.day08;
import java.io.FileReader;
import java.io.IOException;
public class Practice05Throws {
public static void main(String[] args) throws IOException {
byte[] byteArr = {'a', 'b', 'c'};
System.out.write(byteArr);
FileReader fr = new FileReader("test.txt");
fr.read();
}
}
Plain Text
복사