-
자바 Exception자바/자바 기초 2021. 11. 10. 17:12728x90
Exception
오류 (에러 - 예외)
- 에러: 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
- 예외 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외 클래스
- Exception 클래스들: 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
- checked예외라고불림
- RuntimeException 클래스들 : 프로그래머의 실수로 발생하는 예외
- unchecked예외라고불림
- Exception 클래스들: 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
모든 예외 클래스는 Exception 클래스의 자손이므로 catch블럭의 괄호에 Exception 클래스 타입의 참조 변수를 선언해 놓으면 어떤 종류의 예외가 발생하더라도 이 catch블럭에 의해서 처리된다.
예외가 발생했을 떄 생성되는 예외 클래스의 인스턴스에는 발생한 예외에 대한 정보가 담겨 있으며, getMessage()와 printStackTrace()를 통해서 얻을 수 있다.
- getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
- printStackTrace() : 예외발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
멀티 catch블럭
catch(ExceptionA e){} catch(ExceptionB e2{} // 두개를 한번에 사용할 수 있다. catch(ExceptionA | ExceptionB e){}
예외 발생시키기
먼저 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든다음
키워드 throw를 이용해서 예외를 발생시킨다.
Exception e =new Exception("예외 메세지 출력"); throw e // 생성자에 String을 넣어주면 이 STring 이 Exception인스턴스에 메시지로 저장된다 --> Getmessage()로 얻을 수 있다.
사용자정의 예외만들기
public class test1 {
public static void main(String args[]) throws myException { System.out.println("Test START"); int a= 5; Test2 start = new Test2(a); start.test_method(5); } static class Test2{ int a ; public Test2(int num ){ this.a = num; } void test_method(int a ) throws myException { if(a!= 2) { throw new myException("에러발생"); } } }
}
// 예외클래스 별도로 만들기
public class myException extends Exception{
private final int ERR_CODE; public myException(String msg){ this(msg,100); } public myException(String msg,int errCode){ super(msg); ERR_CODE=errCode; }
}
- ### 예외 선언하기 - throw 예외 발생, throws 예외 선언 - 메서드의 선언부에 예외를 선언함으로써 이 메서드를 사용하기 위해서 어떠한 예외들이 처리되어져야 하는지 쉽게 알 수 있다. ```java void method() throws Exception1,Exception2{ }
연결된 예외
- Throwable initCause(Throwable cause) : 지정한 예외를 원인 예외로 등록
- Throwable getCause() 원인 예외를 반환
static void startInstall() throws SpaceException,MemoryException{ if (!enoughMemory()) throw new MemoryException("메모리가 부족합니다") // checked예외 }
// unchecked예외로바꾸기
static void startInstall2() throws SpaceException{
if (!enoughMemory())
throw new RuntimeException(new MemoryException("메모리가 부족합니다")); // RuntimeException으로 감싸버렸기 떄문에 unchecked예외가 되버림//checked예외를 unchecked예외로바꾸면 예외처리가 선택적이 되므로 억지로 예외처리를 하지 않아도 된다.
}
728x90