예외(Exception)처리

  • 프로그램 실행 중에 발생하는 오류를 예외(Exception)라고 한다.

  • 일반예외(Exception)
    • ClassNotFoundException
    • InterruptedException
    • etc
  • 실행예외(Runtime Exception)
    • 실행전에 예외가 발생 할 수 있다고 알려줌
    • NullPointerException
    • ClassCastException
    • NumberFormatException
    • etc
  • 자바는 예외를 클래스로 관리
  • 모든 예외 클래스는 java.lang.Exception 클래스를 상속 받음
  • 실행예외는 java.lang.RuntimeException을 상속 받음
// 예제1. NullPointerException
package com.jremind.exam0625;

public class ExceptionExam {
	public static void main(String[] args) {
		String data = null;
		System.out.println(data.toString());
	}
}
// 예제2. ArrayIndexOutOfBoundsException
package com.jremind.exam0625;

public class ExceptionExam {
	public static void main(String[] args) {
		String data1 = args[0];
		String data2 = args[1];

		System.out.println(data1);
		System.out.println(data2);
	}
}
// 예제3. NumberFormatException
package com.jremind.exam0625;

public class ExceptionExam {
	public static void main(String[] args) {
		String data1 = "100";
		String data2 = "a100";

		int val1 = Integer.parseInt(data1);
		int val2 = Integer.parseInt(data2);

		int result = val1 + val2;
		System.out.println(result);
	}
}
// 예제4. ClassNotFoundException
package com.jremind.exam0625;

public class ExceptionExam {
	public static void main(String[] args) {
		Class c = Class.forName("java.lang.String2");
	}
}
  • try-catch-finally 문으로 Exception 처리를 통해 에러를 방지
    • try : 예외가 발생할지도 모를 코드 블록을 정의
    • catch : try 블록 내부에서 예외가 발생할 경우 호출되는 코드 블록
    • finally : try와 catch 상관없이 항상 실행이 되는 코드 블록 (finally는 생략이 가능)
// 예제5. ArrayIndexOutOfBoundsException
package com.jremind.exam0625;

public class ExceptionExam {
	public static void main(String[] args) {
		String data1 = null;
		String data2 = null;

		try {
			data1 = args[0];
			data2 = args[1];
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("매개변수 값이 부족합니다.");
		}finally{
			System.out.println("Finally!!!");
        }
	}
}
// 예제6. ClassNotFoundException
package com.jremind.exam0625;

public class ExceptionExam {
	public static void main(String[] args) {
		try {
			Class c = Class.forName("java.lang.String2");
		}catch(ClassNotFoundException e) {
			System.out.println(e);
		}
	}
}
// 예제7-1. BalanceInsufficientException.java
package com.jremind.exam0625;

public class BalanceInsufficientException extends RuntimeException{
	public BalanceInsufficientException(){}
	public BalanceInsufficientException(String Message) {
		super(Message);
	}
}
// 예제7-2. Account.java
package com.jremind.exam0625;

public class Account {
	private long balance;

	public long getBalance() {
		return balance;
	}

	public void deposit(int money) {
		balance += money;
	}

	public void withdraw(int money) throws BalanceInsufficientException{
		if(balance < money) {
			throw new BalanceInsufficientException("잔고부족");
		}
		balance -= money;
	}
}
// 예제7-3. AccountMain.java
package com.jremind.exam0625;

public class AccountMain {
	public static void main(String[] args) {
		Account acc = new Account();

		acc.deposit(10000);
		System.out.println("잔액: " + acc.getBalance());

		try {
			acc.withdraw(500000);
		}catch(BalanceInsufficientException e) {
			System.out.println(e.getMessage());
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
	}
}