= 예외(Exception)
= 예외의 종류 =
일반 예외 (Exception)(=컨파일러 체크 예외)
자바 소스 컴파일 과정에서 예외 처리 코드 검사 없다면 컴파일 오류 발생
실행 예외 (RuntimeException)
실행 예외는 컴파일 과정 중 예외처리 코드를 검사하지 않는 예외
+) 예외 처리란?
한마디로, 예외 처리라는 의미이다.
프로그램에서 문제가 될 만한 부분을 예상해서, "문제가 발생했으면 이렇게 처리해~"라고 친절히 안내해주는 것!
= Exception Class =
어쨋든, 두 과정은 예외 처리가 필요하며, 자바에서는 예외를 클래스로 관리합니다.
(+ RuntimeException은 편의상 RE라고 지칭하겠다.)
JVM이 프로그램 실행 도중, 예외 발생 시에 예외 클래스를 객체로 생성합니다.
그리고 나서 예외 처리코드에서 예외 객체를 이용 할 수 있도록 해줍니다.
모든 예외 클래스들은 Exception을 상속받습니다.
추가적인 내용은,
일반적인 예외는 RE를 상속을 받지 않으며, 실행 예외는 RE를 상속받는다.
Exception을 직접 상속받았는지, 중간에 RE가 껴있는 상태에서 상속을 받았는지의 차이이다.
= 실행 예외의 종류 (423p)=
1) NullPointerException
객체가 없는 상태에서 객체를 사용하려 했더니, 발생하는 예외이다.
null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)을 사용했을 때 발생한다.
public static void main(String[] args) {
Object o1 = null;
method(o1);
}
public static void method(Object o) {
o.hashCode();
}
}
2) ArrayIndexOutOfBoundsException
아래에 적혀있는 예시는, arr.length 미만으로 돌아야하는데,
arr.length까지 돌아서 3,1,6나오고 그 이후에 excepion이 나온다.
public static void main(String[] args) {
int[] arr = {3, 1, 6};
for (int i = 0; i <= arr.length; i++) {
System.out.println(arr[i]);
}
}
}
3) NumberFormatException
s1값 출력은 200으로 잘 나오는데, 10a0같은 경우는 java.lang.NumberFormatException가 나오게 된다.
public static void main(String[] args) {
String s1 = "100";
System.out.println(dbl(s1));
String s2 = "10a0";
System.out.println(dbl(s2));
}
public static int dbl(String s) {
return Integer.parseInt(s) * 2;
}
}
+) Integer.parseInt(String s)
나중에 많이 볼 static 함수!
숫자형의 문자열을 인자 값으로 받으면, 해당 값을 10진수의 Integer형으로 반환해준다!
4) ClassCastException
기본적으로 타입 변환은 상위클래스 하위클래스가 있어야한다.
당연히 구현 클래스와 인터페이스 사이에서도 캐스팅이 된다.
public class Dog extends Animal {}
public class Cat extends Animal {}
< MainClass >
static void main(String[] args) {
Animal animal = new Dog();
Cat cat = (Cat) cat;
}
}
ClassCasting을 발생시키지 않으려면, instanceof를 사용해서 미리 한 번 확인하는 것이 좋다.
public class Dog extends Animal {}
public class Cat extends Animal {}
< MainClass >
static void main(String[] args) {
Animal animal = new Dog();
if(animal instanceof Dog){
Dog dog = (Dog)animal;
} else if(animal instanceof Cat){
Cat cat = (Cat) animal;
}
}
다음 포스팅에는 예외 처리 코드와 예외 종류에 따른 처리 코드를 다뤄봅시다.
'수업 복습하기 > Java' 카테고리의 다른 글
Day 16 - 예외(Exception) (2) (0) | 2021.09.10 |
---|---|
Day 15 - 인터페이스(Interface) (0) | 2021.09.08 |
Day 14 - 추상 (abstract) (0) | 2021.09.06 |
Day 13 - Final (변수, 클래스, 메소드) (7) | 2021.09.06 |
Day 13 - 정적 멤버 (Static) (0) | 2021.09.06 |