java programming 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf ·...

21

Upload: others

Post on 31-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우
Page 2: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

예외 ?

프로그램 실행 중에 발생하는 예기치 않은 사건

예외가 발생하는 경우

정수를 0으로 나누는 경우

배열의 크기보다 큰 인덱스로 배열의 원소를 접근하는 경우

파일의 마지막 부분에서 데이터를 읽으려고 하는 경우

예외처리

프로그램에 문제를 발생시키지 않고 프로그램을 실행할 수 있게 적절한

조치를 취하는 것

자바는 예외처리기를 이용하여 예외처리를 할 수 있는 기법 제공

자바는 예외를 객체로 취급 !!

Page 3: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

divisor을 0으로입력해 보자 !!

결과는 ??

ArithmeticException 예외

나뉨수를 입력하시오:100나눗수를 입력하시오:0Exception in thread "main" java.lang.ArithmeticException: / by zeroat ExceptionExample1.main(ExceptionExample1.java:12)

Page 4: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

try - catch (- finally) 문

발생한 예외에 대해 개발자가 작성한 프로그램 내에서 대응하는 것

try{예외가 발생할 가능성이 있는 실행 문 (try 블록)

}catch(처리할 예외 타입 선언){

예외 처리 문 (catch 블록)}finally{ //finally 생략 가능

예외 발생 여부와 상관없이 무조건 실행되는 문장}

Page 5: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

try블록에서 예외가 발생하지 않은 정상적인 경우 try블록에서 예외가 발생한 경우

try {....실행문....

}

catch (처리할 예외 타입 선언) {

예외 처리문}

finally {finally 블록 문

}

try {....실행문....

}

catch (처리할 예외 타입 선언) {

예외 처리문}

finally {finally 블록 문

}

에외발생

Page 6: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

예외 예외가 발생할 때

ArithmeticException 정수를 0으로 나눌 때 발생

NullPointerException Null 레퍼런스 참조할 때 발생

ClassCastException 변환할 수 없는 타입으로 객체를 변환할 때 발생

OutOfMemoryException 메모리가 부족한 경우 발생

ArrayIndexOutOfBoundsException 배열의 범위를 벗어난 접근 시 발생

IllegalArgumentException 잘못된 인자 전달 시 발생

IOException 입출력 동작 실패 또는 인터럽트 시 발생

NumberFormatException 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환 시 발생

ClassNotFoundException 클래스가 존재하지 않을 때 발생

IlligalAcessException 클래스에 대한 접근이 금지된 경우

Page 7: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

import java.util.Scanner;public class ExceptionExample2 {

public static void main (String[] args) {Scanner rd = new Scanner(System.in);int divisor = 0;int dividend = 0;

System.out.print("나뉨수를 입력하시오:");dividend = rd.nextInt();System.out.print("나눗수를 입력하시오:");divisor = rd.nextInt();try {

System.out.println(dividend+"를 "+divisor+"로 나누면 몫은 "+ dividend/divisor+"입니다.");} catch (ArithmeticException e) {

System.out.println("0으로 나눌 수 없습니다.");}

}} 나뉨수를 입력하시오:100

나눗수를 입력하시오:00으로 나눌 수 없습니다.

ArithmeticException예외 발생

Page 8: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우
Page 9: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우
Page 10: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

키보드로부터 두 정수를 입력 받은 후, 정수를 0으로 나눌 때 발생하는ArithmeticException 을 처리하는 프로그램을 작성하라.1) 예외발생 하지 않은 경우2) 0 나누기를 수행하여 예외처리한 경우

Page 11: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

배열의 인덱스가 범위를 벗어날 때 발생하는 ArrayIndexOutOfBoundsException을 처리하는 프로그램을 작성하라.1) 배열의 크기가 5인 intArray[] 생성 후, 배열의 인덱스에 하나씩 접근하여 출력

배열의 인덱스가 5인 배열의 방에 접근할 때 발생하는 예외 처리할 것

Page 12: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

문자열을 정수로 변환할 때 발생하는 NumberFormatException을 처리하는 프로그램을 작성하라.1) String[] stringNumber = {“12”, “23”, “998”, “3.141592”} 을 정수로 변환하여 출력2) 이때, 문자열을 정수로 변환할 할 때 발생하는 예외처리

Page 13: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

예외처리를 직접 하지않고, 자신을 호출한 메소드에게 예외를 넘겨주

는 방법

처리 해야하는 모든 예외를 하나의 메소드에서 처리하게 할 때 유용

void 메소드이름() throws 예외클래스 [, 예외클래스]{

//메소드 내용}

예)void a() throws ArithmeticException, NumberFormatException{

// 메소드 내용}

Page 14: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우
Page 15: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우
Page 16: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우
Page 17: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우
Page 18: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

프로그램에서 인위적으로 예외를 발생 시킬 수 있음

예외 발생시키기 위해 throw문 사용

throw 예외 객체;

또는

throw new 예외객체타입(매개변수);

Page 19: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우
Page 20: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

사용자는 새로운 예외를 정의 하여 사용 가능

새로운 예외는 Exception 클래스로부터 상속되어 생성해야 함

class UserException1 extends Exception {

//사용자 정의 예외는 Exception클래스로부터 상속

public UserException1(String message){ //생성자 메소드

super(message);

// 상위 클래스인 Exception 클래스의 생성자를 호출하여

예외 객체 생성

}

}

Page 21: JAVA PROGRAMMING 실습 09. 예외처리 - gnu.ac.krclass.gnu.ac.kr/~smjeong/pdf/java/10.pdf · 2017-12-04 · 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우

출력결과는 ?