exception

예외 클래스

이미지참조:https://ccm3.net/archives/20672

예외 처리 try~catch(Exception)

/ by zero 오류 발생

class ExceptionEx02 {
    public static void main(String args[]) {
        int number = 100;
        int result = 0;

        for(int i=0; i < 10; i++) {
            result = number / (int)(Math.random() * 10); // 7번째 라인
            System.out.println(result);
        }
    } // main의 끝
}

예외처리

class ExceptionEx03 {
    public static void main(String args[]) {
        int number = 100;
        int result = 0;

        for(int i=0; i < 10; i++) {
            try {
                result = number / (int)(Math.random() * 10);
                System.out.println(result);
            } catch (ArithmeticException e) {
                System.out.println("0");    
            } // try-catch의 끝
        } // for의 끝
    } 
}

try-catch 문에서의 흐름

class ExceptionEx05 {
    public static void main(String args[]) {
            System.out.println(1);          
            System.out.println(2);
            try {
                System.out.println(3);
                System.out.println(0/0);    
                System.out.println(4);  // 실행되지 않는다.
            } catch (ArithmeticException ae)    {
                System.out.println(5);
            }   // try-catch의 끝
            System.out.println(6);
    }   // main메서드의 끝
}
class ExceptionEx07 {
    public static void main(String args[]) {
        System.out.println(1);          
        System.out.println(2);
        try {
            System.out.println(3);
            System.out.println(0/0);
            System.out.println(4);      // 실행되지 않는다.
        } catch (ArithmeticException ae)    {
            if (ae instanceof ArithmeticException) 
                System.out.println("true"); 
            System.out.println("ArithmeticException");
        } catch (Exception e)   {
            System.out.println("Exception");
        }   // try-catch의 끝
        System.out.println(6);
    }   // main메서드의 끝
}

printStackTrace() 와 getMessage()

class ExceptionEx08 {
    public static void main(String args[]) {
        System.out.println(1);          
        System.out.println(2);
        try {
            System.out.println(3);
            System.out.println(0/0); // 예외발생!!!
            System.out.println(4);   // 실행되지 않는다.
        } catch (ArithmeticException ae)    {
            ae.printStackTrace();
            System.out.println("예외메시지 : " + ae.getMessage());
        }   // try-catch의 끝
        System.out.println(6);
    }   // main메서드의 끝
}

finally 블럭

try{
    // 예외가 발생할 가능성이 있는 문장
} catch (Exception e) {
    // 예외 처리를 위한 문장
} finally {
    예외 발생 여부와 상관 없이 수행
}

throws 예약어

public class ExceptionTest6 {
    public void exceptionMethod() throws Exception{
        throw  new Exception(); // 예외 객체를 임의로 발생시켜 주는 예약어
    }
    /**
     * throws 테스트
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ExceptionTest6 et6 = new ExceptionTest6();
        try{
            et6.exceptionMethod();
        }
        catch(Exception e){
            System.out.println("호출한 메소드에서 예외 처리함");
        }
    }
}

사용자 정의 예외

Exception 생성

package chapter11;

public class LoginException extends Exception {

    LoginException(String msg) {
        super(msg);
    }
}

테스트 - Exception 사용

package chapter11;

import java.util.Scanner;

public class ExceptionEx8 {

    static String user_id = "seo";
    static String user_pw = "smg1234";

    public static void main(String[] args) throws Exception {

        try {
            Scanner scan = new Scanner(System.in);
            System.out.print("아이디 : ");
            String input_id = scan.nextLine();

            System.out.print("비밀번호 : ");
            String input_pw = scan.nextLine();

            if (!user_id.equals(input_id)) {
                throw new LoginException("로그인 : 아이디가 올바르지 않습니다.");
            } else if (!user_pw.equals(input_pw)) {
                throw new LoginException("로그인: 비밀번호가 올바르지 않습니다.");
            } else {
                System.out.println("로그인 성공");
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

    }


}