ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 Exception
    자바/자바 기초 2021. 11. 10. 17:12
    728x90

    Exception

    • 오류 (에러 - 예외)

      • 에러: 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
      • 예외 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
    • 예외 클래스

      • Exception 클래스들: 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
        • checked예외라고불림
      • RuntimeException 클래스들 : 프로그래머의 실수로 발생하는 예외
        • unchecked예외라고불림
    • 모든 예외 클래스는 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

    '자바 > 자바 기초' 카테고리의 다른 글

    Call by Value  (0) 2021.11.10
    추상 클래스  (0) 2021.11.10
    내부 클래스  (0) 2021.11.10
    다형성  (0) 2021.11.10
    인터페이스  (0) 2021.11.10
Designed by Tistory.