[16] Exception과 Error
- Exception
: code level 예외처리를 통해 해결할 수 있는 문제이다.
: 자바의 모든 예외와 관련해서 관련 클래스가 존재한다.
ex1) NumberFormatException
: Integer.parselnt(문자열)에서,
-> 문자열이 숫자 모양의 문자열이 아니면 발생한다.
ex2) ArraylndexOutOfBoundsException
: 생성된 배열보다 더 많이 사용할 경우 발생한다.
ex3) ArithmeticException
: 숫자를 0으로 나누면 발생한다.
- 예외처리의 방법
-
throws를 사용하여 회피하기
public void method()throws 예외클래스 {
예외 발생
} -
try~catch를 사용하여 적극적으로 처리하기
try { // (1) 게이트 치기
예외 발생
} catch (예외클래스) { // (2) 예외 클래스 지정
예외 메세지 출력 // (3) 메세지 출력
} finally { (4)
예외가 발생과 관계없이 무조건 실행되는 영역
close()
}
- 예외처리 예제
public class ExceptionExam {
public static void add() {
int a = 10;
int b = 0;
a = a/b; // ArithmeticException
}
public static void main(String[] args) {
add();
}
}
- 결과값
Exception in thread "main" java.lang.ArithmeticException: / by zero
at kosta.basic.ExceptionExam.add(ExceptionExam.java:8)
at kosta.basic.ExceptionExam.main(ExceptionExam.java:13)
- throws를 사용한 해결
public class ExceptionExam {
public static void add()throws Exception {
int a = 10;
int b = 0;
a = a/b; // ArithmeticException
}
public static void main(String[] args) {
add(); // Unhandled exception type Exception
}
}
- 결과값
오류가 뜬다.
- try~catch를 사용하여 적극적으로 처리하기
public class ExceptionExam {
public static void add()throws Exception {
int a = 10;
int b = 0;
a = a/b; // ArithmeticException
}
public static void main(String[] args) {
try { // 게이트 치기
add(); // 예외 발생
} catch (Exception e) { // 예외 클래스 지정
// e.printStackTrace(); // 예외 메세지를 출력
}
System.out.println("Done!!");
}
}
- 결과값
Done!!
-> e.printStackTrace(); 이 소스코드를 넣으면, 예외 메세지가 나온다.
-> e는 변수이다. 대부분 Exception의 약자로 e로 쓰인다.
- 예외의 발생 여부에 따른 실행 순서
package kosta.basic;
public class ExceptionExam {
public static void add()throws Exception {
int a = 10;
int b = 0;
a = a/b; // ArithmeticException
}
public static void main(String[] args) {
try { // 게이트 치기
System.out.println("a"); // 먼저 실행되어 출력된다. -> a
add(); // 예외 발생
System.out.println("b");
} catch (Exception e) { // 예외 클래스 지정
System.out.println("c"); // a에서 catch문으로 가서 -> c
// e.printStackTrace(); // 예외 메세지를 출력
} finally {
System.out.println("d");
}
System.out.println("Done!!"); // c에서 done!!으로 가서 출력하고 나온다.
// 출력결과를 나열하라.
// a,c,d,Done!!
}
}
- 결과값
a
c
d
Done!!
- 인위적으로 예외를 발생켜서 코드를 만들기
public class ExceptionExam {
public static void add()throws Exception {
int a = 10;
int b = 0;
a = a/b; // ArithmeticException
}
// 은행거래로직 -> 인출 : 잔액 - 출금 : 잔액 < 출금 -> 인출(x) -> 인위적으로 예외를 발생
// -> throw new Exception를 사용한다.
// 자바 문법상 문제는 없다. 그래서 예외를 시켜야한다.
public static void multi()throws Exception { // throws Exception 예외 회피
int a = 10;
int b = 10;
if (a == b) { // 내 프로그램에서 a와 b가 절대로 같으면 안될 때
throw new Exception("같은 값"); // 이것만 쓰면, 예외처리가 뜬다.
}
}
public static void main(String[] args) {
try {
multi();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 결과값
java.lang.Exception: 같은 값
at kosta.basic.ExceptionExam.multi(ExceptionExam.java:19)
at kosta.basic.ExceptionExam.main(ExceptionExam.java:26)
- 자바 API를 예외처리하는 방법
1. sleep()
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
2. readLine()
try {
br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
- 처리방법
: Surround With try/catch를 사용한다.
Author And Source
이 문제에 관하여([16] Exception과 Error), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sanggeun/Exception과-Error저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)