Error와 Exception
🏁 Error
종류
자바에서는 실행시 2가지 형태의 오류가 발생할 수 있다.
🏁 예외 처리하기
try{
코드1
코드2
....
}catch(Exception클래스명1 변수명1){
Exception을 처리하는 코드
}
< 실제 적용 코드 / 이 코드에서 예외는 10을 0으로 나눌 때 발생한다 >
public class Exception1 {
public static void main(String[] args) {
ExceptionObj1 exobj = new ExceptionObj1();
int value = exobj.divide(10, 0); // 예외 발생 0으로 나눌 수 없다.
System.out.println("value = " + value);
}
}
class ExceptionObj1{
public int divide(int i, int k){
int value = 0;
try {
value = i / k;// Exception 발생 -> try catch 문으로 예외 처리하기
}catch(ArithmeticException ex){ // 예외 발생하면 JVM이 예외 인스턴스를 발생하기 때문에
System.out.println("0으로 나눌 수 없어요");// 해당 예외 인스턴스 객체를 catch로 받는다.
System.out.println(ex.toString());
}
return value;
}
}
🏁 예외 떠넘기기(throws)
리턴타임 메소드명 ( 아규먼트 리스트 ) throws Exception클래스명1 {
코드1
}
< 적용 코드 >
public class Exception1 {
public static void main(String[] args) {
ExceptionObj1 exobj = new ExceptionObj1();
try {
int value = exobj.divide(10, 0); // 예외 발생 0으로 나눌 수 없다.
System.out.println(value);
}catch(ArithmeticException ex){
System.out.println(" 0으로 나눌 수 없습니다 ");
}
}
class ExceptionObj1{
// divide를 호출한 곳에 예외 처리를 떠넘긴다.
public int divide(int i, int k) throws ArithmeticException{
int value = 0;
value = i / k;
return value;
}
}
RuntimeException과 Checked Exception
🏁 RuntimeException
🏁 Exception
Exception을 만들 때는 RuntimeException을 상속받아 만드는 것이 좋다.
다중 Exception 처리
public static void main(String[] args) {
// {4,2}로 바꿔서 실행해보고, int[] array = null로도 바꿔본다.
int[] array ={4,0};
int[] value = null;
try{
value[0]=array[0]/array[1];
}catch(ArrayIndexOutOfBoundsException aiob){
System.out.println(aiob.toString());
}catch(ArithmeticException ae){// 위의 두개는 왜 Exception으로 한번에 안했어??
System.out.println(ae.toString());// 개발자(나)가 위의 두개는 오류를 특별히 해결해주고 싶어서
}catch(Exception ex){
System.out.println(ex);// nullExcpetion은 Exception 상속 받아서 이렇게 써도 됨
}
}
사용자 정의 Exception
사용자가 이용할 때 더 편리하다.