package exam19;
public class ExeptionHandlingExample {
/**
* 문자열의 길이를 출력하는 메서드
* - data가 null이면 NullPointerException 발생
*/
public static void printLenth(String data){
int result = data.length();
System.out.println("문자 수 : "+ result);
}
public static void main(String[] args) {
System.out.println("프로그램 시작\\n");
printLenth("ThisIsJava");
/**
* 문자열이 null일 경우
* 매개변수로 null을 전달
* NullPointerException 발생
*/
printLenth(null);
System.out.println("프로그램 종료");
}
}
● 이번 예제에서 printLength()메소드는 문자열의 수를 리턴 ● 12 라인에서 문자열 대신 null을 입력 --> 5라인에서 NullPointerException 발생 ● NullPointerException은 실행 예외이므로 컴파일 시 예외 처리 코드가 없어도 되지만 실행 중에 발생하면 프로그램은 즉시 종료.
package exam19;
public class ExceptionHnadlingExample2 {
/**
* 문자열의 길이를 출력하는 메소드
* - data가 null이면 NullPointerException 발생
* - 예외 정보 얻는 3가지 방법 포함
*/
public static void printLength(String data){
try {
int result = data.length();
System.out.println("문자 수 : "+ result);
} catch (NullPointerException e) {
System.out.println("예외 메시지 : "+ e.getMessage());
System.out.println("예외 원인 : "+ e.getCause());
System.out.println("예외 클래스 : "+ e.getClass());
System.out.println(e.toString());
e.printStackTrace();
} finally {
System.out.println("마무리 실행\\n");
}
}
public static void main(String[] args){
System.out.println("프로그램 시작\\n");
printLength("ThisIsJava");
printLength(null);
System.out.println("프로그램 종료");
}
}
예외 정보 출력 방식
java.lang.NullPointerException: 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(Excepti onHandlingExample2.java:6) at ch11.sec02.exam01.ExceptionHandlingExample2.main(ExceptionHan dlingExample2.java:20)
class java.lang.NullPointerException
여러개의 catch를 사용가능 (발생하는 예외마다 처리가능)
package exam19;
public class ExceptionHandlingExample3 {
public static void main(String[] args) {
String array[] = {"100", "1oo"};
for (int i = 0; i <array.length; i++)
{
try {
int value = Integer.parseInt(array[i]);
System.out.println("array[" + i + "] " + value);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열의 인덱스가 초과됨 " + e.getMessage());
}
catch(Exception e){
System.out.println("실행에 문제가 있습니다.");
}
}
}
}
### 결과 ###
array[0] 100
실행에 문제가 있습니다.