본문 바로가기
Java (국비)/Java 이론

예외와 예외처리

by Hwanii_ 2023. 5. 19.
728x90

그동안, 예외를 만난 경험이 있다.

=> 원인을 분석 하고, 해결방안을 찾고 해결 했다.

 

코딩 자체에는 문제가 없지만 (문법에 이상이 없거나 등)

"실행시" 발생하는 문제

==

"예외" 라고 한다.

 

예외 처리를 하면 좋은점 : 

 

1. 프로그램이 비정상적으로 종료되는것을 막을 수 있다.

2. 예외가 발생되면서 커질 수 있는 피해들을 최소화 하는것이 목표 !

 

사용방법 :

 

try {

실행시 예외가 발생할수도 있는 코드

예외가 발생되면, "즉시" catch문으로 이동.

}

 

catch (예외클래스 e) {

해당 예외클래스의 문제가 발생되면 이곳의 코드를 수행 

}

 

finally {

예외 발생 여부와 무관하게 항상 수행되는 코드.

통신을 위해 확보해둔 모든 연결스트림을 해제 한다.

}

 

예시)

 

1. int형 타입의 배열을 3칸짜리로 생성.

2.

data[0] = 1;

data[1] = 2;

data[2] = 3;

3.

배열은 0번째 1번째 2번째 까지만 존재하므로,

data[3] 배열은 존재 하지 않는다.

 

하지만, 빨강색 밑줄이 쳐있지는 않다.

문법상에는 이상이 없기 때문이다.

 

컴퓨터는 실행을 하기 전까지는 모르고,

실행을 하고나서 발생하는 문제를 "예외" 라고 한다.

 

4.

예외가 발생할 수 있는 코드를 try 문에 넣기.

sysout(data[3])

5.

catch(ArrayIndexOutOfBoundsException e) {

(예외클래스의 문제가 발생하면 중괄호 안의 코드가 실행된다)

sysout(없는 인덱스)

}

 

예시 2)

 

일때,

1. 확인용 출력문

2. a / b

3. 확인용 출력문

 

Console

확인 1만 출력되고,

10 / 0 이랑, 확인 2는 출력이 되지 않은 것을 볼 수 있다.

 

이유 :

divide by zero. (0으로는 나눌 수 없어) (b가 0이라서 생기는 이슈)

 

그래서,

 

ArithemeticException 을 넣어,

catch 문에

위와 같이 넣게 되면,

 

try 문에서 a / b가 예외처리가 되면서,

catch문으로 넘어오게 되고,

확인 3이 출력되고,

a / 1은 10이므로 10이 출력,

이상이 없으니,

확인 4도 출력되는 모습을 볼 수 있다.

 

Console

 

만약 catch 문에도 예외가 발생할만한 코드를 넣으면

실행시 예외가 발생하게 된다.

반응형