-
- Exception처리: software로 제어할 수 있는 error를 말한다
- Exception처리방법
1. try~catch문 이용
2. 메소드를 이용
< try~catch문 이용>
public class ExceptionTest2 { public ExceptionTest2() {} public void start() { try { // try문: 예외발생가능성이 있는 코드와 // 예외발생가능성이 없는 코드를 기술한다 Scanner sc = new Scanner(System.in); System.out.print("정수입력="); int num = Integer.parseInt(sc.nextLine()); System.out.print("정수입력="); int num2 = sc.nextInt(); int result = num / num2; System.out.printf("%d / %d = %d\n", num, num2, result); int arr[] = new int[5]; arr[arr.length] = 10; }catch(ArrayIndexOutOfBoundsException ae) { System.out.println(ae.getMessage()); }catch(NumberFormatException nf) { System.out.println("문자를 숫자로 바꿀수 없습니다^^;"); }catch(Exception e) { // Exception은 상위클래스에 있기때문에 // 모든 예외를 대입할 수 있음 // Exception catch 다음에 ArrayIndexOutOfBoundsException를 캐치하면 에러뜸 // 따라서 모든 catch문의 마지막에 와야함 e.printStackTrace(); }finally{ // 예외가 생기든 안생기든 실행되는 구문 finally System.out.println("finally실행됨..."); try { }catch(Exception e) {} } } public static void main(String[] args) { new ExceptionTest2().start(); } }
< 메소드 이용>
import java.util.InputMismatchException; import java.util.Scanner; public class ExceptionTest3 { // 2. 메소드를 이용하는 방법 Scanner sc = new Scanner(System.in); public ExceptionTest3() {} public void method1() throws ArrayIndexOutOfBoundsException, ArithmeticException, InputMismatchException { int num = sc.nextInt(); int num2 = sc.nextInt(); method2(num, num2); } public void method2(int num, int num2) throws ArrayIndexOutOfBoundsException, ArithmeticException { int result = num / num2; System.out.printf("%d / %d = %d\n", num, num2, result); method3(num); } public void method3(int num) throws ArrayIndexOutOfBoundsException { int arr[] = new int[num]; arr[num] = 562; } public static void main(String[] args) throws ArrayIndexOutOfBoundsException { ExceptionTest3 t = new ExceptionTest3(); // 마지막에 예외문 꼭 필요 try { t.method1(); }catch(ArrayIndexOutOfBoundsException e) { System.out.println("배열index예외발생ㅠ_ㅠ"); }catch(ArithmeticException ae) { System.out.println("0으로 나눌 수 없습니다"); }catch(InputMismatchException ime) { System.out.println("정수를 입력하거라"); } } }
< 사용자정의 클래스 이용 >
// 사용자 정의 예외처리 클래스 만들기 // Exception 상속받기 public class MyException extends Exception { public MyException(){ // 상위클래스인 Exception의 생성자메소드를 호출하여 // 예외메시지를 설정 super("1~100사이의 값이 아니야..ㅡㅡ"); } public MyException(String message) { super(message); } }
import java.util.InputMismatchException; import java.util.Scanner; public class MyExceptionTest { Scanner sc = new Scanner(System.in); // 1~100까지의 값을 입력받아 // 입력받은 수까지의 합을 구하여 출력 // 합구하기 public void sum(int max) { int total=0; for(int i=1; i<=max; i++) { total += i; } System.out.println("1~"+max+"까지의 합은 "+total); } public void start() { try { System.out.print("1~100사이의 정수="); int max = sc.nextInt(); if(max>=1 && max<=100) { sum(max); }else { // 예외를 강제로 발생시키기 throw new MyException("입력값은 1~100사이만 가능합니다."); } }catch(InputMismatchException ime) { System.out.println("숫자만 입력해야 합니다"); }catch(MyException me) { System.out.println(me.getMessage()); } } public static void main(String[] args) { MyExceptionTest mt = new MyExceptionTest(); mt.start(); } }
'Java' 카테고리의 다른 글
상속 과제물 (0) 2021.11.25 Collection (0) 2021.11.25 객체지향 퀴즈 (0) 2021.11.24 객체지향프로그래밍 (자바의정석) (0) 2021.11.22 배열 (0) 2021.11.22