728x90
반응형
오류 종류
컴파일 에러: 컴파일 시 생기는 오류 (system.out.print => s의 소문자 같은 컴파일 원인 오류)
논리적 에러: 실행은 되지만 의도와 다르게 동작되는 오류
런타임 에러: 시스템을 실행할 때 생기는 오류 (int[] => 빈 공백을 사용할 시 오류등이 런타임 에러)
- 런타임에러의 종류
- 에러(error): 수습 불가능한 심각한 오류; out of memory error; OOME
- 예외(exception): 코드에 의해 수습될 수 있는 다소 미약한 오류
- 예외처리
- 정의: 오류를 대비한 코드를 작성
- 목적: 비정상적인 프로그램 종료를 막고 오류 대비 코드로 재실행
예외처리 시 try - catch 문 사용
try {
//예외가 발생할 수도 있는 코드
}
catch (Exception e) {
//예외 발생시 실행할 코드 순서대로
}
catch (Exception2 e) {
}
catch (Exception3 e) {
}
예외처리 시 exception은 모든 exception 클래스의 조상, 따라서 모든 에러 포함
Arithmetic 같이 특별한 에러를 지정하면 그 에러에 맞게 출력되는 코드 다양화 가능
public class TryCatch {
public static void main(String[] args) {
int[] i = {1,2,3};
try {
System.out.println(1);
System.out.println(2);
System.out.println(i[3]); // Exception의 all error
System.out.println(0/0); //Arithmetic error
}
catch (ArithmeticException e) {
System.out.println(3 + " Arithmetic errors");
}
catch (Exception e) {
System.out.println(3 + " all errors");
}
}
}
printStackTrace() & getMessage() 함수
printStackTrace(): 예외발생 당시의 호출스택(call stack)에 있던 메서드 정보와 예외 메시지를 화면에 출력
getMesasge(): 발생한 예외 클래스의 인스턴스에 저장된 메세지를 얻을 수 있음
예외가 발생되면 예외 객체가 생성되고 그 스택에서 얻은 예외 메세지를 출력한다 - printStackTrace()
발생된 에러 메세지에서 원인을 도출할 수 있는데 그 함수가 - getMessage()
출력문:
1
2
3 Arithmetic errors
예외 메세지: / by zero
java.lang.ArithmeticException: / by zero at Lecture.TryCatch.main(TryCatch.java:9)
4
package Lecture;
public class TryCatch {
public static void main(String[] args) {
int[] i = {1,2,3};
try {
System.out.println(1);
System.out.println(2);
System.out.println(0/0); //Arithmetic error
System.out.println(i[3]); // Exception의 all error
}
catch (ArithmeticException e) {
if(e instanceof ArithmeticException){
//instanceof로 ArithmeticException이 e로 형변환 가능한지 확인
System.out.println(3 + " Arithmetic errors");
System.out.println("예외 메세지: "+e.getMessage());
e.printStackTrace();
}
}
catch (Exception e) {
System.out.println(3 + " all errors");
}
System.out.println(4);
}
}
멀티 catch 블럭
exception의 내용이 같을 때 아래와 같이 catch 구문을 묶어줄 수 있음
- 연산자 | 사용
- 다만 부모 자식관계의 exception은 멀티 catch 블럭 불가
- 부모 exception만 선언해주면 자식 exception은 자동으로 예외처리 가능하기 때문에 컴파일 에러
// exception의 내용이 같을 때 catch 구문을 묶어줄 수 있음
catch (ArrayIndexOutOfBoundsException | ClassCastException e) {
e.printStackTrace();
}
728x90
반응형
'Java > 자바의정석 기초편' 카테고리의 다른 글
자바의 정석 8장 (22일차) - 사용자 정의 예외처리 & 예외 되던지기 & 연결된 예외 처리(Chained Exception) (0) | 2022.02.13 |
---|---|
자바의 정석 8장 (21일차) - 메서드에 예외 선언 & finally (0) | 2022.02.10 |
자바의 정석 7장 (19일차) - 7장 연습문제 (객체지향 2) (0) | 2022.02.08 |
자바의 정석 7장 (18일차) - 인터페이스 static & default (0) | 2022.02.06 |
자바의 정석 7장 (17일차) - 인터페이스를 이용한 다형성 및 장점 (0) | 2022.02.04 |