예외처리의 마지막
try~with~resource 구문
-> 자바7에서 추가된 기능
-> 자동으로 close를 해주는 구문
->finally를 해줄필요가 없게되는것이다.
기존 구문
try{
에러발생 가능코드
}catch{
에러발생시 수행코드
}finally{
반드시 수행해야하는 코드
연결을 끊어주는 코드(close)
}
이런식으로 썼다.
==========================================================================
==========================================================================
// FileInputStream fis = null;//파일inout할때 배운다.
// //파일 집어넣을때 사용한다.
// //애를 쓸땐 무조건 try~catch써줘야한다.
// try {
// fis=new FileInputStream("test.txt");
// //파일 없을때 어떻게 할꺼야 이런말이기 때문에 try
catch를 했다.
// //파일 인풋 스트림때는 파일을 연결해주는 것이다.
// } catch (FileNotFoundException e) {
// //파일 없는 경우에 대해서 처리를 했다.
// // TODO Auto-generated catch block
// e.printStackTrace();
// }finally {
// try {
// fis.close();
// //파일 연결하고 끊을때 발생할수있는 에러
로인해 다시또 trycatch를 해줘야된다.
//
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
소스1
==============================================================================
try (FileInputStream fis=new FileInputStream("test.txt")){
//파일 인풋 스트림에 fis로해서 파일을 가져오라고한것이다.
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e1) {
e1.printStackTrace();
}
소스2
=======================================================================================
소스1과 소스2는 같은것이다. 다만 방식이 위에껀 try catch를 파일을 못찾았을때 한번하고 파
일 입출력이 잘못되었을때 로 2번 try catch를 한것이고 또한 close를 하는 것이다.
소스2는 한번에 처리를해서 소스의 양도 줄이고 한것이다. 이경우엔 close를 안해줘도되는게 다
체크를 하기 때문이다.
이때 주의할점은 catch2개가 오면 catch1이 catch2보다 더 길어야한다. 무슨의미냐면
if문에서
if(a<0){
}
else if(a==-1){
}
일경우에 a==-1이여도 a가 0보다 작은 if문이 먼저 작동되기 떄문에 범위를 작은걸 줘야한다.
그림 Exception 상속도에서 보면 오른쪽에서 왼쪽으로 우선순위가 적용된다고 보면 된다.
catch를 쓸경우 오른쪽부터 체크를 하고 역으로 올라가야 하고
큰틀에서 할려면 Exception처럼 큰틀로 처리해버리면 된다.
'IT일반과목 > java' 카테고리의 다른 글
| equals, hahscode (0) | 2018.08.01 |
|---|---|
| Object 클래스에 대해서 (0) | 2018.08.01 |
| 예외처리 6 (0) | 2018.08.01 |
| 집공부 (0) | 2018.07.31 |
| JAVA 네트워크 (0) | 2018.07.31 |