컴파일 에러 : 컴파일 시에 발생하는 에러
런타임 에러 : 실행 시에 발생하는 에러
논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것
에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외처리(Exception handling)
정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것
[ try - catch문 ]
- 형식
try {
// 예외가 발생할 가능성이 있는 문장들을 넣는다
}catch (Exception e1) {
// Exception1이 발생했을 경우 이를 처리하기 위한 문장을 적는다
}catch (Exception e2) {
// Exception2이 발생했을 경우 이를 처리하기 위한 문장을 적는다
}catch (Exception e3) {
// Exception3이 발생했을 경우 이를 처리하기 위한 문장을 적는다
}
//1) 예외처리 하지 않은 경우
System.out.println(1);
//Exception이 발생되면 프로그램은 정상적으로 종료되지 않음
System.out.println(3/0);//ArithmeticException 발생
System.out.println(5);
System.out.println("END");
//2) 예외처리를 한 경우
//->Exception이 발생하더라도 정상적으로 프로그램은 종료시킬 수 있다
try {
//예외 발생이 예상되는 코드 작성
System.out.println(1);
System.out.println(3/0);
System.out.println(5);
} catch(ArithmeticException e) {
//예외가 발생되었을 때 처리할 코드 작성
System.out.println(e);
}//end
System.out.println("END");
//3)
try {
System.out.println(1);
int[] num=new int[3];
num[5]=7;
System.out.println(9);
}catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}//end
System.out.println("END");
//4)
try {
System.out.println(1);
int num=Integer.parseInt("KOREA");
System.out.println(num);
System.out.println(3);
}catch (NumberFormatException e) {
System.out.println(e);
}//end
System.out.println("END");
//5)
try {
System.out.println(1);
Integer inte=null;
System.out.println(5/inte);
}catch (NullPointerException e) {
System.out.println(e);
}//end
System.out.println("END");
//6)다중 catch문
try {
int a=2/0;
int b=Integer.parseInt("KOREA");
int[] num=new int[3];
num[5]=7;
}catch (ArithmeticException e) {
System.out.println(e);
}catch (NumberFormatException e) {
System.out.println(e);
}catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e);
}catch (NullPointerException e) {
System.out.println(e);
}//end
System.out.println("END");
//7)
try {
int a=2/0;
int b=Integer.parseInt("KOREA");
int[] num=new int[3];
num[5]=7;
}catch (Exception e) {//다형성
//Exception 클래스 : 모든 예외 발생의 조상 클래스
System.out.println(e);
}//end
System.out.println("END");
[ finally ]
예외의 발생여부 상관없이 실행되어야할 코드를 포함시킬 목적으로 사용된다
- 형식
try {
// 예외가 발생할 가능성이 있는 문장들을 넣는다
}catch (Exception e1) {
// 예외처리를 위한 문장을 넣는다
}finally {
// 예외의 발생여부에 관계없이 항상 수행되어야하는 문장들을 넣는다
// finally블럭은 try-catch문의 맨 마지막에 위치해야 한다
}
- 적용
try {
System.out.println("OPEN");
System.out.println(1/0);
}catch (Exception e) {
System.out.println(e);
}finally {
System.out.println("CLOSE");
}//end
System.out.println("END");
[ throws문 ]
하나의 예외에 대해서 예외가 바랭한 메소드와 이를 호출한 메소드 양쪽 모두에서 처리해줘야 할 작업이 있을 때 사용된다
주의 : 예외가 발생할 메소드에서는 try-catch문을 사용해서 예외처리를 해줌과 동시에 메소드의 선언부에 발생할 예외를 throws에 지정해줘야 한다
package oop0321;
class Test {
public void view() throws Exception {
int a=3/0;
}//view() end
public void disp() throws NullPointerException, NumberFormatException {
int a=Integer.parseInt("KOREA");
}//disp() end
}//class end
public class Test08_throws {
public static void main(String[] args) {
//throws문
//->메소드 호출시 예외처리를 한꺼번에 모아서 처리
try {
Test test=new Test();
//test.view();
test.disp();
}catch (Exception e) {
System.out.println(e);
}//end
}//main() end
}//class end
'Backend > JAVA' 카테고리의 다른 글
[JAVA] Generics (0) | 2023.03.26 |
---|---|
[JAVA] List, Set, Map 인터페이스 (0) | 2023.03.26 |
[JAVA] 내부클래스 inner class (0) | 2023.03.21 |
[JAVA] 익명 내부 객체 Anonymous class (0) | 2023.03.21 |
[JAVA] interface (0) | 2023.03.21 |