예외란? 

- 예외는 오류의 일종이며 프로그램이 수행시 또는 컴파일시에 중단상태를 만들어 버린다.


- 중단된다는 점은 Error와 같지만 Error와는 다르게 예외는 예외에 대해 미리 예외코드를 작성해 대처할 수 있다.
- 오류가 발생하면 발생된 오류를 설명하는 객체를 생성하는데 (예외도 하나의 객체로 취급)

  그 객체를 예외객체(exception object)라고 한다.

- 예외객체를 생성하는것은 throw (예외를 던진다) 

  예외객체를 처리하는것은 catch (예외를 던진다)

 

 예외처리란?

> Exception 예외가 발생할 것을 대비하여 미리 예측해 이를 소스상에서 제어하고 처리하도록 만드는 것이다

   프로그램 종료를 막고 정상 실행 상태로 유지하도록 처리한다

 

 예외를 처리하기 위해선?

> Excption을 처리하기 위해 자바에서는 java.lang.Exception (최상위 부모 클래스)를 제공한다

  따라서 모든 Exception들의 조상은 java.lang.Exception이다

 

 예외를 처리 코드블럭

 Exeption 발생 할때!

try 블록 수행 -> catch 블록 수행 -> finally 블록 수행 (생략가능)

 

 Exeption 미발생!

try 블록 수행 -> catch 블록 ->finally 블록 수행 (생략가능)

! 주의점

- try와 catch블록은 별도의 독립된 블록이다

- 예외의 종류에 따라서 여러 개의 catch 블록이 있을 수 있으며, 이 중에서 발생한 예외의 종류와 일치하는 catch 블록만 실행된다

try 블록 실제 코드가 들어가는 곳으로써 예외Exception가 발생할 가능성이 있는 코드
catch 블록 Try블록에서 Exception이 발생하면 코드 실행 순서가 Cactn쪽으로 오게된다
즉 예외에 대한 후처리 코드
finally 블록 Try블록에서 Exception 발생유무에 상관없이 무조건 수행되는 코드 (옵션)
try { //예외가 발생할 수 있는 코드 }
catch { //예외를 처리하는 코드 }
finally { //try블록이 끝나면 무조건 실행되는 코드 }

보충 설명

 

 

더보기

 finally 블록

finally문은 try블록에서 사용했던 자원을 해제하기 위해서이다

try블록에서 파일열기,네트워크연결,데이터베이스 연결과 같은 작업을 했다면 작업이 완료된 후에는 파일 닫기, 

트워크 연결 종료, 데이터베이스 연결 종료와 같은 자원해제 작업을 해야하는데

만일 자원해제 작업을 하지 않으면 다른 프로그램에서 자원들이 필요할 때 사용할 수 없는 상황이 발생할 수도 있다

 

예시1

1

✔ 예시2

 예시3

 

 예외 처리 메서드

예외 출력 메서드

제어자 및 타입 메서드 설명
String getMessage() 에러의 원인을 간단하게 출력한다
String printStackTrace() 에러의 발생근원지를 찾아서 단계별로 에러를 출력한다
void toString 에러의 Exception 내용과 원인을 출력한다

 

보충 설명

 

 예외

    분류 예외 설명
Throwable
예외의 선조
Excption
예외
RuntimeExcption
예외 클래스
ArithmeticExcption 어떤 수를 0으로 나눌 때 발생
NullPointerExcption ㆍ객체 참조가 없는 상태
String data=null;
System.out.println(data.length());
ClassCastExcption 적절치 못한 클래스로 형변환하는 경우에 발생 (타입 변환이 되지 않을 경우)

NegativeArraySizeExcption 배열의 크기가 음수값인 경우 발생
ArrayIndexOutOfBoundExcption 배열을 참조하는 인덱스가 잘못된 경우, 인덱스 범위가 초과하여 사용할 경우 발생
int[] arr=new arr[5];
arr[5]=100;
IOExcption IOExcption 파일의 끝을 지나쳐 읽으려고 하는 경우나
잘못된 URL을 사용하는 경우에 발생
Error " " "

 

예시

 

'Language > Java' 카테고리의 다른 글

컬렉션 (Collection)  (0) 2022.02.23
제네릭 Generic  (0) 2022.02.23
내부 클래스 (중첩 클래스)  (0) 2022.02.21
다형성 (Polymorphism)  (0) 2022.02.21
인터페이스 (interface)  (0) 2022.02.21