Section 02 Exception 28 Error Exception Exception java

  • Slides: 46
Download presentation

Section 02 예외 처리와 Exception 클래스 (2/8) 예외 상황의 종류 및 예외 클래스의 계층

Section 02 예외 처리와 Exception 클래스 (2/8) 예외 상황의 종류 및 예외 클래스의 계층 구조 Error 클래스의 자손이 발생하면 치명적인 오류이므로 프로그램 이 종료되는 것이 당연하다. Exception 클래스의 자손이 발생하면 덜 치명적인 오류이므로 프로그램이 종료되는 것보다는 오류 메 시지 등을 내보내고 오류 발생 가능성이 있는 부분에 대해서 미 리 프로그램으로 처리를 해주는 것이다. 즉, 에외처리의 대상은 Exception 클래스 및 자손 클래스들이다. 예외 클래스는 java. lang 패키지 내에 속하지만, IOException 클래스 및 그 하위 클래스는 java. io 패키지에 속한다. Runtime. Exception Class. Case. Exception Arithmetic. Exception Object Clone. Not. Supported. Exception Negative. Array. Size. Exception Throwable Error Exception Illegal. Access. Exception Null. Pointer. Exception Instantiation. Exception Array. Store. Exception Index. Out. Of. Bound. Exception Interrupted. Exception Security. Exception Error Not. Such. Method. Exception EOFException Class. Not. Found. Exception Linkage. Error Thread. Death Virtual. Machine. Error Interrupted. IOException File. Not. Found. Exception 4

[실습하기 10 -1] 숫자를 0으로 나누었을 때 예외 처리 (try-catch-finally 문 이용) (2/3) Jv_10_1.

[실습하기 10 -1] 숫자를 0으로 나누었을 때 예외 처리 (try-catch-finally 문 이용) (2/3) Jv_10_1. java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 class Jv_10_1 { public static void main(String[] args) { System. out. println("===== 예외처리 프로그램 (try-catch-finally) ====="); try { int ken = 0; int boo = 50 / ken; } catch (Arithmetic. Exception e) { System. out. println(e); } finally { System. out. println("==== finally step ===="); } } } 10

[실습하기 10 -2] 숫자를 0으로 나누었을 때 예외 처리 (throws 문 이용) (2/3) Jv_10_2.

[실습하기 10 -2] 숫자를 0으로 나누었을 때 예외 처리 (throws 문 이용) (2/3) Jv_10_2. java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 class Jv_10_2 { static void calc() throws Arithmetic. Exception { int ken = 0; int boo = 50 / ken; } public static void main(String[] args) { System. out. println("===== 예외처리 프로그램 (throws) ====="); try { calc(); } catch (Arithmetic. Exception e) { System. out. println(e); } finally { System. out. println("==== finally step ===="); } } } 14

Section 03 예외 처리와 Exception 클래스 (8/8) throw 문의 사용형식 throw new 예외명(); 16

Section 03 예외 처리와 Exception 클래스 (8/8) throw 문의 사용형식 throw new 예외명(); 16

[실습하기 10 -3] No. Digit. Exception이라는 예외를 발생시키고, throw 문을 이 용하여 예외 처리

[실습하기 10 -3] No. Digit. Exception이라는 예외를 발생시키고, throw 문을 이 용하여 예외 처리 (2/3) 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class No. Digit. Exception extends Exception { } Jv_10_3. java public class Jv_10_3 { public static void main(String[] args) throws java. io. IOException { System. out. println("===== 사용자 정의 예외 (throw) ====="); char c; int sum = 0; try { } } for (int i=0; i < 5; i++) { c = (char) System. in. read(); if (!Character. is. Digit(c)) throw new No. Digit. Exception(); else sum += c - '0'; } System. out. println("입력된 숫자의 합 ->" + sum); } catch (No. Digit. Exception e) { System. out. println("입력된 값 -> 숫자 아님"); } 18

[실습하기 10 -4] Runnable 인터페이스의 run() 메소드를 구현 (2/4) Jv_10_4. java 01 02 03

[실습하기 10 -4] Runnable 인터페이스의 run() 메소드를 구현 (2/4) Jv_10_4. java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 class Jv_10_4 implements Runnable { Thread t; } public static void main(String[] args) { System. out. println("***** 다중 쓰레드(Runnable 이용) *****"); Jv_10_4 r 1 = new Jv_10_4("Thread 1"); Jv_10_4 r 2 = new Jv_10_4("Thread 2"); Jv_10_4 r 3 = new Jv_10_4("Thread 3"); } public Jv_10_4(String str) { t = new Thread(this, str); t. start(); public void run() { System. out. println("run() start! => " + t. get. Name()); for (int i=0; i<3; i++) { System. out. println("run() STEP" + i + " : " + t. get. Name()); try { Thread. sleep(100); 26

[실습하기 10 -4] Runnable 인터페이스의 run() 메소드를 구현 (3/4) Jv_10_4. java 21 22 23

[실습하기 10 -4] Runnable 인터페이스의 run() 메소드를 구현 (3/4) Jv_10_4. java 21 22 23 24 25 26 27 } catch (Interrupted. Exception e) { e. print. Stack. Trace(); } } System. out. println("run() end! => " + t. get. Name()); 27

[실습하기 10 -5] Thread 클래스를 확장한 클래스에서 run() 메소드를 오버라이드 (2/4) Jv_10_5. java 01

[실습하기 10 -5] Thread 클래스를 확장한 클래스에서 run() 메소드를 오버라이드 (2/4) Jv_10_5. java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 class Jv_10_5 extends Thread { Thread t; public static void main(String[] args) { System. out. println("***** 다중 쓰레드(Thread 이용) *****"); Jv_10_5 r 1 = new Jv_10_5("Thread 1"); Jv_10_5 r 2 = new Jv_10_5("Thread 2"); Jv_10_5 r 3 = new Jv_10_5("Thread 3"); } } public Jv_10_5(String str) { t = new Thread(this, str); t. start(); public void run() { System. out. println("run() start! => " + t. get. Name()); for (int i=0; i<3; i++) { System. out. println("run() STEP" + i + " : " + t. get. Name()); try { Thread. sleep(100); 30

[실습하기 10 -5] Thread 클래스를 확장한 클래스에서 run() 메소드를 오버라이드 (3/4) Jv_10_5. java 22

[실습하기 10 -5] Thread 클래스를 확장한 클래스에서 run() 메소드를 오버라이드 (3/4) Jv_10_5. java 22 23 24 25 26 27 28 } catch (Interrupted. Exception e) { e. print. Stack. Trace(); } } System. out. println("run() end! => " + t. get. Name()); 31

[실습하기 10 -6] 스레드의 동기화(Synchronization) 방식 사용하지 않기 (2/5) 01 02 03 04 05

[실습하기 10 -6] 스레드의 동기화(Synchronization) 방식 사용하지 않기 (2/5) 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 class Jv_10_6_Buffer { private int data; private boolean data_avail = false; public int get() { if (data_avail == true) { data_avail = false; } return data; } public void put(int d) { data = d; } } Jv_10_6. java class Jv_10_6_Producer extends Thread { private Jv_10_6_Buffer buf; private int data; public Jv_10_6_Producer(Jv_10_6_Buffer b) { buf = b; } 35

[실습하기 10 -6] 스레드의 동기화(Synchronization) 방식 사용하지 않기 (3/5) 21 22 23 24 25

[실습하기 10 -6] 스레드의 동기화(Synchronization) 방식 사용하지 않기 (3/5) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Jv_10_6. java public void run() { for (int i=0; i < 10; i++) { data = (int)(Math. random()*1000); buf. put(data); System. out. println("* PRODUCER " + data); try { sleep((int)(Math. random()*1000)); } catch (Interrupted. Exception e) { } } class Jv_10_6_Consumer extends Thread { private Jv_10_6_Buffer bf; private int data; public Jv_10_6_Consumer(Jv_10_6_Buffer b) { bf = b; } public void run() { for (int i=0; i < 10; i++) { 36

[실습하기 10 -6] 스레드의 동기화(Synchronization) 방식 사용하지 않기 (4/5) Jv_10_6. java 41 42 43

[실습하기 10 -6] 스레드의 동기화(Synchronization) 방식 사용하지 않기 (4/5) Jv_10_6. java 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 data = bf. get(); System. out. println("# consumer =>" + data); try { sleep((int)(Math. random()*1000)); } catch (Interrupted. Exception e) { } } public class Jv_10_6 { public static void main(String[] args) { Jv_10_6_Buffer bbb = new Jv_10_6_Buffer(); Jv_10_6_Producer td 1 = new Jv_10_6_Producer(bbb); Jv_10_6_Consumer td 2 = new Jv_10_6_Consumer(bbb); td 1. start(); td 2. start(); } } 37

[실습하기 10 -7] 스레드의 동기화(Synchronization) 방식 사용하기 (2/7) 01 02 03 04 05 06

[실습하기 10 -7] 스레드의 동기화(Synchronization) 방식 사용하기 (2/7) 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 class Jv_10_7_Buffer { private int data; private boolean data_avail = false; Jv_10_7. java public synchronized int get() { while (data_avail == false) { try { wait(); } catch (Interrupted. Exception e) {} } data_avail = false; notify. All(); return data; } public synchronized void put(int d) { while (data_avail == true) { try { wait(); } catch (Interrupted. Exception e) {} } 40

[실습하기 10 -7] 스레드의 동기화(Synchronization) 방식 사용하기 (3/7) 22 23 24 25 26 27

[실습하기 10 -7] 스레드의 동기화(Synchronization) 방식 사용하기 (3/7) 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 data = d; data_avail = true; notify. All(); Jv_10_7. java } } class Jv_10_7_Producer extends Thread { private Jv_10_7_Buffer buf; private int data; public Jv_10_7_Producer(Jv_10_7_Buffer b) { buf = b; } public void run() { for (int i=0; i < 10; i++) { data = (int)(Math. random()*1000); buf. put(data); System. out. println("* PRODUCER " + data); try { sleep((int)(Math. random()*1000)); } catch (Interrupted. Exception e) { } } } 41

[실습하기 10 -7] 스레드의 동기화(Synchronization) 방식 사용하기 (4/7) 45 46 47 48 49 50

[실습하기 10 -7] 스레드의 동기화(Synchronization) 방식 사용하기 (4/7) 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 } Jv_10_7. java class Jv_10_7_Consumer extends Thread { private Jv_10_7_Buffer bf; private int data; public Jv_10_7_Consumer(Jv_10_7_Buffer b) { bf = b; } public void run() { for (int i=0; i < 10; i++) { data = bf. get(); System. out. println("# consumer =>" + data); try { sleep((int)(Math. random()*1000)); } catch (Interrupted. Exception e) { } } public class Jv_10_7 { public static void main(String[] args) { 42

[실습하기 10 -7] 스레드의 동기화(Synchronization) 방식 사용하기 (5/7) 67 68 69 70 71 72

[실습하기 10 -7] 스레드의 동기화(Synchronization) 방식 사용하기 (5/7) 67 68 69 70 71 72 73 Jv_10_7. java Jv_10_7_Buffer bbb = new Jv_10_7_Buffer(); Jv_10_7_Producer td 1 = new Jv_10_7_Producer(bbb); Jv_10_7_Consumer td 2 = new Jv_10_7_Consumer(bbb); td 1. start(); td 2. start(); } } 43

Thank you

Thank you