강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바
  • 메소드
  • 알고리즘 공부
  • 메서드
  • til
  • 백준
  • CSS 속성
  • CSS 박스 크기 설정

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇

강이의 개발블로그

[Java] 예외(Exception)
Langauge/Java-basic

[Java] 예외(Exception)

2022. 8. 14. 20:39

예외와 에러

  • 에러 : 하드웨어의 고장 또는 JVM 자체에서 발생하는 오류를 의미하며, 개발자가 대처할 수 없는 오류를 의미한다.
  • 예외 : 개발자가 프로그램을 작성하는 과정에서의 실수 또는 사용자의 잘못된 조작에 의해 발생하는 오류를 의미하며, 개발자가 대처할 수 있는 오류를 의미한다.
  • 에러는 개발자가 해결할 수 있는 방법이 없지만 예외는 예외 처리(Exception Handling)을 통해 에러를 피하여 프로그램이 비정상적으로 종료되는 것을 막을 수 있다.

예외 클래스의 구조

Error 클래스와 Exception 클래스의 상속 구조

출처 : https://itmining.tistory.com/9

  • 예외의 최상위 클래스는 Exception 클래스, 에러의 최상위 클래스는 Erorr 클래스다.
  • 두 개의 클래스 모두 Throwable 클래스를 상속하고 있다.
    • 에러와 예외 모두 Throwable의 기능을 사용할 수 있다.

예외 클래스의 상속 구조

  • 예외의 최상위 클래스 Exception 클래스는 다시 일반 예외(Checked Exception)와 실행 예외(Unchecked Exception)으로 나뉜다.
    • 일반 예외 클래스 : 컴파일 전에 예외가 발생할 문법이 있는지 검사하며, 예외 처리를 하지 않으면 문법 오류가 발생한다.
    • 실행 예외 클래스 : 실행할 때 발생하는 예외로, 예외 처리를 하지 않아도 문법 오류가 발생하지 않고 프로그램이 실행되지만, 예외가 발생하는 코드를 만나면 예외를 발생시키며 프로그램이 강제 종료된다.

일반 예외 클래스(Checked Exception) 종류

Interrupted Exception

  • 일정 시간 해당 쓰레드를 일시정지 상태로 만드는 Thread.sleep() 메서드를 사용할 때 발생하는 예외

ClassNotFoundException

  • 클래스 파일명을 인자로 넣어 해당하는 클래스를 반환하여 동적으로 메모리에 로딩하는 Class.forName("패키지명.클래스명") 메서드를 사용할 때 해당 클래스가 존재하지 않을 때 ClassNotFoundException이 발생하기 때문에 반드시 예외 처리를 해야한다.

IOException

  • 콘솔이나 파일에 데이터를 쓰거나 읽을 때 발생한다.

FileNotFoundException

  • 파일을 읽어올 때 해당 경로에 파일이 존재하지 않으면 발생한다.

CloneNotSupportedException

  • Object.clone() 메서드를 이용하여 객체를 복사할 때 Clonable 인터페이스를 상속하지 않은 클래스를 복사하려고 한다면 CloneNotSupportedException이 발생한다.

실행 예외 클래스(Runtime Exception / Unchecked Exception) 종류

문법 오류가 발생하지 않아 예외 처리를 하지 않아도 컴파일과 프로그램 실행이 가능하지만, 실행 중 예외를 발생시키는 코드를 만나면 프로그램이 강제 종료된다.

ArithmeticException

  • 연산 자체가 불가능할 때 발생하는 예외
public class Main {
    public static void main(String[] args) {
        System.out.println(1 / 0);
    }
}

ClassCastException

  • 불가능한 다운 캐스팅을 진행했을 때 발생하는 예외
public class Main {
    public static void main(String[] args) {
        A a1 = new B();
        A a2 = new A();

        System.out.println("A a1 -> B a1 = " + (a1 instanceof B));
        a1 = (B) a1;
        System.out.println("A a2 -> B a2 = " + (a2 instanceof B));
        a2 = (B) a2;
    }
}
class A {}
class B extends A {}

ArrayIndexOutOfBoundsException

  • 해당 배열의 범위가 아닌 인덱스를 사용했을 때 발생하는 예외
public class Main {
    
    public static void main(String[] args) {

        int[] arr = new int[]{1,2,3,4,5}; // 배열의 길이 5, 사용 가능 범위 0 ~ 4
        System.out.println(arr[0]); // 사용 가능 범위
        System.out.println(arr[1]); // 사용 가능 범위
        System.out.println(arr[5]); // 사용 가능 범위 벗어남

    }
}

NumberFormatException

  • Integer.parseInt("문자열") 또는 Double.parseDouble("문자열")을 이용하여 문자열을 숫자로 변환할 때 해당 문자열이 숫자 형식이 아닐 경우 발생하는 예외
public class Main {

    public static void main(String[] args) {

        String str1 = "1234";
        String str2 = "12.123";
        String str3 = "천이백삼십사";

        System.out.println(Integer.parseInt(str1));
        System.out.println(Double.parseDouble(str2));
        System.out.println(Integer.parseInt(str3)); // 예외 발생

    }
}

NullPointerException

  • 참조 변수가 실제 객체를 가리키고 있지 않은 상황에서 참조 변수의 참조값을 호출할 때 발생하는 예외
public class Main {

    public static void main(String[] args) {

        String str1 = null;

        System.out.println(str1); // str1 안에 들어 있는 것을 호출하기 때문에 예외 발생 X
        System.out.println(str1.charAt(0)); // 예외 발생 O
    }
}

저작자표시 (새창열림)

'Langauge > Java-basic' 카테고리의 다른 글

[Java] 예외처리(Exception Handling)  (0) 2022.08.17
[Java] 익명 이너 클래스(Anonymous Class)  (0) 2022.08.11
[Java] 이너 인터페이스(중첩 인터페이스)  (0) 2022.08.11
[Java] 인터페이스란?  (0) 2022.08.07
[Java] 추상 클래스와 추상 메소드 (abstract 제어자)  (0) 2022.08.05
    'Langauge/Java-basic' 카테고리의 다른 글
    • [Java] 예외처리(Exception Handling)
    • [Java] 익명 이너 클래스(Anonymous Class)
    • [Java] 이너 인터페이스(중첩 인터페이스)
    • [Java] 인터페이스란?
    강잇
    강잇
    학습한 내용을 정리 및 기록하는 블로그

    티스토리툴바