1.예외(exception)
정상적인 경우에는 일어나지 않지만 발생할 수 있는 문제이다
오류가 아니라 프로그램 실행 중 발생할 수 있는 예상 가능한 문제로, 특정 상황에서 발생하며, 일반적으로 사용자가 처리할 수 있는 문제이다.
예외는 try-catch 블록을 사용하여 프로그래머가 직접 처리할 수 있습니다.
2.오류 (Error)
프로그램의 실행 중 발생하는 심각한 문제로, 일반적으로 시스템의 상태나 환경 문제와 관련됩니다. 이러한 오류는 프로그램이 정상적으로 작동할 수 없게 만듭니다.
일반적으로 이러한 오류는 프로그래밍적으로 처리할 수 없으며, 사용자에게 보고되거나 프로그램이 종료됩니다.
3. throw
예외가 발생하면 throw문을 통하여 예외 객체를 생성할수있다.
,를 통해 여러 예외 던질수있음
3-1. 예외의 전달
- 예외 발생: throw 문을 사용하여 예외를 발생시킵니다. 이때, 해당 메서드는 즉시 종료되고 예외 객체가 생성됩니다.
- 예외 객체 생성: 예외 객체는 발생한 예외의 종류와 관련된 정보를 담고 있으며, 이를 통해 어떤 종류의 예외가 발생했는지를 알 수 있습니다.
- 상위 메서드로 전달: 생성된 예외 객체는 호출한 메서드로 전달됩니다. 만약 호출한 메서드가 예외를 처리하지 않으면, 이 예외는 다시 상위 메서드로 전달됩니다.
- 예외 처리: 예외가 발생한 메서드와 그 상위 메서드에서 try-catch 블록을 통해 예외를 처리할 수 있습니다. 예외를 처리하면 프로그램은 계속해서 실행됩니다.(main 에서도 처리받지않으면 JVM이 받고 프로그램 종료됨)
4.catch
try-catch 문을 이용하여 예외를 잡아줄수있다.
try 절 내에서 예외가 발생되면 바로 catch 절로 이동함
5.finally
예외 발생 여부와 관계없이 무조건 실행되는 블록으로 try-catch와 함께 사용할수있다.
6.처리불가능예외
메모리 부족과 같은 자원 고갈, JVM 자체 오류
=> Error로 오류처리해버림....
7.처리가능예외
7-1.unchecked 예외
코드 수정을 통해 발생하지 않도록 할 수 있는 예외
실행 시간에 발생
null 참조변수사용, 인덱스오류 같은 프로그램을 수정해서 고칠수있는 예외
RuntimeException 클래스로 처리한다.
예외가 발생할 가능성이 있는 코드에서 명시적으로 처리할 필요는 없지만, 처리하는 것이 좋다.
public class UncheckedExceptionExample {
public static void main(String[] args) {
String str = null;
try {
System.out.println(str.length()); // NullPointerException 발생
} catch (NullPointerException e) {
System.out.println("NullPointerException 발생: " + e.getMessage());
}
}
}
7-2.checked 예외
코드 수정을 통해 발생하지 않도록 할 수 없는 예외
사용자실수같은 외적인 요인으로 발생 => 조치후 실행하면 정상작동
(입력오류, 용지부족)
checked예외는 직접처리, 공표(throw)안하면 문법오류이다.
(파일읽기같은거에 무조건 checked 예외처리를 해줘야함)
IOException같은 RuntimeException 이 아닌 모든 예외
public class IOExceptionExample {
public static void main(String[] args) throws IOException { // IOException을 throws
FileReader reader = new FileReader("nonexistent.txt"); // FileNotFoundException 발생 가능
int data = reader.read(); // IOException 발생 가능
reader.close();
}
}
8.상속에서 예외
상속할때 다른종류의 checked 예외를 추가로 발생시킬수없다.
class Parent {
// 부모 클래스 메서드
void doSomething() throws IOException { // Checked 예외
// 메서드 내용
System.out.println("Parent method");
}
}
class Child extends Parent {
// 자식 클래스에서 부모의 메서드를 오버라이드
@Override
void doSomething() throws IOException { // 같은 Checked 예외를 선언
// 메서드 내용
System.out.println("Child method");
}
// 새로운 Checked 예외를 추가할 수 없음
// void doSomething() throws FileNotFoundException {} // 오류 발생: 상위 메서드에서 선언된 예외와 다름
}
9.assert
조건식을 검사하여 조건식이 false이면 AssertionError 예외한다.
assert (amount > 0)
'Language > JAVA' 카테고리의 다른 글
[JAVA] 빈 패턴(Bean Pattern) (0) | 2024.10.28 |
---|---|
[JAVA] 상속,구체화 (0) | 2024.10.14 |
[JAVA] 자바 객체,클래스 (0) | 2024.10.14 |