seong
예외처리 Try - Catch 본문
예외처리 (Try- Catch)
- try문 안에서 예외(오류)가 발생하면 catch가 실행된다.
- finally은 예외의 발생 여부와 상관 없이 무조건 실행된다.(생략 가능)
예외 처리 할때 크게 두가지 경우가 있다.
1. 컴파일시 발생하는 예외
- 컴파일시 발생하는 예외는 코드에 빨간줄로 실시간으로 확인이 가능 하다.
2. 런타임시 발생하는 예외
- 런타임시 발생하는 예외는 코드에 에러는 나지 않고 제대로 실행은 했지만 콘솔창에서 나타나는 에러이다.
예제1
동물 s1 = new 강아지 () 현재 메모리에는 말티즈가 존재 하지 않는다.
강아지 s2 = (말티즈) s1 말티즈가 존재 하지 않지만 가르키려고 한다.
그래서 다운캐스팅시 오류가 발생하고, 아래의 for문이 실행 되지 못한다.
위의 코드를 try-catch로 감싸보자
문제 생긴 코드를 try부분에 넣어 실행 하고
try가 실패하면 catch를 실행하고 빠져 나와서 아래 for문을 실행한다.
예제2
1. 강아지 s2객체를 try문 밖에서 null로 초기화
2. try로 s2 = 말티즈를 실행했다 -> 현재 메모리에는 말티즈가 없기 때문에 실패
3. catch로 가서 s2 = new 말티즈()로 새로 말티즈를 생성해주었다.
강아지가 출력된 이유 s2 = new 말티즈() 를 하게 되면 강아지 s2 = new 말티즈()가 된다.
힙 메모리엔 말티즈, 강아지가 생성되고 강아지를 가르키는 객체가 되며, 강아지는 print메서드가 실행 되기 때문이다.
런타임 에러 예제 1)
package except;
public class TryEx03 {
public static void 나누기(int n1,int n2) {
System.out.println(n1/n2);
}
public static void 순회하기(int n[]) {
}
public static void main(String[] args) {
나누기(5,0); // 소스코드 아래 빨간줄이 안떴으면 런타임에러
}
}
코드에는 문제가 없다
하지만 실행 후 0으로 나눌수 없기 때문에 런타임 에러가 발생 한다.
예제 1)try-catch 런타임 에러 잡아주기
메서드 에서 try-catch로 런타임 에러 발생 시 출력문 작성
런타임 에러 예제 2)
아래 코드는 메서드에서 0~2까지 반복 하게 되어있다.
하지만 실제 배열의 크기는 2로 선언을 해줘서 런타임 에러가 발생 한다.
예제 2) try-catch문으로 에러 잡아주기
Throws 예제)
오류제어를 메서드를 사용 하는 사람에게 권한을 주는 방법
아래의 코드를 이용해서 예제 연습
throws 사용
- start에서 오류가 날수도 있으니까 오류 제어를 해놔 -> throws RuntimeException
- main 에서 try catch으로 오류를 제어 하는문 작성
try-catch에서 에러 처리 할때는 Exception(컴파일 에러), RuntimeException(런타임 에러 ) 두개를 구분해서 사용 하자.
Runtime 에러가 아닌 것들은 Exception으로 하면 된다.
package except;
import java.io.IOException;
import java.sql.SQLException;
class Car{
String name = "소나타";
void namePrint() {
System.out.println(name);
}
}
public class TryEx04 {
public static void start(Car c) throws SQLException{
c.namePrint();
}
public static void start2(Car c) throws IOException{
c.namePrint();
}
public static void main(String[] args) {
// 런타임 뜰것은 런타임으로만 처리
// 나머지는 Exception으로 사용.
try {
start(null);
start2(null);
} catch (Exception e) { // Execption은 컴파일, 런타임,등등 한번에 둘다 잡아야할 경우 사용
e.printStackTrace();
}
}
}
Exception은 에러들의 부모 클래스이기 때문에 에러를 다 묶을수 있다.
'자바 > 자바 실습' 카테고리의 다른 글
URL 통신하기(naver.com 홈페이지) (0) | 2022.08.22 |
---|---|
스트림(Stream) 통신 - BufferedReader,Writer (0) | 2022.08.22 |
23 다형성, 상속 (0) | 2022.08.08 |
22 메소드 (Method) (0) | 2022.08.03 |
21 생성자,디폴트 생성자 (0) | 2022.08.02 |