728x90
프로그램의 비정상적인 종료를 방지하고, 정상적인 실행 상태를 유지하기 위하여 수행
컴파일 에러
컴파일할 때 발생하는 에러
주로 세미콜론 생략, 오탈자, 잘못된 자료형, 잘못된 포맷 등 문법적인 문제를 가리키는 신택스(syntax) 오류로부터 발생한다
아래 코드는 for문을 닫는 괄호가 없다
public class ErrorTest {
public static void main(String[] args) {
int i;
for (i= 1; i<= 5; i++ {
System.out.println(i);
}
}
}
런타임 에러
프로그램이 실행될 때 만나는 에러
public class RuntimeErrorTest {
public static void main(String[] args) {
System.out.println(4 * 4);
System.out.println(4 / 0); // 예외 발생
}
}
//출력값
16
Exception in thread "main" java.lang.ArithmeticException: / by zero
at RuntimeErrorTest.main(RuntimeErrorTest.java:5)
에러와 예외
넓은 의미에서 프로그램 실행 시 발생할 수 있는 모든 문제를 에러라 부르지만,
자바에서는 에러(error)와 예외(exception)로 구분한다.
에러 : 복구하기 어려운 수준의 심각한 오류 ex) 메모리 부족, 스택오버플로우
예외 : 잘못된 사용 또는 코딩으로 인한 상대적으로 미약한 수준의 오류로서 코드 수정 등을 통해 수습이 가능한 오류
try - catch문
모든 예외를 받을 수 있는 Exception 클래스 하나로도 처리가 가능하며
각기 다른 종류의 예외를 하나 이상의 catch블록을 사용하여 처리할 수 있음
기본 구조
try {
// 예외가 발생할 가능성이 있는 코드를 삽입
}
catch (ExceptionType1 e1) {
// ExceptionType1 유형의 예외 발생 시 실행할 코드
}
catch (ExceptionType2 e2) {
// ExceptionType2 유형의 예외 발생 시 실행할 코드
}
finally {
// finally 블럭은 없어도 됨
// 예외 발생 여부와 상관없이 항상 실행
}
예제
public class RuntimeExceptionTest {
public static void main(String[] args) {
try {
System.out.println("[소문자 알파벳을 대문자로 출력하는 프로그램]");
printMyName(null); // (1) 예외 발생
printMyName("abc"); // 이 코드는 실행되지 않고 catch 문으로 이동
}
catch (ArithmeticException e) {
System.out.println("ArithmeticException 발생!"); // (2) 첫 번째 catch문
}
catch (NullPointerException e) { // (3) 두 번째 catch문
System.out.println("NullPointerException 발생!");
System.out.println("e.getMessage: " + e.getMessage()); // (4) 예외 정보를 얻는 방법 - 1
System.out.println("e.toString: " + e.toString()); // (4) 예외 정보를 얻는 방법 - 2
e.printStackTrace(); // (4) 예외 정보를 얻는 방법 - 3
}
finally {
System.out.println("[프로그램 종료]"); // (5) finally문
}
}
static void printMyName(String str) {
String upperCaseAlphabet = str.toUpperCase();
System.out.println(upperCaseAlphabet);
}
}
// 출력값
[소문자 알파벳을 대문자로 출력하는 프로그램]
NullPointerException 발생!
e.getMessage: null
e.toString: java.lang.NullPointerException
[프로그램 종료]
java.lang.NullPointerException
at RuntimeExceptionTest.printMyName(RuntimeExceptionTest.java:20)
at RuntimeExceptionTest.main(RuntimeExceptionTest.java:7)
728x90
'개발일지 > Java' 카테고리의 다른 글
Java List<E>, ArrayList, LinkedList (1) | 2022.09.14 |
---|---|
Java 컬렉션 프레임워크 (Collection Framework) (0) | 2022.09.14 |
Java 제네릭 (Generic) (0) | 2022.09.14 |
Java 열거형 (Enum) (0) | 2022.09.13 |
Java 추상화 (Abstraction) (0) | 2022.09.12 |