본문 바로가기
Java/기초

[java 기초] 예외처리

by Meaning_ 2021. 7. 6.
728x90
반응형

<컴파일 오류>

 

- 문법에 맞지 않게 작성된 코드

- 컴파일 할 때 발견

 

<예외>

 

- 오동작이나 결과에 악영향을 미칠 수 있는 실행 중 발생한 코드

 

- 정수를 0으로 나누는 경우

 

- 배열보다 큰 인덱스로 배열의 원소를 접근하는 경우

 

- 존재하지 않는 파일을 읽으려고 한 경우

 

- 정수 입력을 기다리는 코드가 실행되고 있을 때, 문자가 입력된 경우

 

- 자바에서 예외처리 가능

= 예외 발생-> 자바 플랫폼 인지->응용프로그램에서 전달 

 

<예외 처리>

 

- try-catch-finally문 사용 (finally 블록은 생략 가능)

 

try{

 예외가 발생할 가능성이 있는 실행문

}

catch (처리할 예외 타입 선언){

 

}

 

finally{

}

 

* System.exit(0); 을 쓰면 프로그램을 나갈 수 있음 

 

<자주 발생하는 예외>

 

예외타입 예외 발생 경우 패키지
ArithmeticException 정수를 0으로 나눌 때 발생  java.lang
NullPointerException null 레퍼런스를 참조할 때 발생 java.lang
ClassCastException 변환할 수 없는 타입으로 객체를 변환할 때 발생 java.lang
OutOfMemoryError 메모리가 부족한 경우 발생 java.lang
ArrayIndexOutOfBoundsException 배열의 범위를 벗어난 접근 시 발생 java.lang
IllegalArguementException 잘못된 인자 전달시 발생 java.lang
IOException 입출력 동작 실패 또는 인터럽트 시 발생 java.io
NumberForamtException 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환 시 발생 java.lang
InputMismatchException Scanner 클래스의 nextInt()를 호출하야여 정수로 입력받고자 하였지만, 사용자가 'a'등과 같이 문자를 입력한 경우 java.util

 

<예외의 종류>

 

예외는 Throwable 클래스의 자식객체

 

일반예외

 

- 컴파일러는 발생할 가능성을 발견하면 컴파일 오류 발생

- 개발자는 예외처리 코드를 반드시 추가

- 대표적인 일반예외의 예

 

 

실행예외

 

- 예외가 발생하면 JVM은 해당하는 실행예외 객체 생성

- 실행예외는 컴파일러가 예외처리 여부를 확인하지 않음. 개발자가 예외처리코드의 추가여부를 결정

- 대표적인 실행예외의 예 

 

<예외 처리하는 방법>

 

예외 잡아 처리하기

 

- 예외가 발생한 시점에 처리하는 것

- try-catch 코드 사용 

- catch 블록에 포함된 처리코드를 '핸들러'라고 부름

- 예외 발생 --> try 블록에서 넘어온 예외 객체를 catch블록에서 처리 -->try 블록의 나머지 실행문은 실행x

 

예외 떠넘기기 

 

- 메서드에서 발생한 예외를 내부에서 처리하기가 부담스러울 때는 throws 키워드를 사용해 예외를 상위 코드 블록으로  양도 가능 

- Throwable 클래스의 주요 메소드 

 

public void write(String filenmae)

    throws IOExcpetion,ReflectiveOperationException{

}

 

메서드 설명
public String getMessage() Throwable 객체의 자세한 메세지 반환 
public String toString() Throwable 객체의 간단한 메세지 반환
public void printStackTrace() Throwable 객체와 추적 정보를 콘솔뷰에 출력 

 

try ~ with ~resource 문

 

- try블록에서 파일등과 같은 리소스 사용한다면 try블록 실행한 후 자원 반환 필요

- 리소스를 관리하는 코드를 추가하면 가독성도 떨어지고, 개발자도 번거롭다

- JDK 7부터는 예외 발생 여부와 상관없이 사용한 리소스를 자동 반납하는 수단 제공. 단, 리소스는 AutoCloseable 의 구현객체

 

728x90
반응형

댓글