2020.09.23 자바 프로그래밍 기초 - Finally

 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();

}


}


}













댓글