예외
예외와 에러의 차이점
예외는 연산오류, 숫자 포맷 오류 등과 같이 개발자가 해결할 수 있는 오류를 말한다. 여기서 해결은 차선책을 선택하는 것을 말한다.
에러는 자바 가상 머신(JVM)에서 발생하는 오류로 개발자가 해결할 수 없는 오류를 말한다.
예외와 에러의 최상위 클래스
- 자바에서 예외의 최상위 클래스는 'Exception' 클래스이다.
- 에러의 최상위 클래스는
Error 이다.
- 둘다 Throwable 클래스를 상속하고 있다.
예외 클래스의 상속 구조
Throwable 클래스를 상속받은 Exception 클래스는 다시 일반 예외 클래스와 실행 예외 클래스로 나뉜다.
Exception 클래스에게 직접 상속받은 예외 클래스들이 처리하는 일반 예외는 컴파일 전에 예외 발생 문법을 검사하며, 예외 처리를 하지 않으면 문법 오류가 발생한다.
RuntimeException 클래스를 상속받은 예외 클래스들이 처리하는 실행 예외는 컴파일 전이 아니라 실행할 때 발생하는 예외로, 예외 처리를 따로 하지 않더라도 문법 오류가 발생하지 않는다.
일반 예외 클래스
일반 예외
InterruptedException
- thread.sleep(시간)메서드는 일정상태동안 쓰레드를 일시정지상태로 만드는 Thread 클래스의 정적 메서드다. 이메서드는 일반 예외가 발생할 수 있기 때문에 반드시 예외처리를 해야 한다.
ClassNotFoundException
- Class.forName(패키지명.클래스명)은 클래스를 동적으로 메모리에 로딩하는 메서드로, 해당 클래스의 정보를 담고 있는 Class 타입의 객체를 리턴한다. 만일 클래스를 메모리에 동적으로 로딩하는 과정에서 해당 클래스가 존재하지 않을 때 발생하므로 예외처리를 반드시 포함해야 한다.
IOException
- 자바 입출력 부분에서 자주보게 될 일반 예외로 쓰거나 읽을 때 발생하며 반드시 IOException에 대한 예외처리를 해야 한다.
FileNotFoundException
- 파일을 읽을 때 해당 경로에 파일이 없을 때 발생 실제 파일의 유무와 상관없이 발생하므로 예외처리가 꼭 필요
CloneNotSupportException
- Object 클래스의 clone()함수를 사용할 시, 복사의 대상이 Clonable 인터페이스를 상속하지 않을 때 발생
실행예외
ArithmeticException
- 연산자체가 불가능할때 발생하는 실행 예외
- 수학에서 존재할수없는 대표적인 연산은 분모가 0일때
ClassCastException
- 상속관계에 있는 클래스간의 업캐스팅은 항상 가능하지만, 다운 캐스팅 가능할 수도, 불가능할 수도 있다고 했다.
- 다운캐스팅이 불가능한 상황에서 다운 캐스팅을 시도할때 발생
ArrayIndexOutOfBoundsException
NullPointerException
- 참조변수가 실제 객체를 가리키고 있지 않은 상황에서 필드나 메서드를 호출할때 발생