package h_exception;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Finally {
public static void main(String[] args) {
-finally ( 반드시 실행해야 한다하면 추가해주면 된다 )
-필요에 따라 try_catch 뒤에 finally 를 추가할 수 있다.
- finally 는 예외의 발생여부와 상관없이 가장 마지막에 수행된다.
예를들어
int result = 10 / 0 ;
System.out.println(result) ;
얘는 예외가 되면 System.out.println(result) ; 이 부분이 실행이 안되고 catch 로
넘어가는데 얘가 반드시 실행해야 할때 finally 를 써준다.
자동자원 반환 ( 뒤에 꼭 실행해줘야 하는 애를 넣어주면 식이 길어지니까 얘를 사용하는 것 )
try ( 변수선언; 변수선언 ) { } catch(Exception e ) { }
- 사용 후 반환이 필요한 객체를 try 의 () 안에서 선언하면 try 블럭 종료시 자동으로 반환
FileInputStream fis = null ; // 파일읽기
try {
fis = new FileInputStream("d:/file.txt");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
fis.close();
// 파일을 읽으려면 운영체제의 도움을 받아야함. fis 뒤에 위치에 close 메소드가 있으면 예외가발생하면 여기가 실행이 안될 가능성이 있다.
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//finally 가 실행되는 순서 : 예외발생 -> try -> catch -> finally
//예외가 발생하지 않았을때는 try -> finally
//자동자원반환을 사용해보자 (JDK1.7 )
FileOutputStream 파일을 만들겠다. CLOSE 를 쓸 필요가 없다.
try(FileOutputStream fos = new FileOutputStream("d:/file.txt")){
String str = "아무내용이나 써보자....";
byte[] bytes = str.getBytes();
for (int i = 0 ; i < bytes.length; i++){
fos.write(bytes[i]);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
댓글
댓글 쓰기