예외처리의 필요성
오류의 3종류
컴파일 오류
런타임 오류
논리적 오류
exception 클래스들은 사용자의 실수와 같은 외부적 요인에 의해 발생되고
runtime Exception 클래스들은 프로그래머의 실수로 발생하는 예외들과 관련이 깊다
예외를 처리 하기
try - catch 문 사용
class hello
{
public static void Main()
{
int number = 10;
int result = 0;
for (int i = 0; i < 10; ++i)
{
try
{
result = number / (int) (Math.Random() * 10);
}
catch (ArithmeticException eception)
{
System.out.println("0");
}
}
}
}
위와 같이 예외 처리를 해주면 프로그램 실행중 나타나는 exception 들을 handling가능하다.
즉 try - catch 문은 try 구문 내에서 예외가 발생하면 catch문에 있는 예외를 반환하고 없다면 try - catch문을 빠져나가서 계속 수행하게 된다.
하지만 오류가 없는 경우에는 catch안에 있는 문장이 실행되지 않고
try 문에 오류가 나면 그 이후 문장은 실행되지 않는다
try{
system.out.println(1);
system.out.println(0/0); ->여기서 오류가 나기때문에 아래 문구는 실행되지 않음.
system.out.println(2);
} catch{
// 실행
}
printStackTrace
printstacktrace 메서드를 통해서 예외당시 호출스택에 있었던 메서드의 정보와 예외 메세지를 화면에 출력해준다
getMessage
발생한 예외 클래스의 인스턴스에 저장된 메세지를 얻을 수 있다.
멀티 catch 블럭
catch (.... ) { }
catch (.... ) { }
이런식으로 쓰기보다는
catch ( a | b) {} 이런식으로 조건을 더해줘서 짧게 코드를 줄일 수 있다.
또한 throws 를 사용해 메서드에서 예외를 선언할 수 있는데
void method () throws Exception1, Exception2 ....
{ }
과 같은 방식으로 모든 예외들을 설정해 줄 수 있다.
finally 블럭
finally 블럭은 예외의 발생여부와 상관없이 실행되어야 할 코드를 포함시킬 목적으로 사용된다
try {
} catch (exception ex) {
} finally {
//예외 발생여부에 관계 없이 항상 수행되어야 할 문장
}
728x90
최근댓글