Exception e 코드에서 e는 변수(이름 수정 가능) Exception은 변수의 데이터 타입(변경 불가)
catch 문의 print문에 브레이크 포인트를 걸고 디버거를 실행시키면 자세한 예외내용을 볼 수 있음
또는 e(변수명).getMessage() 메서드를 이용해서 확인 가능함
유튜브 생활코딩
printStackTrace() 메서드를 통해 프로그램 출력 마지막 부분에 에러 내용 전체를 출력 가능 위 메서드와 같은 에러 메세지가 사용자에게 보여지게 하면(특히나 서버 관련 일에서) 그 메세지에서 보안적인 사고를 낼 수 있는 단서를 제공할 수 있어서 관리자들에게만 보여지게 해야됨(로깅 시스템 이용 통해 해결 가능)
부모(조상) Exception 은 자식 Exception 을 다 포괄함, catch문에서도 자식/부모 관계의 Exception을 어떻게 배치하느냐에 따라 우선순위가 달라짐
유튜브 생활코딩
Exception(제일 부모 위치의 예외) 로 인해 부모의 예외가 실행되고 산술/배열과 관련된 예외는 실행되지 않음
import java.io.FileWriter;
import java.io.IOException;
public class CheckedExceptionApp {
public static void main(String[] args) {
try {
FileWriter f = new FileWriter("data.txt");
f.write("Hello");
// close를 하기 전에 예외가 발생할 수 있기 때문에 finally로 처리해야 합니다.
// close를 하기 전에 예외가 발생하면 catch문 실행으로 인해 close의 처리 기회가 없습니다.
f.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
위 코드의 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 {
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){ //close할때 IOException이 발생할 수 있기에 catch 사용
e.printStackTrace();
}
}
}
}
}
아래는 try-with-resource 방법을 이용한것.
try(close할 내용){내용}
자동으로 close가 되기에 close코드 또한 필요없게 됨
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")) {
//try 옆 괄호에는 세미콜론이 포함되면 안됨
f.write("Hello");
} catch(IOException e){
e.printStackTrace();
}
}
}