자바 예외처리(Java Exception Handling),자원반환, try with resource
자바예외 처리는 try/catch/finally 구문을 이용하여 예외가 발생한 곳에서 직접 처리하거나 발생한 예외를 자신을 호출한 곳으로 throws 구문을 이용하여 던지는 2가지의 방법이 있다.
이 예외를 받는 곳은 예외가 발생한 곳이 main 메소드가 아닌 메소드 경우에는 main 메소드 또는 다른 메소드가 될 것이고 main 메소드에서 예외가 발생하였다면 자바가상머신이 이 예외를 받아서 처리한다.
이 예외를 받는 곳은 예외가 발생한 곳이 main 메소드가 아닌 메소드 경우에는 main 메소드 또는 다른 메소드가 될 것이고 main 메소드에서 예외가 발생하였다면 자바가상머신이 이 예외를 받아서 처리한다.
자바에서 예외가 발생하면
- 해당 예외 처리기가 있는 가장 가까운 try block의 예외처리기(catch)로 제어가 넘어간다.
- try block의 예외처리기(catch)가 여러 개 존재하는 경우 발생된 예외 객체의 상위 자료형을 처리하는 첫번째 예외처리기가 선택된다.
- 예외가 발생한 곳과 예외처리기 사이의 프로그램 코드는 무시된다.
- 해당 예외처리기가 없으면 default 예외 처리기가 처리한다. (보통 발생된 예외의 정보를 출력하고 thread의 실행을 끝낸다.)
- try block의 예외처리기(catch)가 여러 개 존재하는 경우 발생된 예외 객체의 상위 자료형을 처리하는 첫번째 예외처리기가 선택된다.
- 예외가 발생한 곳과 예외처리기 사이의 프로그램 코드는 무시된다.
- 해당 예외처리기가 없으면 default 예외 처리기가 처리한다. (보통 발생된 예외의 정보를 출력하고 thread의 실행을 끝낸다.)
[기본 형식]
try
{
onj();
...
}
catch( ExceptionType1 e )
{
...
}
catch( ExceptionType2 e )
{
...
}
{
onj();
...
}
catch( ExceptionType1 e )
{
...
}
catch( ExceptionType2 e )
{
...
}
void onj()
{
}
{
}
finally
try 블럭이 예외가 발생하든 안하든 관계없이 반드시 실행된다.
(주로 사용중이던 리소드 반환)
(주로 사용중이던 리소드 반환)
try
{
....
}
catch(Exception1 e)
{
....
}
catch(Exception2 e)
{
....
}catch(Exception3 e)
{
....
}
........
........
finally
{
....
}
{
....
}
catch(Exception1 e)
{
....
}
catch(Exception2 e)
{
....
}catch(Exception3 e)
{
....
}
........
........
finally
{
....
}
[jdk1.7 try with resource, 자동자원관리, auto resource management)
자바1.7, JDK1.7에서 소개된 try-with-resources 구문은 하나 또는 그 이상의 리소스를 가지는 try 구문이다. 여기서 리소스란 사용 후 자동으로 close되어야 할 자원들인데
대표적인 것이 DB Connection과 관련된 자원, 파일이나 네트웍 스트림과 관련된 자원들 일 것 이다. 이런 리소스들이 try-with-resources 구문을 사용하면 구문의 끝에서 확실하게 자동으로
닫아 준다는 것이다.(물론 그런 리소스는 java.lang.AutoCloseable을 구현해야 한다. 아래 BufferedReader 역시 구현했다.)
다음 예문은 파일의 한 라인을 읽는 예문인데 try 정의 라인에서 BufferedReader를 정의하고 정의된 br 객체는 구문이 끝날 때 자동으로 close 되는 것이다.
java.lang.AutoCloseable을 구현한 것 들이 대상이다.
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
물론 jdk1.7 이전에는 다음과 같이 try, finally를 이용하여 주로 처리했다.
static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
예를 하나 더 보자. 아래 구문에서는 java.sql.Statement 객체를 자동으로 닫아준다.
public static void viewTable(Connection con) throws SQLException {
String query = "select empno, ename from emp";
try (Statement stmt = con.createStatement()) {
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String empno = rs.getString("empno");
String ename = rs.getString("ename");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
======================================================================================
[오프라인 개강예정강좌, 오프라인교육장에 오시면 보다 자세히 배울 수 있습니다.]
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[01/06][기업100%환급]Spring ,MyBatis,Hibernate실무과정
[01/06][기업100%환급]SQL기초에서 Schema Object까지
[01/06]C#,ASP.NET마스터
[01/13]iPhone 하이브리드 앱 개발 실무과정
[01/13][기업100%환급]PL/SQL,ORACLE HINT,TUNING
[01/13][기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
[01/13][기업100%환급]HTML5,JavaScript,Ajax,jQUERY,JSON
[01/16][채용확정]오라클자바실무개발자신입과정
[평일야간]
[01/07]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
[01/07]안드로이드개발자과정
[01/08]C#,ASP.NET마스터
[01/09]iPhone하이브리드앱개발실무과정
[01/09]웹퍼블리싱 마스터
[01/09]Spring3.X, MyBatis, Hibernate실무과정
[01/24]SQL초보에서실전전문가까지
[주말]
[01/04]닷넷실무자를위한WPF개발자과정
[01/04]Spring3.X,MyBatis,Hibernate실무과정
[01/11]C#,ASP.NET마스터
[01/11]JAVA&WEB프레임워크실무과정
[01/11]안드로이드개발자과정
[01/11]SQL초보에서전문가까지
[01/18]웹퍼블리싱 마스터
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[01/06][기업100%환급]Spring ,MyBatis,Hibernate실무과정
[01/06][기업100%환급]SQL기초에서 Schema Object까지
[01/06]C#,ASP.NET마스터
[01/13]iPhone 하이브리드 앱 개발 실무과정
[01/13][기업100%환급]PL/SQL,ORACLE HINT,TUNING
[01/13][기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
[01/13][기업100%환급]HTML5,JavaScript,Ajax,jQUERY,JSON
[01/16][채용확정]오라클자바실무개발자신입과정
[평일야간]
[01/07]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
[01/07]안드로이드개발자과정
[01/08]C#,ASP.NET마스터
[01/09]iPhone하이브리드앱개발실무과정
[01/09]웹퍼블리싱 마스터
[01/09]Spring3.X, MyBatis, Hibernate실무과정
[01/24]SQL초보에서실전전문가까지
[주말]
[01/04]닷넷실무자를위한WPF개발자과정
[01/04]Spring3.X,MyBatis,Hibernate실무과정
[01/11]C#,ASP.NET마스터
[01/11]JAVA&WEB프레임워크실무과정
[01/11]안드로이드개발자과정
[01/11]SQL초보에서전문가까지
[01/18]웹퍼블리싱 마스터
홈페이지 바로가기 : http://www.oraclejavanew.kr/
댓글 없음:
댓글 쓰기