Chap07 예외 처리

15
Chap07 예예 예예 Chap07 예예 예예 7.1 예예예 예예 7.2 예예 예예 예예예 7.3 예예 예예

description

Chap07 예외 처리. 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리. 7.1 예외의 개요. 예외 : 프로그램 실행 중에 발생하는 예기치 않은 사건 예외가 발생하는 예 정수를 0 으로 나누는 경우 배열의 첨자가 음수 또는 범위를 벗어나는 경우 부적절한 형 변환이 일어나는 경우 입출력을 위한 파일이 없는 경우 등 자바 언어는 프로그램에서 예외를 처리할 수 있는 기법을 제공. 에러 메시지 java.lang.ArithmeticException: / by zero - PowerPoint PPT Presentation

Transcript of Chap07 예외 처리

Page 1: Chap07  예외 처리

Chap07 예외 처리

Chap07 예외 처리7.1 예외의 개요7.2 예외 관련 클래스7.3 예외 처리

Page 2: Chap07  예외 처리

Chap07 예외 처리

7.1 예외의 개요예외 : 프로그램 실행 중에 발생하는 예기치 않은 사건

예외가 발생하는 예 정수를 0 으로 나누는 경우 배열의 첨자가 음수 또는 범위를 벗어나는 경우 부적절한 형 변환이 일어나는 경우 입출력을 위한 파일이 없는 경우 등

자바 언어는 프로그램에서 예외를 처리할 수 있는 기법을 제공

Page 3: Chap07  예외 처리

Chap07 예외 처리

예외가 발생되는 예

class Error { public static void main(String[] args) { x(); // x() 메소드 호출 } static void x() { y(); // y() 메소드 호출 } static void y() { z(); // z() 메소드 호출 } static void z() { int i = 1; int j = 0; System.out.println(i/j); // 1 을 0 으로 나눈다 . 예외 발생 } // JVM 의 묵시적인 예외 처리기 가동 }

7.1 예외의 개요

에러 메시지java.lang.ArithmeticException: / by zero at Error.z(Error.java:14) at Error.y(Error.java:9) at Error.x(Error.java:6) at Error.main(Error.java:3)

Page 4: Chap07  예외 처리

Chap07 예외 처리

7.2 예외 관련 클래스자바는 예외를 객체로 취급

예외 관련 클래스를 java.lang 패키지에서 제공 예외 관련 클래스 : 그림 7-1 참조

자바 프로그램에서는 Error, RuntimeException 클래스의 하위 클래스들을 제외한 모든 예외를 처리하여야 한다

일반적으로 Error, RuntimeException 클래스 ( 하위 클래스 포함 ) 들과 연관된 예외는 프로그램에서 처리하지 않는다 이유 : 예외를 처리하여 얻는 이득보다 예외를 처리하기 위한 노력이 너무

크기 때문

Page 5: Chap07  예외 처리

Chap07 예외 처리

7.2 예외 관련 클래스

Object

Throwable

Error

Exception

LinkageError

ThreadDeath

VirtualMachineError

RuntimeException

CloneNotSupportedException

IllegalAccessException

InstantiationException

InterruptedException

NoSuchMethodException

ClassNotFoundException

IOException

EOFException

FileNotFoundException

InterruptedIOException

ClassCastException

ArithmeticException

NegativeArraySizeException

NullPointException

ArrayStoreException

IndexOutOfBoundException(ArrayIndexOutOfBoundsExceptionStringIndexOutOfBoundsException)

SecurityException

예외 클래스 계층구조

( 프로그램에서 처리하지 않고 ,JVM 에게 예외처리를 맡긴다 )

Page 6: Chap07  예외 처리

Chap07 예외 처리

7.2 예외 관련 클래스Exception 클래스의 하위 클래스

클래스 설명

NoSuchMethodException 메소드가 존재하지 않을 때

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

CloneNotSupportedException 객체의 복제가 지원되지 않는 상황에서의 복제 시도

IllegalAccessException 클래스에 대한 부정 접근

InstantiationException 추상클래스나 인터페이스로부터 객체 생성하려 할 때

InterruptedException 스레드가 인터럽트 되었을 때

RuntimeException 실행시간 예외가 발생할 때

Page 7: Chap07  예외 처리

Chap07 예외 처리

7.2 예외 관련 클래스RuntimeException 클래스의 하위 클래스

클래스 설명

ArithmeticException 0 으로 나누는 등의 산술적인 예외

NegativeArraySizeException

배열의 크기를 지정할 때 음수의 사용

NullPointerException null 객체의 메소드나 멤버 변수에 접근할 때

IndexOutOfBoundException

배열이나 스트링의 범위를 벗어난 접근 . 하위클래스로 ArrayIndexOutOfBoundsException 클래스 와 StringIndexOutOfBoundsException 클래스를 제공

SecurityException 보안을 이유로 메소드를 수행할 수 없을 때

Page 8: Chap07  예외 처리

Chap07 예외 처리

7.3 예외 처리Error 와 RuntimeException 클래스 관련 예외는 처리 효율보다는 처리에 드는 노력이 너무 커 자바 프로그램에서 처리하지 않고 JVM에게 처리를 맡긴다

Error 와 RuntimeException 외에 다른 클래스들과 연관된 예외들은 자바 프로그램에서 직접 처리하여야 한다 .

예외를 처리하는 방법은 두 가지 예외가 발생된 메소드 내에서 처리하는 방법 (try, catch 절 사용 ) 예외가 발생된 메소드를 호출한 메소드에게 예외의 처리를 넘겨주는 방법

(throws 절 사용 )

Page 9: Chap07  예외 처리

Chap07 예외 처리

7.3 예외 처리예외의 발생

import java.io.*;class IOExceptionError { public static void main(String args[]) { FileReader file = new FileReader("a.txt"); // 만일 a.txt 파일이 없다면 ? int i; while((i = file.read()) != -1) { System.out.print((char)i); } file.close(); }}

이 프로그램은 컴파일러에 의해 에러가 발생된다 .즉 컴파일러는 a.txt 파일이 없을 경우에 발생하는 예외의처리를 요구한다

Page 10: Chap07  예외 처리

Chap07 예외 처리

7.3 예외 처리• 컴파일러는 앞의 프로그램에 대해 다음과 같은 에러 메시지를 나타낸다

IOExceptionError.java:7: Exception java.io.FileNotFoundException must be caught, or it must be declared in the throws clause of this method. FileReader file = new FileReader("a.txt"); ^IOExceptionError.java:11: Exception java.io.IOException must be caught, or it must be declared in the throws clause of this method. while((i = file.read()) != -1) ^2 errors

Page 11: Chap07  예외 처리

Chap07 예외 처리

7.3 예외 처리7.3.1 메소드 내에서 예외를 직접 처리하는 방법 - try, catch, finally 블록

사용 예외 처리 방법 중 예외가 발생한 메소드 내에서 직접 처리하는 방법

try {...... // try 블록 : 예외가 발생할 가능성이 있는 문장을 지정한다

}catch( 예외타입 1 매개변수 1) { ..... // 예외 처리 블록 1 : 예외의 종류에 따라 처리하는 처리 블록}............catch( 예외타입 N 매개변수 N) { ...... // 예외 처리 블록 N}finally {...... // finally 블록 : 예외의 발생여부와 상관없이 무조건 수행되는 블록}

Page 12: Chap07  예외 처리

Chap07 예외 처리

7.3 예외 처리예외 처리 - try, catch, finally 블록 사용 예

import java.io.*;class IOExceptionError { public static void main(String args[]) { try { // 예외가 발생할 가능성이 있는 문장을 try 블록으로 지정 FileReader file = new FileReader("a.txt"); int i; while((i = file.read()) != -1) { System.out.print((char)i); } file.close(); } catch(Exception e) { // 발생된 예외를 처리하는 부분 System.out.println(" 예외 처리 루틴 : " + e + " 예외 발생 "); } }}

Page 13: Chap07  예외 처리

Chap07 예외 처리

7.3 예외 처리예외 처리 - try, catch, finally 블록 사용 예

앞의 프로그램의 실행시 ( 컴파일러는 에러를 발생시키지 않는다 ) a.txt 파일이 없다면 프로그램은 예외 처리 루틴을 실행하여다음과 같은 결과를 출력한다

C:\java\program>java IOExceptionError예외 처리 루틴 : java.io.FileNotFoundException: a.txt 예외 발생C:\java\program>

Page 14: Chap07  예외 처리

Chap07 예외 처리

7.3 예외 처리예제 : ExceptionError1.java

예제 : ExceptionError2.java

예제 : ExceptionSearch.java

Page 15: Chap07  예외 처리

Chap07 예외 처리

7.3 예외 처리7.3.2 호출 메소드에 예외를 전달하는 방법 - throws 절 사용

메소드 선언 시 다음과 같은 방법으로 지정

public void c() throws 예외클래스 [, 예외클래스 , ….]

void throws-test() throws ArithmeticException, SecurityException, NullPointerException

예제 : ExceptionTrans.java