try catch 자바의 프로그램 오류

프로그램 오류

  • 컴파일 에러 : 컴파일 할때 발생하는 에러 (실행할수가없음 , 코드가 구려서 )

  • 런타임 에러 : 실행 할 때 발생하는 에러 (프로그램종료매 ,개변수가없다거나)
  • 논리적 에러 : 작성 의도와 다르게 동작 (실행중임 , 근데 -음수가 들거가있다거나 함 )
컴파일이 하는일

구문체크,번역,최적화 (어느정도는 알아서계산해줌 ,생략된코드 추가해주거나)
javac : 컴파일러


런타임 에러

  • 에러(error) : 프로그램 코드에 의해서 수습 될 수 없는 심각한 오류 ( OME : Out Of Memory Error)
  • 예외(exception) : 프로그램 코드에 의해서 수습 될 수 있는 다소 미약한 오류

예외 Exception 과 RuntimeException


Exception 클래스들 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외

  • IO Exception 입출력예외 인풋,아웃풋
  • ClassNotFoundException 클래스가 존재하지않음

Runtime Exception 클래스들 프로그래머의 실수로 발생하는예외

  • Arithmetic Exception 산술계산 예외 5/0
  • ClassCast Exception 형변환
  • NullPointer Exception null 일경우
  • IndexOutOfBounds Exception 배열 범위 벗어남

try - catch 예외처리

try { 트라이안에서 예외가 발생되면 바로 caht블럭으로 찾으러간다 } catch ( // e) { 걸맞는 catch가 있으면 try를 빠져나온다 }

class Ex8_4 {
    public static void main(String args[]) {
        System.out.println(1);			
        System.out.println(2);
        try {
            System.out.println(3);
            System.out.println(0/0);
            System.out.println(4); 	// 이전에께 이미 오류이니 다음꺼를 실행할필요가없으니 실행되지 않는다.
        } catch (ArithmeticException ae)	{ //타입일치하는 에러명 
            if (ae instanceof ArithmeticException) 
                System.out.println("true");	
            System.out.println("ArithmeticException");
        } catch (Exception e){ // 예외의 최고조상은 마지막에 
            System.out.println("Exception");
        }	// catch 문구를 빠져나온다 
            // 캐치내에 없을시 비정상 실행종료가된다

        System.out.println(6);
    }	// main메서드의 끝부분
}

예외 발생시 예외에대한 객체가 생성된다

  • ArithmeticException객체 이안에 ( printStackTrace() , getMessage()가 존재한다 ).

      java.lang.ArithmeticException: / by zero       // < printStatcTrace(). 
      at Ex8_5.main(Ex8_5.java:8).    
      예외 메시지 : / by zero                    // < getMessage()   
    

printStatcTrace() : 예외발생 당시의 호출스택 에 있었던 메서드의 정보와 예외 메세지를 화면에 출력

  • ArithmeticException.

    getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻을수있다 .

  • 예외 메시지 : / by zero.

Throw 로 예외를 내가 발생시킬수있음

    --------

                Throwable (예외 처리 최상위층)
                        |
            +-------------+------------------------------------------------------------+
            |                                                                          |
        Exception                                                                     Error
        (checked)                                                                      |
            |                                                                          |
    +----------------------------------------------+                     +-------------------------------+
    |                                              |                     |                               |
    |                                       RuntimeException  (unchecked)                                +--- ...
    |                                              |
    +--- IOException (checked)                     +--- ArithmeticException
    |      |                                       +--- NullPointerException   
    |      +--- FileNotFoundException              +--- ArrayIndexOutOfBoundsException           
    |      +--- EOFException                       +--- ClassCastException
    |      +--- SocketException                    +--- IllegalArgumentException
    |      +--- ...                                +--- NullPointerException
    |                                              +--- ...
    |                                      
    |                                     
    |                                      
    |
    |
    +--- SQLException (checked)
    |      |
    |      +--- BatchUpdateException
    |      +--- SQLDataException
    |      +--- SQLSyntaxErrorException
    |      +--- ...
    |
    +--- ...

Exception 의자손 > checked 컴파일에러발생 try catch 해야함 필수 Runtime Exception 의 자손 > unchecked 컴파일에러는발생안함 try catch 선택

직접처리 > 예외 떠넘기기 > 은폐덮기


직접처리

  • try 예외가 발생할 가능성이 있는 문장을넣는다

  • catch 예외처리를 위한 문장을 적는다

  • finally 예외의발생여부관계없이 수행되어야하는문장 try - catch 문의 맨마지막

    try 블럭안에 리턴이 있어 try를 벗어나도 finally가 실행된다

예외떠넘기기

  • throw 는 예외를 발생시킨 다 한마디로 catch 한테 가게 한다

  • throws <는 예외를 떠넘긴다 호출한곳으로 ,메서드 선언부에적는다 ( 폭탄넘기기)

예외무시 (은폐하기) 에러가발생해도그냥 다음코드실행 (빅데이터학습시 한두개학습안되도 걍 넘겨야할경우)

  • 트라이 캐치문에 아무것도 적지않는다

    디버깅 에러코드는 스택쌓은 모양이다

사용자 정의 예외 만들기

  • 직접 예외 클래스를 정의할수있다
  • 조상은 Exception , RuntimeException 에서 선택
  • 조상인 super(msg) Exception 클래스의 생성자를 호출
  • Exception (try -catch 필수 )
  • RuntimeException (프로그래머의 실수로 발생시키는 예외 )

예외 되던지기 (exception re - throwing)

  • 예외를 처리한 후에 다시 예외를 발생시키는것
  • 호출한 메서드와 호출된 메서드 양쪽 모두에서 예외처리하는것
  • try - catch 후에 throw e > thorws > try - catch

  • 예외란 호출한쪽 , 호출된쪽 , 양쪽에서도 할수도있다

연결된 예외 (chained exception)

  • 한 예외가 다른 예외를 발생시킬수 있다
  • 예외 A가 예외 B를 발생시키면 , A는 B의 원인 예외 (cause exeception)

Thowable initCause(Throwalbe cause) 지정한 예외를 원인예외로등록 Throwable getCause() 원인 예외 를반환

catch 문구의 예외가 A 새롭게 객체생성한 예외가 B

  • 여러 예외를 하나로 묶어서 다루기 위해서 (많은 catch 블럭을 사용하지않을려고)
  • 메소드를 만들어 여러가지 catch의 블럭들을 만들어놓고 쓴다
  • RuntimeException(unchecked) 으로 감싸서 ( try catch 를 사용하지않을려고 )

Categories:

Updated:

Leave a comment