ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [20회차-②] JAVA (예외처리)
    JAVA 2021. 4. 20. 09:13

    강의명 : 오픈프레임워크 활용 디지털융합 SW엔지니어 양성 과정

    강의 날짜 : 21.04.19

     

    1. try-catch

     

    try {

          실행문;

    } catch (Exception 클래스) {

            오류 발생시 실행문;

     }finally{ //있어도 되고 없어도 됨

           최종 실행문;

    }

     

    Exception 클래스는 자바에서 기본적으로 제공하는 클래스이므로 import가 필요없다.

    에러 문구가 나오는 대신 예외 처리를 해주는 것이며, 세부적인 처리도 가능하다.

     

    모든 예외처리 클래스의 상위 클래스는 Exception 클래스이다.

     

    외부와 통신할 때, 데이터를 교류할 때, 대화를 할 때 무조건 예외 처리를 해주어야 한다.

     

    public class Ex14 {
    
    	public static void main(String[] args) {
    		
    		try {
    			String c = null;
    			System.out.println(" 문자열 값은 : "+c.toString());
    		}catch (NullPointerException e) {
    			System.out.println("예외가 발생하여 Exception 객체가 잡음");
    			System.out.println(e);
    		}
    		System.out.println("정상 종료");
    	}
    }

     

    String 객체 c는 선언만 되었을 뿐, 데이터를 받은 적이 없다.

    즉 객체 c안에는 NULL값(알 수 없음)이 있는 것이다.

    그러므로 toString()을 수행할 수 없어서 NULL값 참조 오류가 일어났다.

     

    이 오류를 catch가 잡아준다. 그리고 관련 정보를 객체 e에 저장하는 것이다.

     

    예외 처리를 해주었기 때문에 오류가 난 것이 아니라 정상 종료된다.

     

    * 예외의 경우

    예외 설명
    NullPointerException 널 값 참조 오류
    ArithmeticException 산술 오류(ex. 계산 불가한 변수가 오거나 0으로 나눈 경우)
    ArrayIndexOutOfBoundsException 배열의 범위에서 벗어나 오류
    NumberFormatException 숫자 형식에서 예외
    (ex. int로 전달될 수 없는 문자열을 받은 경우)
    Exception 가장 상위의 예외처리 클래스
    자식 클래스들의 내용이 다 들어가 있다.

     

     

    2. 예외 출력

     

    public class Ex17 {
    	public static void main(String[] args) {
    		try {
    			String c = null;
    			System.out.println("문자열 값 : "+c.toString());
    		}catch(Exception e) { 
    			System.out.println(">> e <<");
    			System.out.println(e);
    			System.out.println(">> e.toString() <<");
    			System.out.println(e.toString());
    			System.out.println(">> e.getMessage() <<");
    			System.out.println(e.getMessage()); //자바가 가지고 있는 특수한 예약값
    			System.out.println(">> e.printStackTree <<"); 
    			e.printStackTrace(); //메세지 출력 메소드
    		}
    	}
    }

     

    *e.getMessage

    오류 메세지를 반환한다.

     

    * e.printStackTrace

     

    Exception 클래스의 객체 메소드이며 오류 메세지 출력 기능을 한다.

    예외 발생 당시의 호출 스택에 있었던 메소드의 정보와 예외 메세지를 출력한다.

    예외가 발생하면 모든 정보를 예외처리 스택에 저장하여 역추적해서 출력한다.(LIFO)

     

     

    3. throws 책임전가

     

    public class Ex18 {
    
    	public static void main(String[] args) {
    		try {
    			method1();
    		}catch (Exception e) {
    			System.out.println("main()에서 예외 처리");
    			e.printStackTrace();
    		}
    	}
        
    	static void method1() throws Exception{ //main에게 책임 전가
    		throw new Exception(); //강제로 예외 발생
    	}
    }

    method1에서 throw를 사용하여 강제로 예외 객체를 생성하여 예외를 발생시켰다.

    하지만 method1에는 try-catch 가 없어서 예외처리를 하지 못한다.

    그래서 throws를 사용하여 자신을 호출한 객체에게 예외를 전가한다.

     

    method1을 호출한 객체는 main메소드이므로 main메소드에게 예외를 전달하고,

    main 메소드는 try-catch로 예외를 처리한다.

     

    throw : 강제적

    throws : 책임 전가

     

    *예외가 발생하여 처리하는 방법

    try-catch  정확히 기재

    자신을 호출하는 상위에게 throws

     

     

    'JAVA' 카테고리의 다른 글

    [21회차-①] JAVA (File)  (0) 2021.04.21
    [20회차-③] JAVA (Stream)  (0) 2021.04.20
    [20회차-①] JAVA(기타 클래스와 제네릭)  (0) 2021.04.20
    [19회차] JAVA (상속)  (0) 2021.04.17
    [18회차] JAVA (String 클래스와 Wrapper 클래스)  (0) 2021.04.15
Designed by Tistory.