[Java] Exception
- BACKEND/Java
- 2017. 10. 30. 12:07
● 예외 처리 (1) 예외가 발생했을 때 예외에 대한 제어권을 시스템(JVM)이 아니라 개발자가 가질 수 있게 하는 방법 (2) 왜 쓰는가? Why? 1) 예외가 발생했을 때 메시지에 대한 표현 문제 2) 프로그램의 비정상적인 종료 (3) 어떻게 쓰는가? How? 1) try/catch block try{ //모니터링기능 , try로 묶은곳에서 에러가 발생하는지 확인하는 구문 ... } catch(...){ // 시스템에서 처리하지 않고 개발자가 직접 처리할 수 있도록 하는 구문 ... } - 다중으로 catch를 사용해서 더 넓은 부분의 에러를 잡을수있다. 2) throw - 예외를 던진다, 테스트, 예외 처리 주체를 변경 - 블럭 내부(메서드 내부)에서만 던질 수 있다 - 단 한 개만 던질 수 있다. - try문에서 사용하면 일부러 예외를 만들어 내서 처리함 - catch문에서 사용하면 다른 곳에서 대신 처리해줘야한다. 3) throws - 예외를 던진다. - 대신 예외처리를 부탁할 때 사용 - 블럭 외부(메서드 외부)에서만 던질수 있다. - 여러 개 던질 수 있다. 4) finally 블럭 - 반드시 try/catch와 함께 사용 try{ ... }catch(...){ ... }finally{ } - 반드시 실행해야만 하는 코드 (4) 관련 클래스 Throwable Error -> 하드웨어적 문제들만 따로 모아놓은 클래스 Exception -> 로직이나 코딩상의 문제들 RuntimeException -> 컴파일은 되지만 실행할때 에러가나는 예외들 |
package Exception; public class ExceptionTest1 { public static void main(String[] args) { int [] arr = new int[3]; System.out.println("첫번째 예외처리 테스트");
try {
//arr[7] = 10; int i = 10/0;
}catch(ArrayIndexOutOfBoundsException err){ err.printStackTrace(); System.out.println("배열의 범위를 벗어났습니다."); } catch(ArithmeticException err) { System.out.println("산술연산을 잘못했다."); }catch(Exception err) { System.out.println("예외 발생"); } System.out.println("이 메세지가 보이는가?"); } } package Exception; public class ExceptionTest3 { public static void main(String[] args) { try { System.out.println("여기는 try블럭 내부입니다."); throw new RuntimeException("...상황에서 예외를 던짐"); }catch(RuntimeException err) { System.out.println("잘 처리됨..."+ err.getMessage()); //throw err; //return; System.exit(0); //종료 메서드 (가급적이면 사용하지 않는게 좋음) }finally { System.out.println("여기는 반드시 실행됨..."); } //System.out.println("try/catch가 끝나고 난 뒤.."); } } package Exception; import java.io.IOException; import javax.swing.plaf.synth.SynthSeparatorUI; public class ExceptionTest4 { static void second() throws IOException, ArithmeticException{ System.out.println("second 호출됨");
System.out.println("입력:"); char data = (char)System.in.read();
int i = 10/0; } static void first() throws Exception{ System.out.println("first 호출됨"); second();
} public static void main(String[] args) { // throws 예제\ try { first(); }catch(Exception err) { System.out.println("메인에서 처리함"); err.printStackTrace(); } } } |
'BACKEND > Java' 카테고리의 다른 글
[Java] Thread (0) | 2017.11.01 |
---|---|
[Java] IO (0) | 2017.10.30 |
[Java] 연습코딩-2 (0) | 2017.10.27 |
[Java] 연습코딩-1 (0) | 2017.10.27 |
[Java] Generic (0) | 2017.10.27 |