1 / 15

Chapter9 : 예외 처리

9.1 예외의 개요 9.2 예외 관련 클래스 9.3 예외 처리 9.4 예외의 인위적 발생 9.5 호출 메소드에 예외 전달 9.6 사용자 정의 예외. Chapter9 : 예외 처리. 9.1 예외의 개요. 예외 : 프로그램 실행 중에 발생하는 예기치 않은 사건 예외가 발생하는 예 정수를 0으로 나누는 경우 배열의 첨자가 음수 또는 범위를 벗어나는 경우 부적절한 형 변환이 일어나는 경우 입출력을 위한 파일이 없는 경우 등 자바 언어는 프로그램에서 예외를 처리할 수 있는 기법을 제공.

nieve
Télécharger la présentation

Chapter9 : 예외 처리

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 9.1 예외의 개요 • 9.2 예외 관련 클래스 • 9.3 예외 처리 • 9.4 예외의 인위적 발생 • 9.5 호출 메소드에 예외 전달 • 9.6 사용자 정의 예외 Chapter9 : 예외 처리

  2. 9.1 예외의 개요 • 예외 : 프로그램 실행 중에 발생하는 예기치 않은 사건 • 예외가 발생하는 예 • 정수를 0으로 나누는 경우 • 배열의 첨자가 음수 또는 범위를 벗어나는 경우 • 부적절한 형 변환이 일어나는 경우 • 입출력을 위한 파일이 없는 경우 등 • 자바 언어는 프로그램에서 예외를 처리할 수 있는 기법을 제공

  3. 예외의 개요 - 예외가 발생되는 예 • 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의 묵시적인 예외 처리기 가동 • } • 에러 메시지 • 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)

  4. 9.2 예외 관련 클래스 • 자바는 예외를 객체로 취급 • 예외 관련 클래스를 java.lang 패키지에서 제공 • 자바 프로그램에서는 Error, RuntimeException 클래스의 하위 클래스들을 제외한 모든 예외를 처리하여야 한다 • 일반적으로 Error, RuntimeException 클래스(하위 클래스 포함)들과 연관된 예외는 프로그램에서 처리하지 않는다 • 이유 : 예외를 처리하여 얻는 이득보다 예외를 처리하기 위한 노력이 너무 크기 때문

  5. 예외 관련 클래스 - Exception 클래스 • Exception 클래스의 하위 클래스 NoSuchMethodException 메소드가 존재하지 않을 때 ClassNotFoundException 클래스가 존재하지 않을 때 CloneNotSupportedException 객체의 복제가 지원되지 않는 상황에서의 복제 시도 IllegalAccessException 클래스에 대한 부정 접근 InstantiationException 추상클래스나 인터페이스로부터 객체 생성하려 할 때 InterruptedException 스레드가 인터럽트 되었을 때 RuntimeException 실행시간 예외가 발생할 때

  6. 예외 관련 클래스 - RuntimeException 클래스 • RuntimeException 클래스의 하위 클래스 ArithmeticException 0 으로 나누는 등의 산술적인 예외 NegativeArraySizeException배열의 크기를 지정할 때 음수의 사용 NullPointerException null 객체의 메소드나 멤버 변수에 접근할 때 IndexOutOfBoundException배열이나 스트링의 범위를 벗어난 접근.하위클래스로 ArrayIndexOutOfBoundsException클래스와 StringIndexOutOfBoundsException 클래스를 제공 SecurityException보안을 이유로 메소드를 수행할 수 없을 때

  7. 9.3 예외 처리 • Error 와 RuntimeException 클래스 관련 예외는 처리 효율보다는 처리에 드는 노력이 너무 커 자바 프로그램에서 처리하지 않고 JVM에게 처리를 맡긴다 • Error 와 RuntimeException 외에 다른 클래스들과 연관된 예외들은 자바 프로그램에서 직접 처리하여야 한다. • 예외를 처리하는 방법은 두 가지 • 예외가 발생된 메소드 내에서 처리하는 방법(try, catch 절 사용) • 예외가 발생된 메소드를 호출한 메소드에게 예외의 처리를 넘겨주는 방법(throws 절 사용)

  8. 예외 처리 - 예외의 발생 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 파일이 없을 경우에 발생하는 예외의 처리를 요구한다.

  9. 예외 처리 - 예외의 발생 • 컴파일러는 앞의 프로그램에 대해 다음과 같은 에러 메시지를 나타낸다 • 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

  10. 예외 처리 - try, catch, finally 블록 사용 • 예외 처리 방법중 예외가 발생한 메소드 내에서 직접 처리하는 방법 : try, catch, finally 블록 사용 try { ...... // try 블록 : 예외가 발생할 가능성이 있는 문장을 지정한다 } catch(예외타입1 매개변수1) { ..... // 예외 처리 블록1 : 예외의 종류에 따라 처리하는 처리 블록 } .....……. ……….. catch(예외타입N 매개변수N) { ...... // 예외 처리 블록 N } finally { ...... // finally 블록 : 예외의 발생여부와 상관없이 무조건 수행되는 블록 }

  11. 예외 처리 - 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 + " 예외 발생"); } } }

  12. 예외 처리 - try, catch, finally 블록 사용 - 예 • 앞의 프로그램의 실행시 (컴파일러는 에러를 발생시키지 않는다) • a.txt 파일이 없다면 프로그램은 예외 처리 루틴을 실행하여 • 다음과 같은 결과를 출력한다 • C:\java\program>java IOExceptionError • 예외 처리 루틴 : java.io.FileNotFoundException: a.txt 예외 발생 • C:\java\program>

  13. 9.4 예외의 인위적 발생 • 프로그램에서 인위적으로 예외를 발생시킬 수 있다 • 예외를 발생시키기 위해 throw 문 사용 throw 예외객체; 또는 throw new 예외객체타입(매개변수);

  14. 9.5 호출 메소드에 예외 전달 • 예외를 직접 처리하지 않고 자신을 호출한 메소드에게 예외를 넘겨주는 방법(throws 절 사용) • 메소드 선언시 다음과 같은 방법으로 지정 public void c() throws 예외클래스[, 예외클래스, ….] 예 void throws-test() throws ArithmeticException, SecurityException, NullPointerException

  15. 9.6 사용자 정의 예외 • 사용자는 새로운 예외를 정의하여 사용할 수 있다 • 새로운 예외는 Exception 클래스로부터 상속되어 생성되어야 한다 class UserException1 extends Exception { // 사용자 정의 예외는 Exception 클래스로부터 상속 public UserException1(String message) { // 생성자 메소드 super(message); // 상위 클래스인 Exception 클래스의 생성자를 호출하여 // 예외 객체 생성 } }

More Related