package ex0727;

public class Ex111_throws {

	public static void main(String[] args) {
		User11 u = new User11();
		
		u.setValue(-5);
		int n = u.getValue();
		System.out.println(n);

	}

}

// 잘못 작성된 클래스
class User11 {
	private int value;

	public void setValue(int value) {
		if (value < 0)
			return;

		this.value = value;
	}
	
	public int getValue() {
		return value;
	}
}

package ex0727;

public class Ex112_throwsChecked {

	public static void main(String[] args) {
		User12 u = new User12();
		
		try {
			u.setValue(-5);
			int n = u.getValue();
			System.out.println(n);
		} catch (Exception e) {
			// e.printStackTrace();
			System.out.println(e.toString());
		}
		System.out.println("end...");

	}

}

class User12 {
	private int value;

	public void setValue(int value) throws Exception { // 메소드를 호출하는 곳에서 catch하도록 설정
		if (value < 0) {
			// 강제로 checked exception을 발생 시킴
			throw new Exception("0 이상만 가능합니다."); // 예외를 발생시키는 것
		}

		this.value = value;
	}
	
	public int getValue() {
		return value;
	}
}

package ex0727;

public class Ex113_throws {

	public static void main(String[] args) throws Exception { // throws : 메소드를 호출한 곳에서 예외를 처리하도록  
	
		User13 ob = new User13();
		
		// 이곳에서 try~catch로 예외를 catch하지 않고 main()을 호출하는 곳에서 예외 처리하도록 설정
		
		// 위처럼 main() 메소드에서 throws 할 경우 예외가 발생하면
		// 		프로그램은 비 정상 종료된다. main()에서는 하면 안된다!!
		ob.setValue(-5);
		
		int n = ob.getValue();
		System.out.println(n);
		
		System.out.println("end...");

	}

}

class User13 {
	private int value;

	public void setValue(int value) throws Exception { // 메소드를 호출하는 곳에서 catch하도록 설정
		if (value < 0) {
			// 강제로 checked exception을 발생 시킴
			throw new Exception("0 이상만 가능합니다."); 
		}

		this.value = value;
	}
	
	public int getValue() {
		return value;
	}
}

package ex0727;

public class Ex114_throws {

	public static void main(String[] args) { 
		User14 ob = new User14();
	
		ob.setValue(-5);
		
		int n = ob.getValue();
		System.out.println(n);
		
		System.out.println("end...");

	}

}

class User14 {
	private int value;

	public void setValue(int value) { 
		
		try {
			if (value < 0) {
				throw new Exception("0 이상만 가능합니다."); 
			}
			
			this.value = value;
			
		} catch (Exception e) {
			// 위에서 throw new Exception("") 한 예외를 이곳에서 catch함
			System.out.println(e.toString());
		}
	}
	
	public int getValue() {
		return value;
	}
}

package ex0727;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Ex115_throws {
	public static void main(String[] args) {
		User15 ob = new User15();
		
		ob.input();
		ob.input();

	}
}

class User15 {
	private Scanner sc = new Scanner(System.in);

	public void input() {
		String name, tel;
		int kor, eng;

		try {
			System.out.print("이름 ? ");
			name = sc.next();

			System.out.print("국어 ? ");
			kor = inputScore();

			System.out.print("영어 ? ");
			eng = inputScore();

			System.out.print("전화번호 ? ");
			tel = sc.next();

			System.out.println(name + "," + kor + ":" + eng + ":" + tel);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		System.out.println("------------------------------");
	}

	// 점수를 입력 받는 메소드
	private int inputScore() throws Exception { // 메소드를 호출하는 곳에서 예외처리하도록 설정
		int s = 0;

		try {
			s = sc.nextInt();
			if (s < 0 || s > 100) {
				// 강제로 checked exception을 발생 시킴
				throw new Exception("점수는 0~100 사이만 가능합니다.");
			}
		} catch (InputMismatchException e) {
			// System.out.println("숫자만 입력 가능 합니다.");
			
			// 문제가 있는 데이터를 읽어서 버림(없으면 이상한 현상이 발생 됨.)
			sc.nextLine();
			
			// 강제로 checked exception을 발생 시킴
			throw new Exception("점수는 숫자만 입력 가능합니다.");
		}

		return s;
	}
}

package ex0727;

public class Ex116_throwUnchecked {
	public static void main(String[] args) {
		User16 u = new User16();
/*		
		u.setValue(-5);
			// value가 0보다 적어 RuntimeException이 발생.
			// 예외를 처리하지 않아 프로그램은 이곳에서 비정상적인 종료
		int n = u.getValue();
		System.out.println(n);
		System.out.println("end...");
*/
		
		try {
			u.setValue(-5);
			int n= u.getValue();
			System.out.println(n);
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	
		System.out.println("end...");
		
	}
}

class User16 {
	private int value;

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		if (value < 0) {
			// 숫자가 음수인 경우 RuntimeException 예외를 발생 시킴
			// RuntimeException은 unchecked exception으로 반드시 catch할 필요가 없다.
			throw new RuntimeException("0이상만 가능합니다.");
		}
	}
	
}

+ Recent posts