<컴파일 오류>
- 문법에 맞지 않게 작성된 코드
- 컴파일 할 때 발견
<예외>
- 오동작이나 결과에 악영향을 미칠 수 있는 실행 중 발생한 코드
- 정수를 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 의 구현객체
'Java > 기초' 카테고리의 다른 글
[java기초] 업캐스팅과 다운캐스팅 (0) | 2021.07.07 |
---|---|
[java 기초] 입출력 스트림과 파일 입출력 (0) | 2021.07.05 |
[java기초] 기본패키지 (0) | 2021.07.05 |
[java 기초] 제네릭과 컬렉션 (0) | 2021.07.04 |
[java기초] 제네릭 프로그래밍 (0) | 2021.07.02 |
댓글