참고
Exception_01.java
Exception_02.java
Exception_03.java
프로그램 오류
- 프로그램이 실행 중에 어떤 이유로 인해 오작동을 하거나 비정상적으로 종료되는 경우
컴파일오류 VS 런타임오류
컴파일 오류
- Ctrl+S 저장시 컴파일 중에 발생하는 오류
런타임 오류
- Ctrl+F11 프로그램 실행 중에 발생하는 오류
에러 vs 예외
에러 (Error)
- 프로그램 코드를 이용하여 수습될 수 없는 심각한 오류
- 게임 오픈때 사람 몰려서 서버 터질때, 대기열 방식 이용해서 입장인원 제한
예외 (Exeption)
- 프로그램 코드를 이용하여 수습될 수 있는 미약한 오류
Checked예외 vs Unchecked예외
Unchecked 예외
- 컴파일러가 예외처리를 강제하지 않는 경우
- RuntimeException과 그 자손들의 경우에는 예외처리를 강제하지 않음
- Error(어짜피 못고치니까)
Exception
RuntimeExeption
- 주로 프로그래머의 실수에 의해서 발생하는 예외
- IndexOutOfBoundsException : 배열에서 방번호 넘어갈때, 배열에서 2번방까지밖에 없는데 3번방 달라고 할때
- NullPointException : 객체 생성이 안됐는데 그 멤버들을 호출하려고 했을때
- 객체 생성 전(주소 없을 때)에 인스턴스 멤버에 접근하려고 할 때
그외 Exception
- 주로 외부의 영향에 의해서 발생하는 예외
- ClassNotFoundException : 클래스 못찾음, 가끔 시스템 오류로 컴파일 되지 않는 경우가 있음
- FileNotFoundException : 파일은 넣어놨는데 시스템 오류로 못찾을때
Exception e1 = new Exception("예외처리");
try{
throw e1;
}catch (Exception e{
System.out.println("예외 발생시키기 성공");
System.out.println(e.getMessage());
e.printStackTrace();
}
try-catch
- 프로그램 실행시 발생할 수 있는 예외에 대비한 코드를 작성한 것
사용방식
try{
}catch(Exception e){
}catch(Exception e2){
}
- 발생한 종류의 예외와 일치하는 하나의 catch만 수행된다
- 예외가 2개다 발생하면 첫 번째 문장만 수행
예외발생시키기 throw
- 연산자 new를 이용하여 발생시키고자 하는 예외의 객체를 만든다.
- 예약어 throw를 이용하여 예외를 발생시킨다.
예외던지기 throws
- 메서드에 예외 선언하기
- 메서드의 선언부 마지막에 예약어 throws와 함께 예외 종류를 적어주기만 하면 된다.
- 예외 처리는 해당 메서드를 호출한 쪽에서 예외 처리
finally 블럭
- try-catch 블럭에 상관없이 수행되어야 할 코드를 포함한다.
사용형식
try{
//예외가 발생할 수 있는 코드
}catch(Exception e){
//수행한 코드에서 Exception 이라는 예외가 발생했을 때 처리할 문장
}catch(Exception e){
//수행한 코드에서 Exception 이라는 예외가 발생했을 때 처리할 문장
}finally{
//예외발생에 상관없이 수행되어야 할 코드
}