자바 프로그램을 작성할 때 자바 문법에 맞지 않게 코드를 작성하고 컴파일하려할 때 문법 오류를 발생시킨다.
try / catch / finally 문 사용
catch, finally 블록은 선택적인 옵션으로 반드시 사용할 필요는 없다.
try{
// 기본적으로 가장 먼저 실행되는 코드
예외를 처리하길 원하는 실행 코드;
} catch (e1){
// try 블록에서 발생한 예외 코드나 예외 객체를 인수로 전달받아 그 처리를 담당
e1 예외가 발생할 경우에 실행될 코드;
} catch (e2){
e2 예외가 발생할 경우에 실행될 코드;
}
...
finally{
// try 블록에서 예외가 발생하건 안하건 맨 마지막에 무조건 실행
예외 발생 여부와 상관없이 무조건 실행될 코드;
}
Exception 클래스에 속하는 자식 클래스들은 치명적인 예외 상황을 발생시키므로 반드시 try/catch 문을 사용하여 예외를 처리해야 한다.
byte[] list = {'a', 'b', 'c'};
try {
System.out.write(list);
} catch (IOException e) {
e.printStackTrace();
}
try {
System.out.write(list);
} catch (Exception e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
예제에서 IOException이 발생하면 첫 번째 catch블록부터 순서대로 해당 예외를 처리할 수 있는지 검사한다.
그런데 IOException은 Exception의 자식 클래스이므로 첫번째 catch 블록에서도 IOException은을 처리할 수 있다.
IOException만 따로 처리하고자 한다면 아래 예제처럼 순서를 바꿔야 한다.
try {
System.out.write(list);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
java SE7부터 가능
try {
this.db.commit();
} catch (IOException | SQLException e) {
e.printStackTrace();
}
이 클래스에는 예외나 오류에 관한 다양한 정보를 확인할 수 있는 메서드가 포함
try {
System.out.println(5 / 0);
} catch (ArithmeticException e) {
System.out.println("현재 발생한 예외 정보 : " + e.getMessage());
}
// 실행결과
현재 발생한 예외 정보 : / by zero