- 에러 (Error)
- 하드웨어의 잘못된 동작이나 고장으로 인한 오류 (개발자가 해결할 수 없는 오류)
- 에러 발생 시 프로그램 종료
- 정상 실행 상태로 돌아갈 수 없다.
- 예외 (Exception)
- 사용자의 잘못된 조작이나 개발자의 잘못된 코딩으로 인한 오류 (개발자가 해결 가능한 오류)
- 예외 발생시 프로그램 종료
- 예외 처리 추가하면 정상 실행 상태로 돌아갈 수 있다.
- 예외의 종류
- 일반(컴파일 체크) 예외(Exception)
- 예외 처리 코드 없으면 컴파일 오류 발생
- 실행 예외(RuntimeException)
- 예외 처리 코드를 생략하더라도 컴파일이 되는 예외
- 일반(컴파일 체크) 예외(Exception)
- 예외 처리 방법
- try - catch - finally
- 다중 catch 가능
- 예외 별로 처리 코드 다르게 구현
- 순서는 상위 클래스가 위에 위치해야 한다.
- 멀티 catch 가능
- 하나의 catch 블록에서 여러 개의 예외 처리 가능
- 동일하게 처리하고 싶은 예외를 | 로 연결한다.
- catch 블록 코드 예시
-
try { 예외가 발생할 만한 코드; } catch(예외클래스 객체e) { 예외발생시 처리하는 코드; } finally { 예외가 발생하든 안하든 무조건 실행되는 코드; 마무리 정리하는 코드; }
- catch (Exception e) {
- getMessage()
- System.out.println(e.getMessage());
- 예외 내용 출력
- printStackTrace()
- e.printStackTrace();
- 예외 경로 출력
- getMessage()
-
- 다중 catch 가능
- throws
- 자신을 호출한 메소드에 예외처리를 떠넘기는 것
- 리턴타입 메소드명(매개변수) throws 예외클래스1, 예외클래스2, … { … } 형식
- 예시
-
static void myFunc() throws Exception { ... throw new Exception(); } // 메인 영역 try { myFunc(); } catch (Exception e) { ... }
-
- 사용자 정의 예외 클래스 선언
- 자바 표준 API에서 제공하지 않는 예외는 사용자 정의 예외 클래스 선언
- extends [Exception | RuntimeException] 과 같이 여러 예외처리 가능
- 예시
-
// 사용자 정의 예외 class MyException extends Exception { String message = ""; public void printMessage() { System.out.println(this.message); } } static void myFunc() throws Exception { ... if (조건문) { MyException e = new MyException(); e.message = "사용자 정의 예외"; throw e; } // 메인 영역 try { myFunc(); } catch (MyException e) { e2.printMessage(); }
-
- try - with - resources
- try 문을 벗어나면 자동으로 사용했던 객체의 close()를 호출해서 리소스를 닫아주는 구문 (JDK7 이상)
- AutoCloseable 인터페이스를 구현한 메소드만 가능하다.
- 리소스 객체
- 입출력스트림, 서버소켓, 소켓, 각종 채널
- 예시
-
public class Class1 { public method1() throws Exception { Connection conn = DriverManager.getConnection("..."); Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery("SELECT 1 from dual"); try (conn; stat; rs) { ... } catch (Exception e) { ... } } }
-
try (FileWriter file = new FileWriter("data.txt")) { file.write("Hello World"); } catch (Exception e) { e.printStackTrace(); }
-
- try - catch - finally
'Java' 카테고리의 다른 글
[Java] Collection (0) | 2024.03.18 |
---|---|
[Java] Thread (0) | 2024.03.18 |
[Java] 중첩 클래스, Wrapper 클래스, API 메소드, 자바 관련 단어들 (0) | 2024.03.18 |
[Java] Abstract, Interface (0) | 2024.03.13 |
[Java] 상속, Override (0) | 2024.03.13 |