java.io.BufferedReader의 readLine() 메소드 ------------------------------------------ public String readLine() throws IOException
RuntimeException 클래스
: Unchecked Exception으로 주로 프로그래머의 부주의로 인한 오류인 경우가 많기 때문에 예외 처리보다는 코드를 수정해야 하는 경우가 많다
RuntimeException 후손 클래스
① ArithmeticException : 0으로 나누는 경우 발생, if문으로 나누는 수가 0인지 검사
② ArrayIndexOutOfBoundsException : 배열의 index 범위를 넘어서 참조하는 경우 배열명.length를 사용하여 배열의 범위 확인
③ NullPointerException : Null인 참조 변수로 객체 맴버 참조 시도 시 발생. 객체 사용 전에 참조 변수가 Null인지 확인
④ ClassCastException : Cast 연산자 사용 시 타임 오류. instanceof 연산자로 객체타입 확인 후 cast연산
⑤ NegativeArraySizeException : 배열 크기를 음수로 지정한 경우 발생. 배열 크기를 0보다 크게 지정해야 함
⑥ InputMismatchException : Scanner를 사용하여 데이터 입력 시 입력 받는 자료형이 불일치할 경우 발생
① Exception이 발생한 곳에서 직접 처리
< try ~ catch문을 이용한 예외 처리 >
--------------------------------------------------------------------------
- try : Exception 발생할 가능성이 있는 코드를 안에 기술
→ 수행 중 예외 발생시, 예외 객체가 던져짐(throw)- catch : try 구문에서 Exception 발생 시 해당하는 Exception에 대한 처리 기술. 여러개의 Exception 처리가 가능하나 Exception간의 상속 관계를 고려해야 한다
→ try에서 던져진 예외를 잡아서 처리, 예외를 잡아 처리했기 때문에 프로그램이 종료되지 않음- finally : Exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술.
중간에 return문을 만나도 finally구문은 실행되지만 System.exit()를 만나면 무조건 프로그램 종료-------------------------------------------------------------------------- public void method() { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("입력 : "); String str = br.readLine(); System.out.println("입력된 문자열 : " + str); } catch (IOException e) { e.printStackTrace(); } } -------------------------------------------------------------- public void method() { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("입력 : "); String str = br.readLine(); System.out.println("입력된 문자열 : " + str); } catch (IOException e) { e.printStackTrace(); } finally { try { System.out.println("BufferedReader 반환"); br.close(); } catch (IOException e) { e.printStackTrace(); } } }
② Exception 처리를 호출한 메소드에게 위임
public static void main(String[] args){ ThrowsTest tt = new ThrowsTest(); try{ tt.methodA(); } catch (IOException e) { e.printStackTrace(); } finally { System.out.println("프로그램 종료"); } } ↑ public void methodA() throws IOException{ methodB(); } ↑ public void methodB() throws IOException{ methodC(); } ↑ public void methodC() throws IOException{ throw ne IOException(); // IOException 강제 발생 }
public class UserException extends Exception{ public UserException() {} public UserException(String msg) { super(msg); } } --------------------------------------------------------------------- public class UserExceptionController { public void method() throws UserException{ throw new UserException("사용자정의 예외발생"); } } --------------------------------------------------------------------- public class Run { public static void main(String[] args) { UserExceptionController uc = new UserExceptionController(); try { uc.method(); } catch(UserException e) { System.out.println(e.getMessage()); } } }