2017 - 08 - 25 (금)
참고 도서 : 자바의 정석(남궁성 저, 도우출판)
1 . 예외처리
프로그램 오류
- 컴파일 에러 : 컴파일할 때 발생하는 에러
- 런타임 에러 : 실행할 때 발생하는 에러. ( 에러와 예외가 있다. )
에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
>>예외는 반드시 처리해야 한다.
예외 처리 : 프로그램 실행 시 발생할 수 있는 예외를 미리 방지하는 코드를 작성하는 것.
try-catch문 : try 안의 내용이 에러면 catch 블럭 안의 문장을 실행시킨다.
try{
System.out.println("1"); //try문에 에러가 없다.
}catch(Exception e){ //모든 예외를 포괄적으로 Exception으로 처리
System.out.println("2"); //실행되지 않는다.
}
try{
System.out.println(0/0) // 0/0은 논리적 예외다.
}catch(ErithmeticException ae){ // ErithmeticException은 위와같은 논리적 예외를 잡아낸다.
System.out.println("예외발생")
}
try{
Exception e = new Exception("예외");
throw e; //예외를 고의로 발생시킴
}catch(Exception e){
e.printStackTrace(); //예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메세지를 화면에 출력한다.
}
finally 블럭 : 예외 발생여부와 관계없이 실행되어야 하는 코드를 넣는다.
try{
Exception e = new Exception("예외");
throw e; //고의 예외발생
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println("finally 블록 실행"); //예외의 유무에 관계없이 마지막에 실행시킨다.
}
>> 예외 종류
Exception 예제
public class NewExceptionTest {
public static void main(String args[]) {
try {
startInstall();
copyFiles();
}/*catch(SpaceException e) {
System.out.println("에러 메시지: "+ e.getMessage());
e.printStackTrace();
System.out.println("공간을 확보한 후에 다시 설치하시기바랍니다.");*/
catch(MemoryException me) {
System.out.println("에러메시지: "+ me.getMessage());
me.printStackTrace();
System.gc();
System.out.println("다시 설치를 시도하세요."); //MemoryException에 대한 예외가 발생한다.
}catch(ArithmeticException e){
System.out.println("여기서 에러남"); //이 예외는 발생하지 않는다.
}finally {
}
deleteTempFiles(); //catch문이 끝나면 다음 문장을 무조건 실행한다.
}
static void startInstall() throws ArithmeticException,MemoryException{
/*if(!enoughSpace())
throw new SpaceException("설치할 공간이 부족합니다.");*/
// int i = 1/0;
if(!enoughMemory())
throw new MemoryException("메모리가 부족합니다.");
}
static void copyFiles() {}
static void deleteTempFiles(){}
static boolean enoughSpace() {
return false;
}
static boolean enoughMemory() {
return false;
}
}
class SpaceException extends Exception{
SpaceException(String msg){
super(msg);
}
}
class MemoryException extends Exception{
MemoryException(String msg){
super(msg);
}
}
사실상 위의 예외들을 전부 Exception으로 처리할 수 있다. 하위 Exception들을 사용하는 이유는 좀더 세부적인 예외처리를 위해서이다. 다양한 예외 상황에 대비할 수 있다.