-에러

: 하드웨어의 오작동 또는 고장으로 인해 응용프로그램 실행 오루가 발생한은 것

- 예외 

: 개발자가 이런 에러를 대체할 방법을 만들은 것, 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류

 


 1. 일반 예외 

컴파일러 체크 예외라고도 하며, 자바소스를 컴파일 하는 과정에서 예외처리 코드가 필요한지 검사하기 때문               -> Exceiption 상속받고 runtime Exception 은 상속x

 2. 실행 예외 

컴파일 하는 과정에서 예외 처리 코드를 검사하지 않는 예외 -> runtimeException 상속 받음
 -> 컴파일 시 예외처리를 확인하는 차이 뿐, 둘 다 예외처리가 필요함
 자바에서는 예외를 클래스에서 관리, JVM은 프로그램 실행 도중에 예외 발생하면, 해당 예외 클래스로 객체 생성         -> java.lang.Exception

 

 


 



- 실행 예외 :

자바 컴파일러가 체크하지 않기 때문에 오로지 개발자의 경험에 의해서 예외 처리 코드 삽입 -> 안할 시 종료

 1. NullPointerException

 : 객체 참조가 없는 상태, 즉 null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.) 사용했을 때 발생

2. ArrayIndexOutOfBoundsException : 배열에서 인덱스 범위 초과하여 사용할 경우 실행 예외임

3. NumberFormatException : 문자열을 숫자로 변환하는 중 숫자로 변환 할 수 없는 값 있을 시 발생 
     문자열 숫자로 변환 방법 : Integer.parseInt(String s) -> 주어진 문자열을 정수로, Double.parseDouble(String s)             -> 주어진 문자열을 실수로
     여기서 Integer, Double 은 Wrapper 클래스라고 함

4. ClassCastException : 타입변환은 상위 클래스와 하위 클래스 간에 발생하고 구현클래스와 인터페이스 간도 발생함
 이런 관계 아니라면 클래스는 다른 클래스로 타입 변환 불가 -> 강제로 변환 시 발생

 


- 예외 처리 코드 

: 프로그램에서 예외 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드
 try {예외 발생 가능 코드} catch { 예외 처리 } finally { 항상 실행 / 생략 가능}

- 다중 catch 

: try 블록 내부는 다양한 종류의 예외 발생 가능 -> catch (예외 e){} catch(예외 e){} 다중 생성 가능 -> 예외 발생 시 catch로 넘어가기 때문에 여러개 catch해도 하나만 실행

- catch 순서 

: 여러개 작성 할 때 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 함
즉, try{} 안에 예외 발생 할 것 같은 문장들 작성 시 위에 있는 명령의 예외 처리를 catch로 제일 먼저 작성하기 -> 왜나면 실행 순서대로 예외 되면 바로 catch 불러버리기 때문

- 멀티 catch 

: catch에서 여러개의 예외를 처리할 수 있도록 multi catch기능을 추가함
ex) catch(예외처리 | 예외처리){} -> ()안에 동일하게 처리하고 싶은 예외 적으면 됨

 

- 자동 리소스 닫기 

: try - with - resources 사용하면 예외 발생 여부와 상관없이 사용했던 리스소 객체(각종 입출력 스트림, 서버 소켓, 소켓, 각종 채널)의 close() 메소드 호출해서 안전하게 리소스 닫음
* 리소스 : 데이터를 읽고 쓰는 객체
       ex) try(FileInputStream fis = new FileInputStream("file.txt")){
                  ......
            }catch(IOException e){...} -> 예외 발생 시 자동으로 FileinputStream에서 close() 메소드 호출


        ex) implements AutoCloseable{.... public void close() throws Exception {...}}

 


- 예외 떠넘기기 

 : 메소드를 호출한 곳으로 예외 떠넘길 때. throws -> 메소드 선언부 끝에 작성되어 메소드를 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할
  ex) 리턴 타입  메소드명(매개변수,...) throws Exception {..} -> 모든 예외 넘김

- 사용자 정의 예외 

: 어플리케이션 예외(어플리케이션 서비스와 관련된 예외)는 개발자가 직접 정의해서 만들어야 해서
 컴파일러가 체크하는 일반 예외로 선언할 수 있고 컴파일러가 체크하지 않는 실행 예외로 선언 할 수 있다.
  ex) public class xxxException extends [Exception | RuntimeException]{} (클래스) 
      public void method() throws xxxException {throw new xxxExeption("message")};  (메소드) 

       -> 메소드 호출 한 곳에서는 try-catch 문 써야함


- 예외 정보 얻기 : e.getMessage() : 예외 코드 리턴, e.printStackTrace() :

 

 

-<이것이 자바다1>. 한빛 미디 

'JAVA' 카테고리의 다른 글

멀티 스레드_1  (0) 2019.06.18
기본 API 클래스  (0) 2019.06.18
중첩 클래스 예제  (0) 2019.06.18
중첩 클래스  (0) 2019.06.18
인터페이스 예제  (0) 2019.06.18

+ Recent posts