본문 바로가기

JAVA

[이것이 자바다] 10 예외 처리 (Exception)

* 본 포스팅은 제가 국비지원교육을 받으며 노션에 정리한 내용을 옮겨놓은 것입니다. 발전을 위한 피드백과 지적은 언제나 환영합니다. 

NullPointerException

null과 ""는 다르다!

null은 가르키고 있는 주소값이 아예 없는 것. String 이라는

객체가 만들어지기 전의 상태

 

null값으로 핸들링 하려고 하니 nullpointexception 발생

 

 

널값이 아닌 빈 공백은 오류가 생기지 않는다.
  • toString : 데이터가 가지고 있는 문자를 가져오는 메소드.

 

 

ArrayIndexOutofBoundsException (첨자오류)

 

배열이 0,1,2 까지만 있는데 3을 찍어서 오류
i≤3에서 에러 발생
변수 i가 3일때 에러가 발생했다

 

NumberFormatException

 

123a는 숫자로 강제변환 아예 불가하기 때문에 오류발생
오류화면

 

ClassCastException (형변환 오류)

 

부모를 만들어서 자식에 대입할 수 없다.

 

오류화면
자식을 만들어서 부모에 대입할수는 있지만, 부모를 만들어서 자식으로 형변환 할 수는 없다.

 

예외조치 방법

 

  1. 예외를 직접 처리하는 방법

    try{ // 오류 발생 가능한 코드 } catch (오류종류) { // 오류에 대한 조치 내용 }
    [ finally { // 오류 발생 여부와 관계없이 무조건 실행되는 코드 } ]

    * 오류가 다섯번 : catch 다섯개. 하나의 try에 여러가지의 catch 존재
    * [ finally] 의 대괄호는 생략 가능

    1) 오류가 발생하지 않은 경우 : try → finally→ try문 빠져나옴
    2) 오류가 발생한 경우 : try → catch → finally → try문 빠져나옴
  1. 예외를 떠넘기는 방법 (throw)

    반환형 메소드명(매개변수) throws 예외의 종류 { }

data가 null이면 catch가 출력될것이고 아니면 아무일도 X
finally 추가했을때. data값에 따라서 다른것이 출력될것.
오류 종류 모를 때 : 최상위 클래스인 Exception만 써도 된다

 

 

 

Unreachable error
순서를 바꾸면 오류가 나지 않는다

 

catch 여러개를 쓸 때에는 Exception 범위가 좁은 것에서 넓은 것 순으로 나열해야 된다.

(Ascending) Nullpointerexception(좁음) → Exception (넓음)

 

printStackTrace : 반환타입 void, 무조건 콘솔에 오류메시지 출력

 

printStackTrace 예시

 

 

toString : 반환타입 String 타입

 

toString 으로 오류출력 예시

 

오류가 발생할 가능성이 있는 for문에 try를 씌운다 (위 예시에는 오류가 없는 상황)

 

"문자가 들어있습니다" 출력됨

 

형변환 오류 케이스

Throws Exception (예외 떠넘기기)

 

0으로 나눠서 발생하는 오류메시지

 

 

일단 떠넘겼을때! unhandled exception 오류 발생

 

두 가지 옵션이 생긴다.

 

첫번째 옵션 선택하면 또 떠넘겨짐!! (폭탄돌리기;)

Throws를 했다고 해서 끝나는게 아니다. 언젠가는 핸들링 해줘야함.

떠넘기긴 했지만 "나는 하지 않겠다!"라는 의미임.

 

결국 메인에서 try catch 했을때.

 

  • throw new Exception : 예외를 강제로 발생시키는 경우
강제 예외 예시 : 이 코드에서 중복되는 것은 오류발생이나 마찬가지이기 때문에!
throw new Exception 이 강제로 예외를 발생시켰다

 

e.getMessage() 로 "강제로 예외를 발생시킴"을 출력

 

이것이 자바다 (신용권의 Java 프로그래밍 정복)