// 문자열 <-> 기본 자료형 int x = Integer.parseInt("100"); // recommended, parse+자료형, 정적 메소드, 리턴 타입이 int임 int z = Integer.valueOf("200"); // return type Integer unboxing } }
Errors / Exceptions
오류 (Errors)
메모리 부족 또는 프로그램 실행이 꼬이는 경우.
더이상 어떻게 프로그램을 복구해야 할지 알 수 없다.
프로그램의 문제를 해겷하여 해결
예외 (Exceptions)
오류(Error)에 비해서 심각도가 낮고, 프로그램의 정상적인 흐름만 방해
파일을 읽으려 했으나 해당 파일이 없는경우
네트워크 연결 유실
문제 상황을 처리하는 로직을 구현하여, 런타임에서 자연스럽게 해결 가능
예외 처리 (Excpetion handling)
예외가 발생 했을 경우, 이 상황을 ‘감지’하고 ‘처리’하는 코드
try ~ catch, throws, throw, finally 키워드들을 이용
Throwable 클래스를 상속하는 자식클래스들로 이러한 문제를 해결
Throwable Class
Throwable 클래스는 Exception 과 Error 클래스에 의해 상속
Exception
Checked Exceptions: 예외 처리되지 않으면 컴파일이 되지 않은 예외 (file I/O)
Exception Class를 상속하고 있으면 Checked Exception
try ~ catch를 통해 예외를 꼭 처리해 주어야 컴파일이 된다.
Unchecked Exceptions: 예외 처리되지 않아도 컴파일이 되는 예외
RuntimeException 클래스를 상속하고 있으면 Unchecked Exception
try ~ catch를 작성하지 않더라도 빌드/실행 가능
ArrayIndexOutOfBoundsExceptions
ArithmeticException
Error: 프로그램이 복구 불가능한 상황
메소드
설명
public String getMessage()
발생한 예외에 대한 메세지를 반환
public String getLocalizedMessage()
오버라이드하여 추가 메세지 제공 (오버라이드하지 않으면 getMessage()와 동일)
public Throwable getCause()
예외의 원인이 되는 Throwable 객체 반환
public void printStackTrace()
예외가 발생된 메소드가 호출될 때의 Method call stack을 출력
try ~ catch statement
1 2 3 4 5 6 7
try { // 예외가 발생할 수 있는 코드 // 예외가 발생할 경우 예외 객체를 던짐 (throw) } catch (Exception e) { // 던져진 예외를 받음 (catch) // Exception class 및 그 자식 클래스를 사용 // 예외 상황을 처리해야 하는 코드 }
try { // 아주 예민한 내용이 실행되는 부분 // 특정 catch 구문에 선택되는 조건문 // 다형성에 의해서 결정 된다. // 즉, catch 하고 있는 클래스의 자식 클래스의 객체면 catch 가능 // catch 하는 순서가 중요 -> 위에서 부터 자식 객체인 것이 좋다. } catch (ArithmeticException e) {
} catch (FileAlreadyExistsException e) {
} catch (EOFException e) {
} catch (IOException e) {
} catch (Exception e) { // 나머지 모든 Exception 모두 catch // 모든 Exception 객체의 조상 // 권장하지 않음, 무책임한 catch 이다. }
try ~ catch ~ finally
try 구문 실행 중에 어떤 일이 발생해도 반드시 실행되어야 하는 구문은 finally block에 작성
try 구문 내에 return 문이 있는 경우에도 finally 블록은 실행됨
try 구문 내에서 접근한 System 자원을 안전하게 복구하기 위해 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
try { file = new FileInputStream("a.txt"); file.read(); } catch (IOException e) { System.out.println("파일 처리 실패"); } finally { System.out.println("파이널리"); if (file != null) { // file 읽기에 실패한 경우 파일을 닫아준다. try { file.close(); } catch (IOException e) { System.out.println("앗!... 아아..."); } } }
try ~ with ~ resource statement
Java1.7에서 추가된 기능
AutoClosable interface를 구현하는 리소스에만 사용가능
1 2 3 4 5
try (FileInputStream file1 = new FileInputStream("a.txt")) { file1.read(); } catch (IOException e) { System.out.println("파일 처리 실패"); }