생활코딩 | java 예외

yoongiiii·2023년 10월 8일

생활코딩

목록 보기
11/11

error (에러) 어쩔 수 없는 것
exceptio (예외) 해결할 수 있는 것

예외의 처리

예외가 의심되는 코드를 try...catch 구문으로 격리시키기

public class ExceptionApp{
	public static void main(String[] args){
    	System.out.println(1);
        int[] scores = {10,20,30};
        try{
        	System.out.println(scores[3]);
        } catch(ArrayIndexOutOfBoundsException e){
        	System.out.println("없는 값을 찾고 계시네요");
        }
        try{
        	System.out.println(2/0);
        } catch(ArithmeticException e){
        	System.out.println("잘못된 계산인요");
        }
        System.out.println(3);
    }
}

예외의 우선순위

예외 처리하기 귀찮을 때 쓸 수 있는 방법 (좋은 방법은 아님)

catch(Exception e){
	System.out.println("뭔가 이상합니다. 오류가 발생했습니다.");
    }

부모 exception은 자식 exception들을 포괄한다
catch문을 어디에 넣냐에 따라서 우선순위가 달라진다

변수 e

e.getMessage()

: 왜때문에 생긴 문제인지 알려준다.

e.printStackTrace()

: exception이 발생했을때 나타나는 빨간색 에러 메세지도 띄워준다.

public class ExceptionApp{
	public static void main(String[] args){
    	System.out.println(1);
        int[] scores = {10,20,30};
        try{
        	System.out.println(2);
        	//System.out.println(scores[3]);
            System.out.println(3);
            System.out.println(2/0);
            System.out.println(4);
        } catch(ArithmeticException e){
        	System.out.println("계산이 잘못된 것 같아요."+e.getMessage())
            e.printStackTrace(); 
        }	catch(Exception e){
        	System.out.println("뭔가 이상합니다. 오류가 발생했습니다.");
        }
        System.out.println(5);
    }
}

참고)
로깅시스템: 에러메세지를 내부적으로 관리자들만 볼 수 있는 형태로 감춰주는 툴

checked exception vs. unchecked exception

checked exception
: exception에서 unchecked exception 을 제외한 나머지 (예, IOException)
unchecked exception
: runtime exception을 포함한 자식 예외들

checked 는 반드시 예외처리를 해야 컴파일 실행 가능
unchecked 는 일단 실행이 가능하고 콘솔에서 예외 발생 시 표시를 해준다.

public class CheckedExceptionApp{
	public static void main(String[] args){
    	try{
        	FileWriter f = new FileWriter(fileName:"data.txt");
       	 	f.write(str:"Hello");
        	f.close();
        }catch(IOException e){
        	e.printStackTrace();
        }
    }
}

0개의 댓글