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 |