package ex0727;

import java.util.Scanner;

public class Ex101_exception {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a, b, c;
		
		System.out.print("두정수 ? ");
		a = sc.nextInt();
		b = sc.nextInt();
		
		c = a / b;
		System.out.println(a+"/"+b+"="+c);
		
		// b가 0인 경우 프로그램은 강제로 종료되어 아래 내용이 실행되지 않는다.
		System.out.println("end...");
		
		sc.close();
	}
}

package ex0727;

import java.util.Scanner;
/*
 - 예외가 발생하지 않는 경우
   1) 블럭 모두 실행
   3) 블럭 실행 - 종료
 
 - 예외가 발생한 경우(1번 블럭)
   1) 블럭 실행 중 예외 발생(비정상적인 상황) - 1)블럭 실행을 중지하고
   2) 블럭 실행(예외가 발생한 경우만 실행)
   3) 블럭 실행 - 종료
 */
public class Ex102_exception {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a, b, c;
		
		try {
			// 1) 예외가 발생할 가능성이 있는 코드를 기술
			System.out.print("두수 ? ");
			a = sc.nextInt();
			b = sc.nextInt();
			c = a / b;
			System.out.println(a + "/" + b + "=" + c);
			
		} catch (Exception e) {
			// Exception : 모든 예외를 catch 할 수 있지만 예외 상황별로 예외를 분리할 수 없다.
			// 2) 예외가 발생할 때 실행할 코드 작성
			System.out.println("에러가 발생했습니다.");
		}

		// 3)
		System.out.println("end...");
		sc.close();
	}

}

package ex0727;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ex103_exception {
	public static void main(String[] args) {
		// 버퍼를 이용하여 문자(열)을 입력 받음. 입력 속도 향상.
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s;
		int a, b, c;
		
		try {
			System.out.print("첫번째 수 ?");
			s = br.readLine();
				// readLine()은 checked exception(IOException)이 발생하므로 
				// 반드시 예외처리 해야함.
			
			a = Integer.parseInt(s); // 문자열을 숫자로 바꿈
				// NumberFormatException 이라는 unchecked exception 발생
			
			System.out.print("두번째 수 ? ");
			b = Integer.parseInt(br.readLine());
			
			c = a / b;
				// 0으로 나누면 ArithmeticException 이라는 unchecked exception 발생
			
			System.out.println(a + "/" + b + "=" + c);
			
		} catch (IOException e) {
			// IOException : 입출력에 문제가 발생할 때 발생하는 예외(checked exception)
			// checked exception은 메소드를 정의할 때 throws 한 예외
			// checked exception은 예외처리를 하지 않으면 컴파일 에러가 발생하는 예외
			e.printStackTrace(); // 에러 메시지를 표준 출력 장치에 출력
		}
		
		// 0으로 나누거나 문자열이 입력되면 에외가 발생되어 비정상 종료되며, 아래 메시지는 출력되지 않는다.
		System.out.println("end...");
	}
}

package ex0727;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ex104_exception {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int a, b, c;
		
		try {
			System.out.print("첫번째 수 ? ");
			a = Integer.parseInt(br.readLine());
			
			System.out.print("두번째 수 ? ");
			b = Integer.parseInt(br.readLine());
			
			c = a / b;
			
			System.out.println(a + "/" + b + "=" + c);
		
		// 예외 발생별로 예외를 catch
		} catch (IOException e) { // checked 예외 (반드시 catch해야함)
			e.printStackTrace();
		} catch (NumberFormatException e) {
			// unchecked exception
			// 문자열을 숫자로 변경하지 못하는 경우 등에 발생
			// 반드시 catch 할 필요는 없지만 catch하지 않는 경우 예외가 발생하면 프로그램은 비정상 종료
			
			// System.out.println("숫자만 입력 가능합니다...");
			// System.out.println(e.getMessage()); // 간단한 메시지 출력
			// System.out.println(e.toString()); // 예외 종료 및 간단한 메시지
			e.printStackTrace(); // 자세한 에러 메시지 및 에러 발생 줄 표시 ★ 개발자가 사용해야 할 메소드
			
		} catch (ArithmeticException e) {
			// unchecked exception
			// 숫자를 0으로 나누는 등 연산이 불가능하는 경우 발생
			System.out.println("0으로 나눌수는 없습니다.");
			
		} catch (Exception e) {
			// Exception : 모든 예외를 catch 할 수 있다.
			// 여러 예외를 catch하는 경우에는 다른 예외 클래스의 상위 클래스이므로
			// 		가장 마지막에 위치해야 한다.
			e.printStackTrace();
		}
		
		System.out.println("end...");

	}
}​

package ex0727;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Ex105_exception {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int a, b, c;
		
		try {
			System.out.print("첫번째 수 ? ");
			a = Integer.parseInt(br.readLine());
			
			System.out.print("두번째 수 ? ");
			b = Integer.parseInt(br.readLine());
			
			c = a / b;
			
			System.out.println(a + "/" + b + "=" + c);
		
		} catch (Exception e) {
			// Exception : 모든 예외를 catch 할 수 있다.
			// 예외별로 예외를 분리할 수 없다.
			// 정모르겠으면 이렇게라도 예외처리를 해라.
			e.printStackTrace();
		} 
		
		System.out.println("end...");

	}
}

예외처리

checked exception 과 uncheck exception로 나뉨.

checked exception은 오류를 잡지 않으면 컴파일 오류가 나타난다.

uncheck exception은 잡지 않아도 되지만 런타임 오류가 생길 수 있다. 생길 수 있는 오류들의 경우를 생각해서 catch로 잡고 (세세한 오류먼저) 마지막에 모든 오류를 잡는 exception을 넣어주는 것이 좋은 코드이다. 

package ex0727;

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

public class Ex109_exception {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a, b, c;

		try {
			System.out.print("두 수 ? ");
			a = sc.nextInt();
			b = sc.nextInt();
			c = a / b;
			System.out.println(a + "/" + b + "=" + c);
		} catch (InputMismatchException e) {
			// InputMismatchException : Scanner의 nextInt() 등에서 숫자가 아닌 문자열을 입력하면
				// 발생하는 unchecked exception
			System.out.println("숫자만 입력 가능합니다.");
		} catch (ArithmeticException e) {
			System.out.println("연산이 불가능 합니다.");
		} finally {
			// finally 블럭에서 일반적으로 사용한 resource를 close한다.
			sc.close();
		}

		System.out.println("end...");
	}
}

 

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0727_Ex110_tryResource  (0) 2021.07.27
0727_Ex106~Ex108_finally  (0) 2021.07.27
0726_Ex07_interface : 인터페이스  (0) 2021.07.26
0726_Ex06_interface : 인터페이스  (0) 2021.07.26
0726_Ex05_interface : 인터페이스  (0) 2021.07.26

+ Recent posts