독개

예외처리 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

블로그의 정보

독한 개발자

#독개#

활동하기