- error: 환경적인 오류, exception: 코드 오류
- try ... catch 구문
- 예외 발생 시 그 아래의 코드는 실행하지 않음, 예외 처리하면 실행 함
- 예외 계층에 따른 우선순위 존재, 기본적으로 try에 가까운 순서로 실행
- try 내부에서 실행하다 예외 발생하면 try 내부의 그 이후 코드들은 실행되지 않음
public class ExceptionApp {
public static void main(String[] args) {
System.out.println(1);
int[] scores = {10,20,30};
try {
System.out.println(2);
// System.out.println(scores[3]);
System.out.println(3);
System.out.println(2 / 0);
System.out.println(4);
} catch(ArithmeticException e){
System.out.println("계산이 잘못된 것 같아요."+e.getMessage());
e.printStackTrace();
} catch(Exception e){
System.out.println("오류가 발생했습니다. ");
}
System.out.println(5);
}
}
- checked exception: Exception의 직계 자손 클래스 중 RuntimeException을 제외한 클래스들 (대표적으로 IOException) -> 예외 처리해야 컴파일 가능
- unchecked exception: RuntimeException은 예외 처리하지 않아도 컴파일 됨, 예외 발생 시 알려줌
- 외부의 resource를 사용할 때는 예외에 더 취약함
- 예) 파일에 접근할때는 보통 독점적으로 작업하기 때문에, 종료 후 권한을 내려놓아야 함
- 이때 close() 관련해서 코드가 지저분해짐
- finally는 예외 처리 여부와 관계없이 무조건 실행됨
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
import java.io.FileWriter;
import java.io.IOException;
public class CheckedExceptionApp {
public static void main(String[] args) {
FileWriter f = null;
// try catch finally
try {
f = new FileWriter("data.txt");
f.write("Hello");
} catch(IOException e){
e.printStackTrace();
} finally {
// 만약에 f가 null이 아니라면
if(f != null) {
try {
f.close();
} catch(IOException e){
e.printStackTrace();
}
}
}
}
}
/////////////////////////////////////////////////
import java.io.FileWriter;
import java.io.IOException;
public class TryWithResource {
public static void main(String[] args) {
// try with resource statements
try (FileWriter f = new FileWriter("data.txt")) {
f.write("Hello");
} catch(IOException e){
e.printStackTrace();
}
// close() 작업을 내부적으로 수행해줌
}
}
- 예외 발생 및 회피
// 예외 회피
// 해당 메소드를 호출한 메소드에서 예외 처리 해야함
import java.io.FileWriter;
import java.io.IOException;
public class ThrowException {
public static void main(String[] args) throws IOException {
FileWriter f = new FileWriter("./data.txt");
}
}
// 예외 발생
import java.io.FileWriter;
import java.io.IOException;
public class MyException {
public static void main(String[] args){
throw new RuntimeException("무언가 문제가 있습니다");
}
}
출처: https://www.youtube.com/playlist?list=PLuHgQVnccGMCrFJLxpjhE0N5tvOVxJuVB
'course > 생활코딩' 카테고리의 다른 글
[JAVA OOP] (0) | 2022.07.23 |
---|---|
[JAVA1] 자바 문서 보기 - 클래스, 인스턴스, 상속 (0) | 2022.07.20 |
[JAVA1] 프로그래밍, 디버깅, 컴파일 (0) | 2022.07.19 |
[JAVA1] 자료형, 변수 (0) | 2022.07.19 |
[JAVA1] 자바의 활용 (0) | 2022.07.19 |