예외처리 try-catch
by #독개#예외처리
예외 ≠ 에러
에러 : 수습이 불가능한 오류
예외 : 수습이 가능한 오류
에러
컴파일 에러 : 컴파일 할 때 발생하는 에러
런타임 에러: 실행도중에 발생하는 에러
예외
RuntimeException : 프로그래머의 실수로 발생
Exception : 사용자 실수 나 외적인 요인에 의해 발생
try - catch 흐름
- try에서 예외가 발생하면 처리할 catch를 찾음
- 처음 catch부터 순차적으로 찾으며 일치하는 catch가 없으면 처리되지 않음
- Exception은 모든 종류의 예외를 처리할 수 있음 (예외 최상위)
- 처음 catch부터 순차적으로 찾으며 일치하는 catch있으면 오류해결 모든오류 해결후 빠져나감
- Exception은 반드시 마지막 catch에 있어야함 왜냐면 위에 있으면 Exception이 다 받기때문이지
package src;
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try {
int a = input.nextInt(); //try에서는 오류발생하면 아래거 실행하는게아니라 바로 catch로 간다
System.out.println("KK"); //출력이안되는것을 확인
}
catch (Exception e) {
e.printStackTrace();
}
}
}
d
java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at src.main.main(main.java:14)
printStackTrace(); 를하면 Exception종류가 뭐인지 나온다. 이종류를 보고 분할이가능 하다
여기선 InputMismatchException 에러가 뜨는걸 확인했지 그럼
우리는 저위에 에러를 이걸로 뽑아내서 구분 처리 할수 있게 되는거지.
중첩 try-catch 가능
중첩 if처럼 try안에 try가 또가능하다
try {
예외가 발생 가능성이있는 코드
try {
위에 조건 통과하고 또 조건거는거 }
package src;
import java.util.InputMismatchException;
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try {
int a = input.nextInt();
try {
a = 0 / a;
}
catch (ArithmeticException e) {
System.out.println("0으로 나눌수 없음");
}
}
catch (InputMismatchException e) {
System.out.println("숫자만 입력 가능");
}
}
}
try - catch - finally
- 예외 발생과 관계없이 실행되어야 하는 코드
- try catch 문의 맨 마지막에 위치 해야함
메소드에 예외 선언
보통 메소드를 선언할때 예외처리를 다해둔다. 그래야 호출만 하면되니까
그런데 메소드만들때 예외처리 해주기 귀찮아서 호출하는사람이 직접해~ 라고 던져줄때 씀
메소드를 선언 할때 throws Exception 해두면 이건 호출한 메소드에서 try-catch로 예외 처리를 해줘야한다.
public class test {
public static void meth1() throws Exception {
throw new Exception(); //강제로 예외발생 시키는 코드 (호출시 에러발생시켜 테스트를 위해서작성)
}
public static void main(String[] args) {
try {
test.meth1(); // 호출할때 예외처리를 해준다
}
catch(Exception e) {
System.out.println("대처법");
}
}
}
'🔥 프로그래밍 학습 > JAVA' 카테고리의 다른 글
쓰레드 (0) | 2020.06.02 |
---|---|
File 처리/입출력스트림 (0) | 2020.05.25 |
추상화 클래스 , 인터페이스 (0) | 2020.05.25 |
자바 분석할것2 (0) | 2020.05.25 |
JAVA 클래스와 메소드2 (상속) (0) | 2020.05.24 |
블로그의 정보
독한 개발자
#독개#