CH10

yeon·2022년 12월 4일
0

이것이자바다

목록 보기
8/15

1. 예외와 예외 클래스

에러

하드웨어의 오동작/고장으로 인한 오류로 프로그램이 종료가 되어 정상 실행 상태로 돌아갈 수 없음

예외

사용자의 잘못된 조작 / 개발자의 잘못된 코딩으로 인한 오류로 프로그램 종료가 발생하지만 예외 처리를 추가하면 정상 실행 상태로 돌아갈 수 있음

예외 종류

일반 예외 (Exception)

예외 처리 코드가 없다면 컴파일 되지 않음

실행 예외 (RuntimeException)

예외 처리 코드 생략하더라도 컴파일 되지만 경험에 따라 예외 처리 코드 작성 필요

예외 클래스

java.lang.Exception

  • java.lang.ClassNotFoundException
  • java.lang.InterruptException
  • java.lang.RuntimeException
    - java.lang.NullPointException
    - java.lang.NumberFormatException

2. 실행 예외

NullPointerException

객체 참조가 없는 상태로 Null 값을 갖는 참조변수로 객체 접근 연산자 사용한 경우 발생함

ArrayIndexOutOfBoundsException

배열에서 인덱스 범위를 초과하여 사용한 경우 발생

NumberFormatException

문자열을 숫자로 반환하는 경우에 숫자로 변환될 수 없는 문자가 포함된 경우 발생

ClassCastException

타입 변환이 되지 않을 경우에 발생

3. 예외 처리 코드

예외가 발생한 경우 프로그램 종료를 막고 정상 실행을 유지할 수 있도록 처리하는 코드
try-catch-finally 구문

5. 자동 리소스 닫기

try-with-resource

예외 발생 여부와 관계없이 사용했던 리소스 객체의 close() 메소드 호출 통해 안전하게 리소스 닫아줌

FileInputStream fis = null;
try{
	fis = new FileInputStream("file.txt");
    ...
} catch(IOException e){
	...
} finally {
	if(fis != null){
    	try{
        	fis.close();
        }catch(IOException e){
        	...
        }
    }
}


try(FileInputStream fis = new FileInputStream("file.txt")){
	...
} catch(IOException e){
	...
}


try(
	FileInputStream fis = new FileInputStream("file1.txt");
	FileOutputStream fos = new FileOutputStream("file2.txt");
	){
    ...
} catch(IOException e){
	...
}

리소스 객체의 조건
java.lang.AutoCloseable 인터페이스를 구현하는 객체

6. 예외 처리 떠넘기기

throws

메소드 선언부 끝에 작성하여 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘김

public void method1(){
	try{
    	method2();
    }catch(ClassNotFoundException e){
    	...
    }
}

public void mehtod2() throws ClassNotFoundException{
	Class clazz = Class.forName("java.lang.String2");
}

7. 사용자 정의 예외와 예외 발생

자바 표준 API에서 제공하지 않는 예외 / 애플리케이션 서비스와 관련된 예외는 사용자가 정의

public class CustomException extends [Exception|RuntimeException] {
	public CustomException(){}
    public CustomException(String message){
    	super(message);
    }
}

public void method() throws CustomException{
	throw new CustomException("메시지");
}

8. 예외 정보 얻기

getMessage()

예외를 발생시킬 때 생성자 매개값으로 사용한 메시지를 리턴

catch(Exception e){
	String message = e.getMessage();
}

printStackTrace()

예외 발생 코드 추적한 내용 모두 콘솔에 출력

profile
🐥

0개의 댓글

관련 채용 정보