UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈
학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다.
프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex) 가상머싞의메모리부족등 예외 (exception) 프로그램코드에의해서해결될수있는다소미약핚오류 에러를방지하기위해프로그래머는실행도중발생핛수있는모든경우의수를고려해야함
실습 #1 4 파일명 : DividedByZero.java public class DividedByZero { final int NUM = 100; int rand = 0; int res = 0; for(int i = 0 ; i < 10 ; i++){ rand = (int)(math.random() * 10); res = NUM / rand; System.out.printf("%d / %d = %d\n", NUM, rand, res);
실습 #2 5 파일명 : DividedByZero2.java public class DividedByZero2 { final int NUM = 100; int rand = 0; int res = 0; for(int i = 0 ; i < 10 ; i++){ rand = (int)(math.random() * 10); if(rand!= 0) res = NUM / rand; else res = 0; System.out.printf("%d / %d = %d\n", NUM, rand, res);
예외처리 6 예외처리 (Exception handling) 프로그램실행시발생핛수있는예외의발생에대비 프로그램의비정상종료를막음 정상적인실행상태를유지 예외처리구문 try { // 예외가발생핛가능성이있는문장들 catch( 예외 1 e1) { // 예외 1 이발생했을경우실행핛문장들 catch( 예외 2 e2) { // 예외 2 이발생했을경우실행핛문장들... catch( 예외 n en) { // 예외 n 이발생했을경우실행핛문장들
예외처리 (Exception handling) 7 예외처리구문 중괄호생략불가 중복가능 try { try { catch(exception e) { catch(exception e) { try { catch(exception e1) {
실습 #3 8 파일명 : DividedByZero3.java public class DividedByZero3 { final int NUM = 100; int rand = 0; int res = 0; for(int i = 0 ; i < 10 ; i++){ try{ rand = (int)(math.random() * 10); res = NUM / rand; catch (ArithmeticException e) { res = 0; System.out.printf("%d / %d = %d\n", NUM, rand, res);
try-catch 문실행흐름 9 try-catch 문의실행흐름 try 블럭내에서예외가발생핚경우 일치하는 catch문이있을경우 일치하는 catch문수행후 try-catch문을빠져나감 일치하는 catch문이없을경우 예외처리되지못함 try 블럭내에서예외가발생하지않은경우 catch 문수행되지않고전체 try-catch 문을빠져나감
실습 #4 10 파일명 : ExceptionHandlingEx1.java public class ExceptionHandlingEx1 { System.out.println("1"); try{ System.out.println("2"); catch(exception e){ System.out.println("3"); System.out.println("4");
실습 #5 11 파일명 : ExceptionHandlingEx2.java public class ExceptionHandlingEx2 { System.out.println("1"); try{ int num = 100; int res = 0; res = num / 0; // Exception 발생 System.out.println("2"); catch(exception e){ System.out.println("3"); System.out.println("4");
예외발생시키기 12 프로그래머가고의로예외발생시킬수있음 Exception 객체를생성후 throw 문을사용 Exception e = new Exception("Exception 설명 "); throw e; 또는 throw new Exception("Exception 설명 "); 생성자를통해 Exception 에메세지를넣을수있음 getmessage() 메소드를통해확인가능
실습 #6 13 파일명 : ExceptionHandlingEx3.java public class ExceptionHandlingEx3 { try { Exception e = new Exception(" 의도적인 Exception"); throw e; catch (Exception e) { System.out.println(" 에러메세지 : " + e.getmessage()); e.printstacktrace(); // Exception 을의도적으로발생시킴 System.out.println(" 프로그램정상종료 ");
실습 #7 14 파일명 : ExceptionHandlingEx4.java public class ExceptionHandlingEx4 { try { ArithmeticException e = new ArithmeticException(" 의도적인 Exception"); throw e; catch (ArithmeticException e) { System.out.println(" 에러메세지 : " + e.getmessage()); e.printstacktrace(); catch (Exception e) { System.out.println(" 에러메세지 : " + e.getmessage()); e.printstacktrace(); System.out.println(" 프로그램정상종료 ");
Exception 클래스 15 실행시발생핛수있는오류 (Exception 과 Error) 들이클래스로정의되어있음 Error 프로그램코드에의해서해결될수없는심각핚오류 Exception 프로그램코드에의해서해결될수있는다소미약핚오류 Object Throwable Exception Error
Exception 클래스 16 Exception 클래스의분류 Exception 클래스와자식클래스 (RuntimeException 제외 ) RuntimeException 클래스와자식클래스 Exception... RuntimeExeception...
Exception 클래스 17 Exception 클래스의분류 Exception 클래스와자식클래스 (RuntimeException 제외 ) 반드시예외처리해주어야함 RuntimeException 클래스와자식클래스 예외처리해주지않아도됨
실습 #8 18 파일명 : ExceptionClass.java public class ExceptionClass { throw new Exception("Exception My Message"); public class ExceptionClass { try { throw new Exception("Exception My Message"); catch (Exception e) { System.out.println(e.getMessage()); e.printstacktrace();
실습 #9 19 파일명 : RuntimeExceptionClass.java public class RuntimeExceptionClass { throw new RuntimeException("RuntimeException My Message"); public class RuntimeExceptionClass { try { throw new RuntimeException("RuntimeException My Message"); catch(runtimeexception e){ System.out.println(e.getMessage()); e.printstacktrace();
예외발생과정 20 예외발생시예외에해당하는클래스의객체가생성됨 catch 블럭순서대로괄호 () 내에선언된참조변수의타입을검사함 instanceof 연산자를이용해검사 모든예외는 Exception 의자식이므로모든예외를처리 예외발생시 call stack 확인메소드 printstacktrace() 메소드
실습 #10 21 파일명 : ExceptionHandlingEx5.java public class ExceptionHandlingEx5 { int[] array = new int[5]; System.out.println("1"); try{ System.out.println("2"); array[5] = 1; System.out.println("3"); catch(arrayindexoutofboundsexception e){ if(e instanceof ArrayIndexOutOfBoundsException) System.out.println("true"); System.out.println("ArrayIndexOutOfBoundsException"); catch(exception e){ System.out.println("Exception");
실습 #11 22 파일명 : ExceptionHandlingEx6.java public class ExceptionHandlingEx6 { static void method1() { method2(); static void method2() { method3(); static void method3() { try{ int array[] = new int[5]; array[5] = 1; catch(exception e){ e.printstacktrace(); method1();
finally 블럭 23 finally 블럭문 try-catch 문과함께예외의발생여부에상관없이실행 try { // 예외가발생핛가능성이있는문장들 catch( 예외 1 e1) { // 예외 1 이발생했을경우실행핛문장들 catch( 예외 2 e2) { // 예외 2 이발생했을경우실행핛문장들... catch( 예외 n en) { // 예외 n 이발생했을경우실행핛문장들 finally { // 예외의발생여부에관계없이항상수행됨
실습 #12 24 파일명 : FinallyEx1.java public class FinallyEx1 { static void method() { System.out.println("1"); try { System.out.println("2"); if(true) return; catch(exception e) { System.out.println("3"); return; System.out.println("4"); method();
실습 #13 25 파일명 : FinallyEx2.java public class FinallyEx2 { static void method() { System.out.println("1"); try { System.out.println("2"); if(true) return; catch(exception e) { System.out.println("3"); return; finally { System.out.println("4"); method();
메소드예외선언 26 메소드수행중발생가능핚예외들을명시 throws 키워드사용 여러개가능 void method() throws Exception1, Exception2,.. ExceptionN { // 메소드의구현부 예외발생이가능핚메소드를호출 ( 사용 ) 하는쪽에서처리하도록강요함 견고핚프로그램작성가능 호출핚메소드에게예외를전달하여처리를떠맡김
실습 #14 27 파일명 : ExceptionMethodHandlingEx1.java public class ExceptionMethodHandlingEx1 { public static void main(string[] args) throws Exception { method1(); static void method1() throws Exception { method2(); static void method2() throws Exception { method3(); static void method3() throws Exception { throw new Exception();
실습 #15 28 파일명 : ExceptionMethodHandlingEx2.java public class ExceptionMethodHandlingEx2 { public static void main(string[] args){ try { method1(); catch (Exception e) { System.out.println("main 메소드에서예외처리 "); static void method1() throws Exception { method2(); static void method2() throws Exception { method3(); static void method3() throws Exception { throw new Exception();
실습 #16 29 파일명 : ExceptionMethodHandlingEx3.java public class ExceptionMethodHandlingEx3 { public static void main(string[] args){ method1(); static void method1() { method2(); static void method2(){ method3(); static void method3(){ try { throw new Exception(); catch (Exception e) { System.out.println("method3 에서예외처리 ");