import java.util.InputMismatchException;
    import java.util.Iterator;
    import java.util.Scanner;
    
    public class ExceptionEx {
    
    	public ExceptionEx() {
    		Scanner sc = new Scanner(System.in);
    		while(true) {
    			try {
    				System.out.print("첫번쨰 수 => ");
    				int num1 = Integer.parseInt(sc.nextLine());
    				//int num1 = sc.nextInt();
    				System.out.print("두번째 수 => ");
    				int num2 = Integer.parseInt(sc.nextLine());   //
    				//int num2 = sc.nextInt();                   // inputMismatchException
    				
    				int result = num1 * num2;
    				int result2 = num1 / num2;  //---- 0으로 나누기 ArithmeticException
    				
    				System.out.println(num1 + "*" + num2 + "= " + result);
    				System.out.printf("%d/%d=%d\n", num1, num2, result2);
    				
    				String names[] = {"세종대왕", "이순신"};   
    				for (int i = 0; i <=names.length; i++) {  //배열 index ArrayIndexOUtOfBoundsException
    					System.out.println("names["+i+"]= "+ names[i]);
    				}					
    			}catch(NumberFormatException nfe) {
    				System.out.println("숫자만 입력하세요 ");
    			}catch(InputMismatchException ime) {
    				System.out.println("숫자만 입력해주세요");
    				break;
    			}catch(ArithmeticException ae) {
    				System.out.println("두번째 값은 0외의 값으로 입력해주세요");
    				break;
    			}catch(ArrayIndexOutOfBoundsException ai) {
    				System.out.println("배열의 index를 잘못사용하였습니다." + ai.getMessage());
    				break;
    			}
    		}
    	}
    
    
    	public static void main (String args[]) {
    		new ExceptionEx();
    	}
    }

    exception에러 1. 컴파일 에러 javac.exe

                       2. 런타임 에러 java.exe

    finally >>값이 잘나오든 안나오든 무조건 쓰임

    public class ExceptionTest2 {
    
    	public ExceptionTest2() {
    		try {
    			int data[] = {10,8,95,32,54};
    			System.out.println(data[data.length-1]);
    			
    		} catch (ArrayIndexOutOfBoundsException ae) {
    			System.out.println("배열의 index를 잘못사용하였습니다  >>>>>>"+ ae.getMessage());
    		}finally {
    			System.out.println("finally : 무조건 한번은 실행됨..");
    		}
    	}
    
    	public static void main(String[] args) {
    		new ExceptionTest2();
    
    	}
    
    }
    

     

    메소드에 예외처리 : throws 잘안씀

    public class ExceptionTestMethod {
    
    	public ExceptionTestMethod() throws ArithmeticException, NumberFormatException, ArrayIndexOutOfBoundsException{
    		method1();
    	}
    	public void method1() throws ArithmeticException, NumberFormatException, ArrayIndexOutOfBoundsException{
    		int a=100, b=12;
    		int c = a/b; //exception
    		System.out.println("c = "+ c);
    		method2();
    	}
    	public void method2() throws NumberFormatException, ArrayIndexOutOfBoundsException{
    		String numStr="12";
    		int num = Integer.parseInt(numStr); //exception
    		System.out.println("num = "+ num);
    		method3();
    	}
    	public void method3() throws ArrayIndexOutOfBoundsException{
    		int num[] = {10,20,30};
    		System.out.println(num[num.length]); //exception
    		
    	}
    	public static void main(String args[]){
    		try {
    			new ExceptionTestMethod();
    		}catch(ArithmeticException ae) {
    			System.out.println("0으로 나눌수 없습니다 ==> " + ae.getMessage());
    		}catch(NumberFormatException nf) {
    			System.out.println("문자는 숫자로 변경할수 없습니다. --->" + nf.getMessage() );
    		}catch(ArrayIndexOutOfBoundsException ar) {
    			System.out.println("배열이 잘못되었습니다.==>" + ar.getMessage());
    		}
    		System.out.println("프로그램 종료");
    	}
    }
    

     

    콘솔정수입력: 사용자 정의 예외 만들기

    조건:exception 상속받아 예외클래스 만들기

    public class MyException extends Exception {
    	
    	// 1~10까지의 값만 유효한 값이다.
    	public MyException() {
    		super("1~10까지의 값만 유효한 값이다.");
    	}
    	
    	//매개변수의 값이 예외 메세지로 설정
    	public MyException(String message) {
    		super(message);
    		
    	}
    
    }
    
    import java.util.Scanner;
    
    public class MyExceptionTest {
    	Scanner sc = new Scanner(System.in);
    	public MyExceptionTest() {
    		try {
    			System.out.print("1~10까지의 정수 입력 = ");
    			int data = sc.nextInt(); // InputMismachException
    			if(data<1 || data>10) {
    				//throw 강제 예외발생
    				//throw new MyException();
    				throw new MyException("1에서 10까지 정수가 아니다.");
    			}else {
    				//정상처리
    				sum(data);
    			}
    		}catch(MyException e){
    			e.printStackTrace();
    		}
    	}
    	public void sum(int m) {
    		int s = 0;
    		for (int i = 0; i < m; i++) {
    			s += i;
    		}
    	}
    	public void start() {
    		
    	}
    	
    	public static void main(String[] args) {		
    		new MyExceptionTest();
    	}
    
    }
    

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기