에러(error) -> 컴퓨터 하드웨어 (하드,램,cpu등등) 관련 고장으로 응용 프로그램 실행 오류가 발생 하는 것
예외(exception) -> 그 외 프로그램 자체에서 발생 하는 오류
예외(exception)
- 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
- 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지될 수 있음
- 예외 발생 가능성이 높은 코드를 컴파일할 때 컴파일러는 예외 처리 유무를 확인한다.
예외와 예외 클래스
1. 일반 예외 (exception)
-
컴파일러 체크 예외 라고도 한다.
-
자바 소스 컴파일 과정에서 해당 예외 처리 코드가 있는지 검사한다.
-
모든 예외 클래스는 java.lang.Exception클래스를 상속 받는다.
2. 실행 예외 (runtime exception)
-
컴파일러 넌 체크 예외 라고도 한다.
-
실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사한지 않는다.
-
클래스 상속관계에서 부모에 java.lang.RuntimeException이 있다면 실행 예외 클래스 이다.
-
실행 예외는 개발자의 경험에 의해서 예외 처리 코드 작성해야한다.
3. NullPointException
-
가장 빈번하게 발행하는 실행 예외 이다.
-
객체 참조가 없는 상태의 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생 한다.
4. ArrayIndexOutOfBoundsException
-
배열에서 인덱스 범위를 초과할 경우 발생한다.
5. NumberFormatException
-
숫자로 변환할 수 없는 문자가 포함되어 있는 경우 발생 한다.
예시1) NullPointerException
위와 같이 하는 경우 오류가 생기므로, null값을 다른 것을 대체해서 넣으면 오류가 생기지 않는다.
NullPointerException 오류가 난 경우 도트(.) 앞을 확인 하면 된다.
아래와 같이 null 대신 혼공자 라고 기입하니 오류가 없어진 것을 확인 할 수 있다.
예시2) ArrayIndexOutOfBoundsException
현재 인덱스는 0,1,2 까지 밖에 없는데 3을 주면 아래처럼 오류가 난다.
오류를 업애려면, 배열의 인덱스 값을 맞추면된다.
예시3) ArrayIndexOutOfBoundsException2
public class ArrayIndexOutOfBoundsException {
public static void main(String[] args) {
if (args.length == 2) {
String data1 = args[0];
String data2 = args[1];
System.out.println(data1);
System.out.println(data2);
} else {
System.out.println("두 개의 실행 값이 필요하다");
}
}
}
이클립스에서 Run-RunConfigurations 메뉴를 선택한후, Arguments 탭의 Program arguments 입력란에 아래처럼 두개의 매개값을 입력하고 실행하면 예외가 발생하지 않는다.
예외 처리 코드는 아니지만, 예외를 발생하지 않게 하는 코드이다.
예시4) NumberFormatException
public class NumberFormatExceptionEx {
public static void main(String[] args) {
String data1 = "100";
String data2 = "a100";
int value1 = Integer.parseInt(data1);
System.out.println(value1);
//a는 숫자로 변환 할수 없어서 (NumberFormatException.java:68)오류가 발생된다.
int value2 = Integer.parseInt(data2);
System.out.println(value2);
}
}
6. ClassCastException
-
상위 및 하위 클래스 간에 발생하고 구현 클래스와 인터페이스 간에도 발생한다.
-
위 관계가 아닌 경우 클래스는 다른 타입으로 변환할 수 없기 떄문에 ClassCastException이 발생한다.
예시5) ClassCastException
Dog객체를 매개값으로 주어서 Cat 타입으로 변환 할 수 없기때문에 오류가 발생.
public class ClassCastExceptionEx {
public static void main(String[] args) {
Dog dog = new Dog();
Animal animal = dog;
Dog dog2 = (Dog) animal;
Cat cat = new Cat();
Animal animal2 = dog;
Cat cat2 = (Cat) animal2;
}
}
class Animal{ }
class Dog extends Animal{ }
class Cat extends Animal{ }
※용어 정리
-
예외: 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생 하는 프로그램 오류이다.
-
예외 클래스: 자바에서는 예외를 클래스로 관리하며, JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성하여 예외 처리 코드에서 예외 객체를 이용할 수 있도록 해준다. 모든 예외 클래스는 java.lang.Exception 클래스의 상속을 받는다.
-
일반 예외: 컴파일러 체크 예외라고도 하며, 프로그램 실행 시 예외가 발생할 가능성이 높기때문에 자바 소스를 컴파일 하는 과정에서 해당 예외 처리 코드가 있는지 검사한다. 예외 처리 코드가 없다면 컴파일 에러가 발생한다.
-
실행 예외: 컴파일러 넌 체크 예외라고도 하며, 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않는다.
본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
'Work & Study > JAVA (& 혼공자Java)' 카테고리의 다른 글
자바(Java) - 예외 종류에 따른 처리 코드 (0) | 2020.12.07 |
---|---|
자바(Java) - 예외 처리 (0) | 2020.12.07 |
자바(Java) - 익명 객체2 (익명 구현 객체 생성) (0) | 2020.11.24 |
자바(Java) - 익명 객체1 (익명 자식 객체 생성) (0) | 2020.11.24 |
자바(Java) - 중첩 인터페이스 (0) | 2020.11.23 |