1. Throwable 클래스
- Java의 모든 예외는 java.lang.Throwable 클래스를 상속합니다.
- Throwable은 예외처리를 하기 위한 최상위 클래스입니다.
- 직접 사용되지 않고 상속받은 자식 클래스들이 예외처리에 사용됩니다.
2. RuntimeException과 IOException의 차이
: 예외 상황을 처리하는데 강제성을 가지고 있는가 없는가 하는 것
RumtimeException의 경우
: 프로그램 실행 도중 발생하는 예외로 프로그래머의 잘못이 발생했다는 것
Ex) IndexOutOfBoundsException, NullPointerException, Type...
예외 처리하는데 강제성을 가지고 있지 않다.
IOException의 경우
: 런타임 예외는 언제 에러가 발생하는지 알 수 없기 때문ㅇ네 처리를 하지 않아도 되지만,
IOException은 예외가 발생할 시점과 종류를 알 수 있기 때문에 반드시 처리해야 한다.(강제성)
상위 클래스
import java.io.IOException;
public class ObjectA {
public void print(){
System.out.println("ObjectA print()");
};
public void error1(){
System.out.println("ObjectA error1()");
}
public void printIO() throws IOException{
System.out.println("ObjectA printIO()");
}
public void error2() throws IOException{
System.out.println("ObjectA error2()");
}
public void printRun() throws RuntimeException{
System.out.println("ObjectA printRun()");
}
public void error3() throws RuntimeException{
System.out.println("ObjectA error3()");
}
public void error4() throws IOException{
System.out.println("ObjectA error4()");
}
}
하위 클래스
import java.io.IOException;
public class ObjectB extends ObjectA{
/**
* RuntimeException과 IOException의 차이
* 예외 상황을 처리하는데 강제성을 가지고 있는가 없는가 하는 것
*
* RumtimeException의 경우
* 프로그램 실행 도중 발생하는 예외로 프로그래머의 잘못이 발생했다는 것
* IndexOutOfBoundsException, NullPointerException, Type...
* 예외 처리하는데 강제성을 가지고 있지 않다.
*
* IOException의 경우
* 런타임 예외는 언제 에러가 발생하는지 알 수 없기 때문ㅇ네 처리를 하지 않아도 되지만,
* IOException은 예외가 발생할 시점과 종류를 알 수 있기 때문에 반드시 처리해야 한다.(강제성)
*/
/**
* 1. 상위클래스의 메소드에 throws가 없을 경우
* IOException은 throws 줄에서 에러가 발생
* RuntimeException은 정상동작
* @throws RuntimeException
*/
@Override
public void print() throws RuntimeException{
super.print();
System.out.println("ObjectB print()");
}
@Override
public void error1() throws IOException{ // 여기서 throws IOException 시 상위클래스에 정의되지 않아 에러
super.error1();
System.out.println("ObjectB error1()");
}
/**
* 2. 상위클래스의 메소드에 IOException이 선언되어 있을 경우
* IOException은 정상동작
* RuntimeException의 경우 상위 클래스의 메소드의 정의가 달라서 super호출 시 에러
* @throws IOException
*/
@Override
public void printIO() throws IOException {
super.printIO();
System.out.println("ObjectB printIO()");
}
@Override
public void error2() throws RuntimeException {
super.error2(); // throws RuntimeException시 상위클래스에 IO가 선언되어 여기서 에러
System.out.println("ObjectB printIO()");
}
/**
* 3. 상위 클래스의 메소드에 RuntimeException이 선언되어 있을 경우
* RuntimeException은 정상동작
* IOException은 throws에서 에러 발생
* @throws RuntimeException
*/
@Override
public void printRun() throws RuntimeException {
super.printRun();
System.out.println("ObjectB printRun()");
}
@Override
public void error3() throws IOException {
super.printRun();
System.out.println("ObjectB error3()");
}
/**
* 4. 상위 클래스의 메소드에 IOException이 선언되어 있을 경우
* RumtimeException이 정상동작
* @throws RuntimeException
*/
@Override
public void error4() throws RuntimeException {
super.printRun();
System.out.println("ObjectB error4()");
}
}
'OOP > Java' 카테고리의 다른 글
쓰레드(Thread)와 멀티쓰레드(Multi-Thread) (0) | 2024.06.14 |
---|---|
Overloading) 오버로딩 시 생성자 에러(Constructor Class is already defined in Class) (0) | 2024.04.22 |
Java 정규 표현식(Regular Expression) (0) | 2023.11.27 |
Optional이란? (0) | 2023.11.24 |
Java JUnit vs Spring JUnit (0) | 2022.12.20 |