#TIL, Java Study 예외처리 ( Exception )
< 이것저것 >
* String Tokernize : 기준점 중심으로 스트링을 자르는 것. ( == String.split(); )
* nullPointException : 객체가 안만들어졌는데....?
* BufferedLIne은, 더이상 데이터가 없을때 null이 된다. 그래서 ((line!=br.readLine())!=null)의 조건이 성립
* close에서는 ioexception이 발생할 수 있음. > io익셉션해주어야 함.
* close 해주지 않으면, io객체가 연결을 쭉 이어나가서, 계속 메모리를 잡아먹음.
(청소부 : 가비지컬렉터 : 연결중이면 회수를 못함. >> 메모리 부족. close 선언해줘야 가비지콜렉터에서 회수함.)
25. 예외 처리 ( Exception )
(1) 예외
: 프로그램이 정상적으로 진행되지 못하게 하는 '돌발 상황'
: 프로그램이 정상적으로 진행되지 못하게 하는 '돌발 상황'
( ex) JVM입장의 돌발 상황 ? )
- 숫자가 아닌 형태의 문자를 숫자로 바꾸려 할 때.
- 채팅하다가 상대가 나가버리는 경우
- 게임하다가 게임 서버가 다운 된 경우, 전원케이블 빠진 경우, 번개쳐서 정전이 된 경우
==> 이럴때 예외를 처리해주어야 함. ( 어떻게 할지를 알려줌 )
(2) 예외처리 목적
: 프로그램 진행 시 발생할 수 있는 '돌발상황' 을 예외로 '미리 정해놓고,'
해당하는 예외가 발생했을 경우, 적절한 조치를 취해서
프로그램이 '정상적으로 작동' 하도록 하는 것.
(3) 계층도
- Object -> Throwable -> Exception -> 1) Compile Exception / 2) Runtime Exception
// 런타입익셉션이 아니면, 무조건 컴파일 익셉션이다. // 컴파일은 되지만, 실행이 되지 않으면, 런타입 익셉션이다.
(4) 특징
1) throw 로 예외를 발생시킴.
2) throws 로 예외발생 가능성을 표식할 수 있음. ( == 예외처리를 JVM에게 떠넘길 수 있음 )
3) try ~ catch 로 잡을 수 있음. ( == (적극적) 예외를 때려잡는 것 )
4) 생성자나 메소드 에서만 발생할 수 있음 ( 멤버변수는 상태기때문에 예외X )
5) 상위 Exception 으로도 처리가 가능 .
* 상위로 잡을 수 있는데도, 하위 익셉션으로 예외를 잡는 이유??
1) 따로따로 처리하므로 분기가 쉬움
2) 더 기능이 많음
->하위가 상위보다 가능한 처리가 많음
> 상황에 최적화 된 예외처리가 가능해짐
> catch절 다양하게 처리 가능.
(5) 처리방법 ( * )
** 어떤 걸 써야할까?
1) 내가 사용하는 기능의 API에 있는 throws 예외를 잡아주자!
2) 해당 예외가 compile인지(반드시 잡아야함), runtime인지 확인하고, 자식부터 순서대로 잡기!
1) 때려 잡는 법 - 생성자 / 메소드 안에 try ~ catch
try { 예외발생구문(생성자나 메소드) } catch ( 예외타입 객체 ) { 예외 처리 로직 }
2) 떠넘기는 법 - 생성자 / 메소드 옆 throws 예외타입
throws 예외타입 (JVM이 처리)
( BUT 떠넘기면, close를 못하고, 그러면 가비징을 할 수 없게 됨. )
시기는 상관 X, 메인메소드나 생성자에서 메소드 호출해서 잡아줄수도 있음. (JVM에게 넘기지 않으려면)
(6) try 절 안에 2개 이상의 예외가 발생
1) 예외들이 상속관계 : 순서 존재. 하위예외부터 잡아 주어야 함. (자식)
catch(MyException me)
catch(Exception e)
2) 상속관계가 아닌 경우 : 순서가 존재하지 않음.
catch(MyException me)
catch(YourException ye)
ex)day13/B.java
(7) 2개 이상의 예외를 떠넘길 때
(ex : throws MyException, YourException, ... )
: 생성자 옆에 throws는 여러개 + 나열순서는 상관 없음.
ex) day13/C.java
(8) finally
1) 항상 수행되는 절 ( return을 만나도 finally는 무조건 실행 )
2) 'try' 절이 나오면, 'catch' 절이 나오거나, 'finally' 절이 나오거나 '둘 다' 나와야 한다.
( try+catch || try+finally || try+catch+finally )
3) System. exit(-1) : 무조건 종료. 시스템 클래스의 exit ( int status ) 메소드.
Q. 파라미어 안에 int status 에 들어갈 수는?
-normal termination (정상종료) - 0(zero) / abnormal termination(비정상종료) -1(nonzero)
( -1쓰는 이유는 프로그래머들의 관례 )
Author And Source
이 문제에 관하여(#TIL, Java Study 예외처리 ( Exception )), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@limy901/TIL-Java-Study-예외처리-Exception저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)