충분히 쌓여가는
11.2 예외 처리 코드 본문
예외 처리 코드
예외가 발생했을 때 프로그램의 갑작스러운 종료를 막고 정상 실행을 유지할 수 있도록 처리하는 코드
try-catch-finally 블록으로 구성됨
try 블록에서 작성한 코드가 예외 없이 정상 실행되면
catch 블록은 실행되지 않고 연이어 finally 블록이 실행된다
finally 블록
예외 발생 여부와 상관없이 finally 블록은 항상 실행된다
try 블록과 catch 블록에서 return문(메소드 종료)을 사용하더라도 finally 블록은 항상 실행된다
finally 블록은 옵션으로 생략 가능하다
예제
printLength(): 문자열의 수 return
package ch11.sec02.exam01;
public class ExceptionHandlingExample2 {
public static void printLength(String data) {
try {
int result = data.length(); // data가 null일 경우 NullPointerException
System.out.println("문자 수: " + result);
} catch(NullPointerException e) {
System.out.println(e.getMessage());
System.out.println(e.toString());
e.printStackTrace();
} finally {
System.out.println("[마무리 실행]\n");
}
}
public static void main(String[] args) {
System.out.println("[프로그램 시작]\n");
printLength("Java");
printLength(null);
System.out.println("[프로그램 종료]");
}
}
[프로그램 시작]
문자 수: 4
[마무리 실행]
Cannot invoke "String.length()" because "data" is null
java.lang.NullPointerException: Cannot invoke "String.length()" because "data" is null
java.lang.NullPointerException: Cannot invoke "String.length()" because "data" is null
at ch11.sec02.exam01.ExceptionHandlingExample2.printLength(ExceptionHandlingExample2.java:6)
at ch11.sec02.exam01.ExceptionHandlingExample2.main(ExceptionHandlingExample2.java:20)
[마무리 실행]
[프로그램 종료]
e.getMessage()
예외가 발생한 이유만 return
e.toString()
예외의 종류도 return
e.printStackTrace()
예외가 어디서 발생했는지 추적한 내용까지도 출력
예제
Class.forName("패키지...클래스")
: ClassPath 위치에서 주어진 클래스를 찾는 코드, 찾지 못했을 경우 ClassNotFoundException이라는 일반 예외 발생함
package ch11.sec02.exam02;
public class ExceptionHandlingExample {
public static void main(String[] args) {
try {
Class.forName("java.lang.String");
System.out.println("java.lang.String 클래스가 존재합니다");
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println();
try {
Class.forName("java.lang.String2");
System.out.println("java.lang.String2 클래스가 존재합니다");
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
}
java.lang.String 클래스가 존재합니다
java.lang.ClassNotFoundException: java.lang.String2
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:375)
at ch11.sec02.exam02.ExceptionHandlingExample.main(ExceptionHandlingExample.java:15)
'이것이 자바다 > 11 예외 처리' 카테고리의 다른 글
11.6 사용자 정의 예외 (0) | 2024.04.08 |
---|---|
11.5 예외 떠넘기기 - throws (0) | 2024.04.08 |
11.3 예외 종류에 따른 처리 - 예외 순서, 다중 catch (0) | 2024.04.08 |
11.1 예외와 예외 클래스 (0) | 2024.04.08 |
이것이 자바다 11장 확인문제 (0) | 2024.02.05 |