// 문자열의 숫자변환에는 아무런 문제 없다.
String year1 = "1980";
int age1 = 2024 - Integer.parseInt(year1) + 1;
System.out.println(age1);
// 숫자로 변환할 수 없으므로 애러가 발생한다.
String year2 = "뭘까요?";
int age2 = 2024 - Integer.parseInt(year2) + 1;
// 오류 -> 프로그램이 이 행에서 비정상적 종료된다.
System.out.println(age2);
System.out.println("------프로그램 종료---------");
// 변수의 배열의 선언과 지정
int[] arr = new int[3];
for (int i = 0; i<5; i++) {
if (i<arr.length) { // 조건추가 : 배열의 길이까지 한정
arr[i] = i;
// 오류 -> 할당 범위를 벗어남, i 가 3일 때 에러가 발생한다.
System.out.println(i);
}
}
컴파일 에러
런타임 에러
런타임에러는 프로그램 자체의 구조적인 문제로인한 논리적 오류와
자바 가상머신 자체의 문제로 인한 오류 그리고 예외가 있다.
논리오류
자바가상머신 자체오류
예외상황(Exception)
프로그램 실행 중에 발생할 수 있는 예기치 않은 사건으로, 프로그래머의
노력으로 처리할 수 있다
자바 가상머신은 프로그램 실행중에 예외가 발생하면 관련된 예외 클래스로부터 예외 객체를 생성하여 프로그램에서 지정된 예외 처리 구문으로 넘긴다.
예외가 발생하면 프로그램에 지정된 예외 처리 구문이 자바 가상머신에 의해 호출되고, 이때 전달되는 예외 객체를 넘겨받아 적절한 처리를 수행한다.
-NullPointException :
java에서는 try ~ catch ~ finally 구문을 통해
프로그래머가 예외 상황에 대응할 수 있도록 하고 있다.
try{
...기본적으로 실행되는 부분
} catch(예외클래스이름 객체이름){
...try 블록에서 예외가 발생한 경우
이 곳으로 제어가 넘어온다...
} finally{
...예외 상황의 발생 여부에 상관 없이
무조건 실행되는 부분
finally 블록은 생략 가능하다...
}
try 블록 실행도중 catch에서 명시한 예외 클래스에
해당하는 런타임 에러가 발생하면, try블록을 즉시 중단하고
catch블록이 실행 된 후, finally 블록이 실행된다
예외가 발생하지 않을 경우 try 블록 종료 후
finally 블록이 실행된다.
} catch(NumberFormatException e) {
....
} catch (ArrayIndexOutOfBoundsException e){
....
} catch(Exception e){
// 모든 예외상황에 일괄처리
}