2023.07.31 - [코드문제풀이] - [자바] 11399번 ATM
2023.07.31 - [코드문제풀이] - [자바] 1934번 최소공배수
2023.07.31 - [코드문제풀이] - [자바] 1436번 영화감독 숌
2023.07.31 - [코드문제풀이] - [자바] 2231번 분해합
2023.07.31 - [코드문제풀이] - [자바] 2798번 블랙잭
1. 자바의 예외
예외란?
- 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
- 예외가 발생하면 프로그램은 종료
- 예외처리를 하면 종료하지 않고 정상 실행 상태가 유지되도록 한다.
- 예외는 클래스로 관리한다.
- java.lang.Exception
예외의 종류
- 일반 예외(Checked Exception)
- 컴파일 체크 예외 - 예외 처리 코드가 없으면 컴파일 오류가 발생하므로 꼭 처리 해야하는 검사형 예외이다.
- IOException, SQLException등
- 실행 예외(Runtime Exception)
- 컴파일 하는 과정에서 예외 코드를 검사하지 않는 예외
- 컴파일 시 예외 처리를 하지 않아도 컴파일 할 수 있는 비 검사형 예외
- JVM에서 해당하는 실행 예외 객체를 생성한다.
- 실행 예외 종류는 밑에 서술한다.
예외 처리 방법
- 예외 복구
- 예외 상황을 파악하고 문제를 해결하여 정상 상태로 돌려놓는 방법
- 예외 회피
- throws 키워드를 통해 직접 처리하지 않고 호출한 쪽으로 넘기는 방법
- 예외 전환
- 회피와 비슷하게 throws로 예외처리를 하지만 그냥 넘기지 않고 적합한 의미를 가진 예외로 변경하여 넘긴다.
자주 발생 하는 예외
- NullPointerException(NPE)
- 객체 참조가 없는 상태 → Null 값을 가지고 있는 . (도트)를 사용할 때 발생한다.
- 객체가 없는 상태에서 객체를 사용하려 할 때 발생한다.
- ArrayIndexOutOfBoundsException
- 배열을 다룰때 index의 범위를 초과해서 사용하는 경우 발생한다.
- NumberFormatException
- 문자열로 있는 데이터를 숫자로 바꿀때 숫자로 변환될 수 없는 문자열이 오면 발생한다.
- ClassCastException
- 타입변환(Casting)은 상위 클래스와 하위 클래스간에 발생 하고 구현 클래스와 인터페이스 간에도 발생한다.
- 위와 같은 관계가 아니라면 변환 할 수 없는데 억지도 시도할 경우 발생 한다.
예외 처리 코드
1. try ~ catch ~ finally
- 예시 코드
try {
// 예외가 발생할 가능성이 있는 코드를 넣는다.
}
catch (예외 클래스 e){
예외 처리; // 예외 처리를 한다.
}
finally {
// 무슨 일이 있어도 항상 실행
}
2. 다중 catch문
- catch 문을 여러개 작성해도 먼저 발생한 catch 블록만 실행된다.
- 상위 예외 클래스가 하위 예외 클래스보다 밑에 위치하게 작성해야 한다.
- 예시 코드
try {
// 예외가 발생할 가능성이 있는 코드를 넣는다.
}
catch (예외 클래스 1 e){
예외 처리; // 예외 처리를 한다.
}
catch (예외 클래스 2 e){
예외 처리; // 예외 처리를 한다.
}
3. 예외 넘기기
- 메소드를 호출한 곳으로 예외처리를 넘긴다.
- throws 키워드를 사용한다.
- 예시 코드
public void method1(){
try {
method2(); // throws가 붙은 method2는 반드시 이렇게 try문 안에서 호출되어야 함.
// method2가 떠넘긴 예외를 아래 catch문을 통해 처리해 주고 있다.
}
catch (ClassNotFoundException e1) {
System.out.println("클래스가 존재하지 않음.");
}
public void method2() throws ClassNotFoundException {
Class clazz = Class.forName("java.lang.String22");
}
참고한 사이트
https://dreamcoding.tistory.com/70
https://chanhuiseok.github.io/posts/java-3/
https://jhyonhyon.tistory.com/66
https://butter-shower.tistory.com/87
'스터디일지 > JAVA' 카테고리의 다른 글
[2023.08.14] 자바 1주차 문법 강의 (0) | 2023.08.14 |
---|---|
[2023.08.01] 자바 객체 지향 프로그래밍 (0) | 2023.08.01 |
[2023.07.29] StringTokenizer의 메소드 / Math 함수 / Greedy Algorithm (탐욕 알고리즘) (0) | 2023.07.29 |
[2023.07.28] 요세푸스 순열 / PriorityQueue / Heap (0) | 2023.07.28 |
[2023.07.27] BufferedWriter / Character Class (0) | 2023.07.27 |