(1) 예외( Exception )
1) 프로그램이 정상적으로 진행되지 못하게 하는 '돌발 상황'
ex) 숫자가 아닌 문자열을 숫자로 바꾸려할 때
채팅하다가 상대방이 나가 버릴때
온라인 게임하고 있는 중에 전원케이블이 빠짐
게임 서버 다운됨
등등...
(2) 처리 목적
1) 프로그램 진행시 발생할 수 있는 '돌발 상황'을 예외로 미리 정해놓고,
해당하는 예외가 발생했을 경우 적절한 조치를 취해서, 프로그램이
'정상 작동'히도록 하는 것
(3) 계층도
Object
|
Throwable
| |
Error Exception
| |
compileException RuntimeException
(CheckedException)
ex) IOException -> CompileException
NumberFormatException -> RuntimeException
(4) 특징
1) 일(생성자 or 메소드)할때 발생할 수 있음
2) throw 로 예외 객체를 던짐(발생시킴)
3) throws 로 예외 발생 가능 '표식'을 함( == (소극적으로) 떠넘김 )
4) try catch 로 잡을 수 있음 ( == (적극적으로) 때려 잡음 )
(5) 방법
1) 때려 잡는 법 ( 적극적인 처리 )
<1> try catch
ex) try{
예외가 발생할 수 있는 구문( 생성자 or 메소드 )
}catch(예외타입 예외객체){
처리로직
}
2) 떠넘기는 법 ( 소극적인 처리 )
<1> throws 예외타입
ex) void m3() throws Exception {}
<2> 메소드나 생성자의 이름 옆에 throws 를 적고 바디 안에서 발생할 수 있는 Exception 을
적어주면 Exception 이 발생했을 때 자신을 호출한 곳으로 Exception 을 보낸다.
<3> 만약 아무곳에서도 Exception 을 잡지 않았을 경우에는 JVM 한테까지 가게된다.
(6) 순서 ( try절 안에 2개 이상의 예외가 발생시 )
1) 상속관계가 아닐때는 순서 상관없이 아무예외나 먼저 잡아주면 된다.
ex) catch(MyException me)
catch(YourException ye)
2) 상속관계일 경우에는 하위예외부터 잡아 줘야한다. ( 자식 예외 먼저 )
ex) catch(IOException me)
catch(Exception e)
3) 자식예외를 먼저 잡는 이유는 구체적이고 세련된 예외처리를 위해서 이다.
(7) 2개 이상의 예외를 떠넘길 때
ex) throws MyException, YourException, ... ,Exception
(8) finally 절
1) try절이 나오면
catch절이 나오던지 finally절이 나오던지
둘다 나오던지 해야한다.
2) finally 절은 반드시 수행되는 절이다.
<1> 예외 발생과 상관 없이 수행된다.
<2> 심지어 return 을 만나더라도 finally 절을 수행 후 리턴된다.
3) finally 절이 유일하게 실행되지 않을 때가 있다. ( 즉시 종료 명령어를 만났을 때 )
<1> System.exit(0); // normal termination
<2> System.exit(-1); // abnormal termination
'Java > Java' 카테고리의 다른 글
Java 09. this 와 super (0) | 2022.03.10 |
---|---|
Java 08. 제한자( Modifier ) 와 식별자 ( Identifier ) (0) | 2022.03.10 |
Java 06. OOP( Object Oriented Programming) 특성 (0) | 2022.03.09 |
Java 05. 컬렉션 ( Collection ) (0) | 2022.03.09 |
Java 04. 배열 ( Array ) (0) | 2022.03.09 |