코딩기록 저장소 🐕/JAVA

예외처리 exception

kimkongmom 2023. 8. 1. 08:57

 

 

 

 

예외처리 Exception 

▶ Error  시스템 레벨의 심각한 오류

  시스템 수정으로 문제를 해결

Exception  프로그램 레벨의 일반적인 오류

  코드 수정으로 문제를 해결

• 예외(Exception)

 프로그램의 실행 중 발생하는 여러 가지 오류를 의미함

 예외가 발생하면 프로그램이 강제로 종료됨

 예외가 발생하더라도 프로그램이 종료되지 않도록 예외처리를 해야 함

 try - catch문을 이용해서 예외 발생으로 인해 프로그램이 종료되는 것을 회피할 수 있음

 

 

 

 Exception 클래스

 ① 모든 예외 클래스의 슈퍼클래스

 ② 명시적 예외 처리 여부에 따라 Checked/Unchecked Exception으로 구분

 Checked Exception

RuntimeException 클래스의 자식클래스가 아닌 모든 예외 클래스

반드시 try - catch문으로 예외 처리를 해야 함

 ③ IOException, SQLException 등

 Unchecked Exception

RuntimeException 클래스의 자식클래스로 등록된 모든 예외 클래스

try - catch문이 없어도 실행 가능

NullPointerException, NumberFormatException

그림설명★★

try - catch문

예외를 처리할 때 사용하는 코드

실행할 코드는 try 블록에 두고 예외를 처리할 코드는 catch 블록에 두는 방식

try 블록의 코드를 실행하다가 예외가 발생되면 발생된 예외는 자동으로 catch 블록으로 전달됨

④ 모든 예외는 자바 클래스로 만들어져 있음

 

형식

 

예외 처리 흐름

 

 

ex)  아래 나와있는 코드는 문자열을 정수로 만드는것인데 영어를 정수로 만들기 불가능하기 때문에

        NumberFormatException이 뜬다.

        이곳에 Exception과 RumtimeException도 적용이가능하다.

        RumtimeException이 된다는것은 UncheckedException이라는 뜻

        NumberFormatException 이 즉 RumtimeException 자식이란 뜻이다!

ex2) 아래는 다양한 예외가 발생했을때 처리하는 예제입니다.

        ① ParseInt가 나오면 NumberFormatException이 뜰 수 있을 가능성이 있기 때문에 첫번째로 적어줍니다.

              숫자말고 문자를 쓰거나 다른식을 썼을때!

        ② 배열 예외 처리인데요 만약 1 + 2 가 아닌 1 - 2를 적게된다면 배열[1]번째는 없는거기때문에 예외가 발생합니다.

             +로 원소를 나누어주기로했기 때문에죠 Split( "[ + ]" )

        ③ 3번째는 충분나올 수 있는 ①,② 예외 말고도 나올수 있는 예외를 모두 포함한 부모Exception으로 처리해줍니다.      

확대해서 봐주기
첫번째 예외처리결과
두번째 예외 결과

▶ finally 블록

   ① try-catch문의 마지막 블록으로 추가할 수 있다. (생략 가능)
   ② 예외 발생 여부와 상관 없이 "항상 마지막"에 실행된다.

 

ex) Scanner을 사용했을때  만약 Scanner 선언이 try {  }안에 있다면 sc.close();는 finally 안에서 오류

       가 발생합니다.  

       sc.close();를 마지막에도 넣어줘야하기 때문에 Scnner sc = null; 선언을 try 밖인 메소드 전체에 

       포함된 곳에 선언해야 합니다.

Finally

throw(던지다)

    예외 객체를 직접 생성해서 던질 때 사용한다.
    Java는 예외로 판단하지 않는 것들을 던질 때 사용한다.
    ③ 개발자가 직접 예외를 처리할 때 사용한다.

 

ex3) 2번예제를 적용해서 만약 주류구매 나이가 0보다 작거나 100살이상이면 현실적으로 불가능하기 때문에

         throw를 사용해 예외를 직접 만들어줍니다.

         if문을 사용해 범위를 정해주고 { } 안에 throw new RuntimeException();  를 써주게되면

         직접 RuntimeException을 발생시켜서 던진게 되는겁니다!

throw

원래는 가능했지만 throw를 사용해서 예외처리!

ex4)  빨간네모들을 보면 파라미터에 null값을 주고 substring을 했으니 nullpointerexception이 발생합니다.

         그렇기 때문에 오류가 발생했는지 알려주는 예외추적이 가능한  e.printStackTrace( );을 사용해 알려줍니다.

e.printStackTrace

 

 throws

     ① 메소드에서 발생하는 모든 예외를 던질 때 사용한다.
     ② 메서드 내부에서 try-catch를 처리하지 않고, 메서드를 호출하는 곳으로 예외를 던질때 사용한다.
     ③ 메서드를 호출하는 곳에서 try-catch를 처리한다.

ex4) NullPointException이 오류로 발생하기 때문에 throws를 사용해서 무엇이 오류를 발생했는지 설명을 꺼냅니다.          throws 사용 위치 확인 잘하기

throws
결과

 

'코딩기록 저장소 🐕 > JAVA' 카테고리의 다른 글

Io input_output  (0) 2023.08.02
복합 예제  (0) 2023.08.01
Api Java Scanner  (0) 2023.07.31
Api Java date_time  (0) 2023.07.31
Api Java random  (0) 2023.07.31