본문 바로가기

JAVA/일반

자바/Java Exception 사용하기

자바/Java Exception 사용하기


TestException.java

package arabiannight.tistory.com.exception;


public class TestException {

	public static void main(String[] args) {
		try {
			method1();
		} catch (ArithmeticException e) {
			System.out.println("ArithmeticException");
		} catch (Exception e) {
			System.out.println("Exception");
		}
		
		method2();
		
		method3();
		
		method4();
		
	}
	
	// 예외 던지기 : throw 로 예외를 던질때는 메서드에 
	// throws Exception(던질 예외들) 선언해줘야 함.
	// 현재 메서드를 실행할 경우 Exception, ArithmeticException 발생 할 수 
	// 있다고 선언해준 형태 입니다.
	public static void method1() throws Exception , ArithmeticException {
		try {
			System.out.println(1);
			System.out.println(0/0);
			// 앞에서 Exception이 날경우 다음 문장은 실행 안하고 catch문으로 넘어감.
			System.out.println(2);
		} catch (Exception e) {
			System.out.println(3);
			// method1을 호출한 메서드에게 예외를 되돌려 준다.
			throw e;
			// catch 문 실행 여부와 상광없이 무조건 finally 호출
		} finally {
			System.out.println("finally");
		}
	}

	// return 일 경우도 finally 호출
	public static void method2() {
		try {
			System.out.println(1);
			return;
		} catch (Exception e) {
			System.out.println(2);
		} finally {
			System.out.println("finally");
		}
	}
	
	// String 문자열을 담는 Exception 생성
	public static void method3() {
		try {
			throw new Exception("직접만든 Exception");
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
	
	
	// Exception을 상속받은 MyException Class 만들어 사용 하기
	public static void method4() {
		MyException myEx = new MyException("extends Exception!!");
		
		try {
			throw myEx;
		} catch (Exception e) {
			System.out.println(e.getMessage());
			System.out.println(((MyException) e).getErrCode());
			System.out.println(myEx.getMessage());
			System.out.println(myEx.getErrCode());
		}
	}
	
	// Exception 상속 받은 MyException Class
	static class MyException extends Exception {
		
		private int Err_Code;
		
		public MyException(String msg, int errCode) {
			super(msg);
			this.Err_Code = errCode;
		}
		
		public MyException(String msg){
			this(msg, 100);
		}
		
		public int getErrCode(){
			return Err_Code;
		}
	}
}


결과화면
// method1
1
3
finally
ArithmeticException

// method2
1
finally

// method3
직접만든 Exception

// method4
extends Exception!!
100
extends Exception!!
100




ExceptionEx21.java
import java.io.*;

class ExceptionEx21 {
	public static void main(String[] args) {
        // command line에서 입력받은 값을 이름으로 갖는 파일을 생성한다.
		File f = createFile(args[0]);	
		System.out.println( f.getName() + " 파일이 성공적으로 생성되었습니다.");
	} // main메서드의 끝

	static File createFile(String fileName) {
		try {
			if (fileName==null || fileName.equals(""))
				throw new Exception("파일이름이 유효하지 않습니다.");
		} catch (Exception e) {
             // fileName이 부적절한 경우, 파일 이름을 '제목없음.txt'로 한다.
			fileName = "제목없음.txt";	 
		} finally {
			File f = new File(fileName); // File클래스의 객체를 만든다.
			createNewFile(f);		    // 생성된 객체를 이용해서 파일을 생성한다.
			return f;
		}
	}	// createFile메서드의 끝

	static void createNewFile(File f) {
		try {
			f.createNewFile();		// 파일을 생성한다.
		} catch(Exception e){ }
	}	// createNewFile메서드의 끝
} // 클래스의 끝



ExceptionEx22.java
import java.io.*;

class ExceptionEx22 {
	public static void main(String[] args) 
	{
		try {
			File f = createFile(args[0]);
			System.out.println( f.getName()+"파일이 성공적으로 생성되었습니다.");
		} catch (Exception e) {
			System.out.println(e.getMessage()+" 다시 입력해 주시기 바랍니다.");
		}
	}	// main메서드의 끝

	static File createFile(String fileName) throws Exception {
		if (fileName==null || fileName.equals(""))
			throw new Exception("파일이름이 유효하지 않습니다.");
		File f = new File(fileName);		//  File클래스의 객체를 만든다.
        // File객체의 createNewFile메서드를 이용해서 실제 파일을 생성한다.
		f.createNewFile();
		return f;		// 생성된 객체의 참조를 반환한다.
	}	// createFile메서드의 끝
}	// 클래스의 끝



NewExceptionTest.java

class NewExceptionTest { public static void main(String args[]) { try { startInstall(); // 프로그램 설치에 필요한 준비를 한다. copyFiles(); // 파일들을 복사한다. } catch (SpaceException e) { System.out.println("에러 메시지 : " + e.getMessage()); e.printStackTrace(); System.out.println("공간을 확보한 후에 다시 설치하시기 바랍니다."); } catch (MemoryException me) { System.out.println("에러 메시지 : " + me.getMessage()); me.printStackTrace(); System.gc(); // Garbage Collection을 수행하여 메모리를 늘려준다. System.out.println("다시 설치를 시도하세요."); } finally { deleteTempFiles(); // 프로그램 설치에 사용된 임시파일들을 삭제한다. } // try의 끝 } // main의 끝 static void startInstall() throws SpaceException, MemoryException { if(!enoughSpace()) // 충분한 설치 공간이 없으면... throw new SpaceException("설치할 공간이 부족합니다."); if (!enoughMemory()) // 충분한 메모리가 없으면... throw new MemoryException("메모리가 부족합니다."); } // startInstall메서드의 끝 static void copyFiles() { } // 파일들을 복사하는 코드를 적는다. static void deleteTempFiles() { } // 임시파일들을 삭제하는 코드를 적는다. static boolean enoughSpace() { // 설치하는데 필요한 공간이 있는지 확인하는 코드를 적는다. return false; } static boolean enoughMemory() { // 설치하는데 필요한 메모리공간이 있는지 확인하는 코드를 적는다. return true; } } // ExceptionTest클래스의 끝 class SpaceException extends Exception { SpaceException(String msg) { super(msg); } } class MemoryException extends Exception { MemoryException(String msg) { super(msg); } } //




파일첨부 : 

ExceptionEx21.java

ExceptionEx22.java

NewExceptionTest.java

TestException.zip




출처 : 자바의정석 ( 책꼭사서 보세요 정말 좋습니다.! )