package Demo1;
import java.io.FileWriter;
import java.io.IOException;
public class ExceptionDemo1 {
public static void main(String[] args) {
// 일반 예외가 발생하는 경우 예외 처리하기
try {
System.out.println("try 블록의 수행문 시작");
FileWriter writer = new FileWriter("sample.txt");
writer.write("연습");
writer.flush();
writer.close();
System.out.println("try 블록의 수행문 종료");
} catch (IOException e) {
System.out.println("파일 생성 혹은 파일 기록 중 오류가 발생하였습니다.");
System.out.println(e);
System.out.println("catch 블록의 수행문");
} finally {
System.out.println("finally 블록의 수행문");
}
}
}
package Demo1;
import java.io.FileWriter;
import java.io.IOException;
public class ExceptionDemo2 {
public static void main(String[] args) throws IOException {
FileWriter writer = new FileWriter("sample.txt");
writer.write("연습");
writer.flush();
writer.close();
}
}
package Demo1;
import java.io.FileWriter;
import java.io.IOException;
public class ExceptionDemo3 {
public static void method1() throws IOException {
FileWriter writer = new FileWriter("sample.txt");
writer.write("예외 떠넘기기");
writer.flush();
writer.close();
}
public static void method2() throws ClassNotFoundException {
Class.forName("demo1.ExceptionDemo1"); // demo1.ExcpetionDemo1 설계도를 메모리에 로딩시킨다.
}
// 메소드1과 2가 처리를 위임한 예외를 다시 떠넘긴다.
public static void method3() throws IOException, ClassNotFoundException {
ExceptionDemo3.method1();
ExceptionDemo3.method2();
}
//메소드 1과 2가 처리를 위임한 예외를 try ~ catch로 처리한다.
public static void method4() {
try {
ExceptionDemo3.method1();
ExceptionDemo3.method2();
}
catch (IOException e) {
} catch (ClassNotFoundException e) {
}
}
//메소드 1과 2가 처리를 위임한 예외를 try ~ catch로 처리한다.
public static void method5() {
try {
ExceptionDemo3.method1();
ExceptionDemo3.method2();
}
catch (IOException | ClassNotFoundException e) {
}
}
//메소드 1과 2가 처리를 위임한 예외를 try ~ catch로 처리한다.
public static void method6() {
try {
ExceptionDemo3.method1();
ExceptionDemo3.method2();
}
catch (Exception e) { // Exception 타입의 변수로 선언하면 try블록에서 발생되는 모든 예외를
// 캐치할 수 있다.
}
}
public static void method7() {
try {
ExceptionDemo3.method1();
ExceptionDemo3.method2();
} catch (ClassNotFoundException e) {
} catch (IOException e) {
} catch (Exception e) {
} // 마지막 catch에서는 Exception 타입의 변수로 선언함으로써 미처 예상하지 못했던 예외도 캐치를 할 수 있도록 한다.
}
public static void main(String[] args) {
}
}
package Demo1;
import java.io.FileWriter;
import java.io.IOException;
public class exceptionDemo4 {
public static void method1() {
try {
FileWriter writer = new FileWriter("sample.txt");
writer.write("예외바꾸기");
writer.flush();
writer.close();
} catch (IOException e) {
}
}
public static void method2() {
}
public static void main(String[] args) {
}
}
package Demo1;
import java.io.FileWriter;
import java.io.IOException;
public class HTAException extends Exception {
public static void method1() throws HTAException {
try {
FileWriter writer = new FileWriter("sample.txt");
writer.write("예외바꾸기");
writer.flush();
writer.close();
} catch (IOException e) {
throw new HTAException(); // throw 예외 발생 시키기
}
}
public static void method2() throws HTAException { // 3. 2번에서 발생시킨 예외를 떠넘긴다.
try {
Class.forName("demo1.HTAException");
} catch (ClassNotFoundException e) { // 1. try 블록에서 발생한 예외를 캐치
throw new HTAException(); // 2. HTAException 예외를 생성해서 발생시킴
}
}
public static void main(String[] args) {
try {
method1();
method2();
} catch (HTAException e) { // 4. 처리를 위임받는 예외의 종류가 HTAException 으로 줄어들게 된다.
}
}
}