10. 예외 처리
예외 처리 프로그램이 실행하는 동안 발생될 수 있는 비정상적인 조건(exception) 예외 처리시 프로그램의 비정상적 종료 오류 메시지 출력 예외처리기 사용: 프로그램의 신뢰성 제공.
[예제 1.59] 0으로 나누는 예외 발생 class Uncaught { public static void main(String[] args) { int a = 0, b; b = 100 / a; System.out.println(“Is this printed? "); } } [실행결과] java.lang.ArithmeticException: / by zero at Uncaught.main(Uncaught.java:4)
[예제 1.60] try-catch의 의미 이해 class Caught { public static void main(String[] args) { int a = 0, b; try { b = 100 / a; System.out.println(“Is this printed?”); } catch (ArithmeticException e) { b = 1; System.out.println(“Division by 0: I will set the b by 1”); } System.out.println (“This will be printed”); } [실행 결과] Division by 0: I will set the b by 1 This will be printed
[예제 1.60] try-catch-finally 구문 사용 예 class ExceptionExm { static int count = 0; public static void main(String[] args) { int result; while(true) { try { result = 3/count++; if (count == 3) break; System.out.println(count + “) No Exception”); } catch (ArithmeticException e) { System.out.println(count + “) Error: 0으로 나누기 에러”); } finally { System.out.println (count + “) finally bolck Executed”); } } // end of while } // end of main } end of class [실행 결과] 1) Error: 0으로 나누기 에러 1) finally block Executed 2) No Exception 2) finally block Executed 3) finally block Executed
[예제 1.62] 예외로 인하여 번역시 에러가 발생하는 예 class Checked { public static void main(String[] args) { int a; a = System.in.read() – ‘0’; System.out.println(a); } [예제 1.63] 예제 1.62를 올바로 수정한 예 class Checked2 { public static void main(String[] args) throws java.io.IOException { int a;
[예제 1.64] 예제 1.62를 올바로 수정한 예(2) import java.io.*; class Checked { public static void main(String[] args) throws IOExecption { int a; a = System.in.read() – ‘0’; System.out.println(a); }
11. 인터페이스
public static final int DEFAULT = 100; interface Stack1 { int DEFAULT = 100; void push(int value); int pop(); } public static final int DEFAULT = 100; [예제 1.65] 인터페이스 구현의 예 class ImpStack1 implements Stack1 { int stk[]; int top; ImpStack1() { stk = new int[DEFAULT]; top = 0; }
public void push(int k) { if ( top == stk.length) ImpStack1(int size) { stk = new int[size]; top = 0; } public void push(int k) { if ( top == stk.length) System.out.println(“Stack full”); else stk[top++]=k; public int pop() { if (top <= 0 ) { System.out.println(“Stack empty”); return –1; return stk[--top];
public static void main(String[] args) { int x; [예제 1.66] 인터페이스를 구현한 클래스를 활용하는 예 class UseStack1 { public static void main(String[] args) { int x; ImpStack1 obj = new ImpStack1(); obj.push(5); x = obj.pop(); System.out.println(“x = “ + x); } [예제 1.67] 인터페이스와 추상 클래스의 활용 interface Stack1 { int DEFAULT = 100; void push(int value); int pop(); }
public void push(int k) { if (top == stk.length) abstract class Partial implements Stack1 { int stk[]; int top; public void push(int k) { if (top == stk.length) System.out.println(“Stack full”); else stk[top++] = k; } class ImpStack2 extends Partial { ImpStack2() { stk = new int[DEFAULT]; top = 0; ImpStack2(int size) { stk = new int[size];
System.out.println(“Stack empty”); return –1; else return stk[--top]; public int pop() { if (top <= 0) System.out.println(“Stack empty”); return –1; else return stk[--top]; } class UseStack2 { public static void main(String[] args) { int x; ImpStack2 obj = new ImpStack2(50); obj.push(5); x = obj.pop(); System.out.println(“x = “ + x );