ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예외처리
    Java 2021. 11. 25. 14:36

    - 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

    댓글

Designed by Tistory.