catch 블럭
)throw
와 예외를 메서드에 선언할 때 쓰이는 throws
를 잘 구별하자!)void method() throws Exception1, Exception2, ..., ExceptionN {
// 메서드의 내용
}
// method()에서 Exception과 그 자손 예외 발생 가능
void method() throws Exception {
// 메서드의 내용
}
오버라이딩의 조건 3가지
따라서 오버라이딩 후 예외 선언시 조상보다 많은 예외를 선언하지 않도록 주의해야 한다!
static void startInstall() throws SpaceException, MemoryException {
if (!enoughSpace())
throw new SpaceException("설치할 공간이 부족합니다");
if (!enoughMemory())
throw new MemoryException("메모리가 부족합니다");
}
public class Ex8_6 {
public static void main(String[] args) throws Exception { // main 메서드가 죽으면, JVM에 예외가 넘어가게 된다.
method1();
}
static void method1() throws Exception{
method2();
}
static void method2() throws Exception{
throw new Exception();
}
}
>>> JVM 기본 예외 처리기가 출력한 내용
Exception in thread "main" java.lang.Exception
at Ex8_6.method2(Ex8_6.java:11)
at Ex8_6.method1(Ex8_6.java:7)
at Ex8_6.main(Ex8_6.java:3)
import java.io.File;
public class Ex8_10 {
public static void main(String[] args) {
try {
File f = createFile("test.txt");
// File f = createFile("");
System.out.println(f.getName()+"파일이 성공적으로 생성되었습니다.");
} catch (Exception e){
System.out.println(e.getMessage()+" 다시 입력해 주시기 바랍니다.");
}
}
static File createFile(String fileName) throws Exception {
if (fileName == null || fileName.equals("")){
throw new Exception("파일 이름이 유효하지 않습니다.");
}
File f = new File(fileName);
return f;
}
}
>>>
test.txt파일이 성공적으로 생성되었습니다.
파일 이름이 유효하지 않습니다. 다시 입력해 주시기 바랍니다.
try{
// 예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exception e1) {
// 예외처리를 위한 문장을 적는다.
} finally {
// 예외의 발생여부에 관계없이 항상 수행되어야 하는 문장들을 넣는다.
// finally 블럭은 try-catch문의 맨 마지막에 위치해야 한다.
}
참고로, try 블럭 안에 return 문이 있어서 try 블럭을 벗어나갈 때에도 finally 블럭은 실행된다.