JAVA/★객체지향

예외(1)/try catch + try with resource/ e.getMessage() /e.toString()/e.printStackTrace /

SEOKIHOUSE 2023. 3. 13. 17:05

1)예외: 오류를 처리하는 것

계산하나마나라 의미없다~~ 오류다!!


2)try~catch 예외를 처리하기 위한 문법적예외

**

try {

예외의 발생이 예상되는 로직

} catch(예외클래스 인스턴스) {

예외 발생시 실행되는 로직

}

<try catch를 쓰면 이후 로직도 실행된다!!!>

**

try {오류가 발생할 것 같은 부분을 } 사이에 위치시키고 catch(Exception) { 에러 발생하면 try중지되고 catch로 이동}

exception: catch 구문 호출하고 에러를 담고 있는 객체를 매개변수로 전달 -> 타입은 exception get message라는 메소드가 포함됨

-->에러가 발생한 이유가 리턴된다 (Exception)의미


java 7부터 close부분을 자동으로 실행시켜주는 try with resource구문이 추가되었다

자바의 리소스: DB, Network, file   ->자바 내부에 존재하는 데이터가 아니라 불완전하다 오만가지 변수발생이 가능하다;;

*기존에 try catch로 어떻게 처리했는지 보자↓↓↓↓

만약에 try에 있는 부분이 오류가 떨어진다면 close부분을 실행할 기회를 잃어버린다

->finally를 close에 넣어야한당    ↓↓↓↓↓↓↓

근데 try안에서면 작동하기떄문에 f를 전역처럼 만들어준다↓↓↓↓↓↓

 

근데 또 오류가 발생했는데 왜냐면 try가 만약 실행이 안되면 finally로 올 때 f의 값이 없어서 자바가 ?를 던진다
그렇다면 f한테 값을 주자↓↓↓↓↓↓↓↓
FileWriter f = null; 이라는 값을 주고 if문을 만들어줬는데 또 f.close부분에 오류가 뜨는데 ioexpection이 발생할 수 있다고 한다 그럼 예외처리를 또 해주자↓↓↓↓↓↓↓↓

조오오오오오옹나 복잡하다.;;;; 이걸 간단하게 해결해줄 선생님을 모셨다 바로try with  resoure 형님이다

 


 

*****try with resource****

close해야 할 영역은 FileWrite로 만든 영역이다 반드시 close!

클래스가 AutoCloseable이라는 인터페이스가 있다면 try with resource를 사용할 수 있다↓↓↓↓↓↓↓↓↓↓↓↓↓↓
try(close를 시켜야하는 녀석을 넣기) {} 

오른쪽이 resource인데 왼쪽과 동일한 코드이다 완전 간푠!



3)뒷수습 : 자바에서 기본적으로 제공하는 뒷수습 방법만 알려줄게 .. 나머지는 알아서 실력를 갖추도록

e.getMessage() : 대충

e.toString() : 좀 더 자세히

e.printStackTrace : 에러출력

try catch를 쓰면 이후 로직도 실행된다


4) 또다른 예외

여기서 두가지 예외 발생가능

java.lang.ArrayIndexOutOfBoundsException ( 배열범위 벗어남)

java.lang.ArithmeticException: / by zero ( 어떤값을 0으로 나누려고 할때) --- a.z(1,0);


두가지 예외 어떻게 처리할까?