java025

제로·2022년 9월 18일
0

Java basic

목록 보기
25/45
post-custom-banner

예외와 예외 클래스

  1. 오류의 종류
    1) 에러
    - 하드웨어의 잘못된 동작 또는 고장으로 인한 오류
    - 에러가 발생되면 프로그램 종료
    - 정상 실행 상태로 돌아갈 수 없음
    2) 예외(Exception)
    - 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인한 오류
    - 예외가 발생되면 프로그램 종료
    - 예외 처리 추가하면 정상 실행 상태로 돌아갈 수 있음
    3) 구분
    - checked exception : 일반(컴파일 체크) 예외
    예외 처리 코드 없으면 컴파일 오류 발생
    - unchecked exception : 실행 예외
    예외 처리 코드를 생략하더라도 컴파일이 되는 예외
    경험에 따라 예외 처리 코드 작성이 필요
    RuntimeExeption
  2. 예외 처리 코드
    1) 예외 발생시 프로그램 종료를 막고 정상 실행될 수 있도록 처리
    - 일반 예외 : 반드시 작성해야 컴파일 가능
    - 실행 예외 : 컴파일러가 체크해주지 않아 개발자 경험에 의해 작성
    2) 기본 형식
    try{
    예외 발생 가능 코드
    }catch(예외클래스선언 변수e){
    예외 발생시 대응할 코드
    }finally{
    try{} 문에서 예외가 발생하든 안하든 실행할 코드
    }
  3. 예외 처리 순서
    1) 기본 내용 코드 실행
    2) 예외가 발생했을 때, 예외 처리 복사
    3) try{}catch{}문 작성
  4. 다중 예외 처리
    1) 하위 예외부터 처리하고, 상위 계층의 예외는 최종으로 처리한다.
String name = null;
	try {
		System.out.println(name.toString());
		System.out.println(args[1]);
		System.out.println(1/0);
		// 다중 예외 처리 : 상위 계층의 예외는 최종으로 처리한다
		}catch(NullPointerException e) {
			System.out.println("예외1 :"+e.getMessage());
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("예외2 :"+e.getMessage());
		}catch(Exception e) {
			System.out.println("예외3(상위)"+e.getMessage());
		}finally{
        }
  1. 예외 위임(Throws)
    1) 메서드별로 현재 예외 처리를 이 메서드를 호출하는 곳에서 처리하게 위임시키는 것을 말한다.
    2) 예외를 각 메서드별로 처리하기보다 호출되는 곳에서 한번에 처리할 때 활용한다
    3) 위임 형식
    public void 메서드명() throws 위임할예외1, 위임할예외2...{}
static void call01() throws ArithmeticException{ //예외 위임
		System.out.println("메서드1");
		System.out.println(1/0);
	}
static void call02() throws ArithmeticException{ //예외 위임
		System.out.println("메서드2");
		System.out.println(1/0);
	}
    
try {	//위임받은 예외 한번에 처리
		call01();
		call02();
		
	}catch(ArithmeticException e) {
		System.out.println(e.getMessage());
	}    
    

강제 예외 발생시키기

  1. 프로그램적으로 특정한 경우에 조건/반복문/특정프로세스 안에서 강제로 예외를 발생시켜 처리하는 내용을 말한다.
  2. 기본 형식
    throw new 내장된() / 사용자 정의 예외 던지는 처리
try {
	// 특정한 조건에서 예외 던지기
	for(int cnt=1;cnt<=10;cnt++) {
			System.out.println("번호:"+cnt);
			if(cnt==5)
				throw new NullPointerException("예외 막 던지기");
			}
		}catch(NullPointerException e) {
			System.out.println("예외 내용"+e.getMessage());
				
		}

사용자 정의 예외

  1. 자바 표준 api에서 제공하지 않는 예외를 선언하여 사용
  2. 형식
    public class @@@Exception extends Exception(or RuntimeException)
    public @@@Exception(){}
    public @@@Exception(String message){
    super(message);
    }
    }
  3. 주요 메서드
    1) getMessage() : 예외 발생시킬 때, 생성자의 매개값으로 사용한 메시지 리턴
    throw new @@@Exception("예외메시지")
    원인을 세분화하기 위해 예외 코드 포함
    catch() 절에서 활용
    catch(Exception e){
    String msg = e.getMessage();
    }
    2) printStackTrace() :
    예외발생코드를 추적한 내용을 모두 콘솔에 출력한다
for(int cnt=1;cnt<=10;cnt++) {
		try {
			if(cnt%3==0) {
				throw new UserException(cnt+" 번호 예외 던짐");
			}
		}catch(UserException e) {
			System.out.println("#예외 잡기#");
			System.out.println("참조변수 호출 : "+e);
			System.out.println("메시지 : "+e.getMessage());
			e.printStackTrace();
		}
}


class UserException extends Exception{
	// 생성자
	public UserException() {
		super();
	}

	public UserException(String message) {
		super(message);
	}
	// 기능메서드의 재정의 선언

	@Override
	public String getMessage() {
		// TODO Auto-generated method stub
		return "[재정의 메시지] "+super.getMessage();
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "[재정의 참조값] "+super.toString();
	}

	@Override
	public void printStackTrace() {
		System.out.println("# 재정의 출력 #");
		super.printStackTrace();
	}
}
profile
아자아자 화이팅
post-custom-banner

0개의 댓글