예외처리
- 에러 : 심각한 오류
- 예외 : 덜 심각한 오류(객체)
try ~ catch ~ finally
예외처리문
try{
예외가 발생할 수 있는 문장
}
catch(예외클래스명 객체명){
예외 발생시 수행할 문장
}
...
finally{
예외 발생 유무에 상관없이 무조건 실행할 문장
}
예외라는 틀(class)을 잡아놓은 객체가 있다
Exception class
- 모든 예외들의 부모클래스
- 모든 예외들은 Exception class의 자식클래스이기 때문에 자동으로 업캐스팅 upcasting 이 이루어짐
- 어떤 예외가 발생하든지 Exception 타입으로 잡을 수 있다.
- 어떤 예외가 발생할지 모를 떄 찾아내는 역할
try{
예외가 발생할 수 있는 문장
}
catch(Exception e){
System.out.println(e); //예외처리 클래스를 출력
}
throws
예외의 간단한 형태, 예외처리가 이미 구현되 있을 때 보통 사용
- 메소드 선언부 내부에서 예외 발생시 무시(떠넘기기)
- 예외처리를 메소드 호출한 곳에서 하겠다는 뜻
- 메소드가 호출되었을 때, 예외처리를 해야하는 상황에서 호출당한 곳으로 예외처리를 하겠다는 뜻
- 절대 처리용으로 사용하지 않는다.
리턴타입 메소드명() throws 예외1, 예외2, ...{
예외1, 예외2, ... 무시하는 구역
}
throw
예외를 한번 더 처리하기 위해서 사용
- 예외를 강제로 발생시키는 것
throw new 발생시킬예외 생성자();
throws throw 사용한 형변환 예제 Ex)
public class ExceptionTest{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String strNum1 = sc.nextLine();
String strNum2 = sc.nextLine();
try{
Test test = new Test(strNum1, strNum2);
test.sum();
}
catch(NumberFormatException Ne){
System.out.println("숫자를 입력해주세요");
}
sc.close();
}
}
class Test{
String a;
String b;
public Test(String a, String b) {
this.a = a;
this.b = b;
}
public void sum() throws NumberFormatException{
try{
int sum = Integer.parseInt(a) + Integer.parseInt(b);
//문자로 받은 a,b를 숫자로 변환하여 더한다.
System.out.println("문자로 입력받은 " +a+ "와 " +b+ "의 합은" +sum+ "입니다." );
}
catch(NumberFormatException Ne){
System.out.println("숫자형 문자가 아닙니다. 형변환을 할 수 없습니다.");
throw Ne;
}
}
}
결과:
a
s
숫자형 문자가 아닙니다. 형변환을 할 수 없습니다.
숫자를 입력해주세요
'Java > Java(base)' 카테고리의 다른 글
[Java] @Annotation, 어노테이션 (0) | 2021.12.01 |
---|---|
[Java] Java API(Application Programming Interface) (0) | 2021.12.01 |
[Java] 내부 클래스 Inner class , 익명 클래스 Anonymous Inner class (0) | 2021.12.01 |
[Java] 인터페이스 interface, 다중 상속, 마크 인터페이스 (0) | 2021.12.01 |
[Java] 추상클래스 abstract class, final (0) | 2021.12.01 |