[Java] Exception

● 예외 처리

(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

댓글

Designed by JB FACTORY