
예외처리는 필수이다. Exception Handling
컴파일오류가 아닌 논리적인오류
-if문을 이용한 예외의 처리
if문은 프로그램상의 논리적으로도 쓰이고 예외처리로도
사용되므로, 나중에 예외를 따로 보고싶을때 이해가 힘들다
고로 try catch를 적절히 혼용해야한다.
- try catch 문
java의 예외 처리 메커니즘.
예외처리 로직을 따로 놓는다. try는 프로그램의 정상적 흐름이다.
catch 는 정상적 흐름에서 발생하는 오류의 처리를 담당한다.
try와 catch는 오류와 정상적흐름을 구분한다라고 착각하기 쉽다.
예외의 처리가 catch에서 감싸지지만, try는 예외가 발생할 수 있는
지역을 넣는다. 모든 영역을 try영역에 넣는 것이 아니다.
try영역에서 발생할 수 있는 예외는 catch 에서 하겠다.
그 나머지 흐름들은 프로그램의 정상적흐름이 되는 것이다.
try에서 돌아가다가 JVM이 에러가 발생할것을 판단한다.
예외 클래스를 직접만든다. 그 예외클래스가 ArithmeticException
catch 로 ArithmeticException를 전달한다. e라는 매계 변수를통해서
에러 참조변수를 받는다. 그 캐치블록을 처리하는
것은 직접해야하는 것이다.
try catch(){} catch(){}
이렇게 catch블록을 나열할 수 있다.
첫번째 캐치블록이 받을 수 있으면 받고 못 받으면 다음 캐치블록
으로 내려간다.
일의 단위를 try에 묶어놓아야 한다. 왜냐면 예외가 발생했을 때
다음으로 넘어가는데 같은단위이면 에러가 발생한다.
모두하던지 모두안하던지 의 개념이다.
예외클래스는 Throwable클래스를 상속한다 getMessage 메소드를
가지고 있다.
대표 예외 클래스:
ArrayIndexOutOfBoundsException
배열의 잘못된 접근 [-1]
ClassCastException
허용할 수 없는 형변환 연산
나중에 쓰면서 알아가야겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package tryCatch18; public class PraticeTryCatch { public static void main(String[] args) { int a =0; int b = 0; int c =0; Make1 ma = new Make1(); int count = 0; for(int i =0; i<3 ; i++) { try { ma.method3(); //에러 없는부분 dodo가 두번수행됨 makeMethod(a,b); // 에러가 있는 부분, Arithmetic으로감 System.out.println("do??"); // 에러가 없는부분인데 수행이 안됨 ma.method3(); // 에러가 없는부분인데 수행이 안됨. //return true; // try블럭 내에서 return을 하더라도 // finally는 실행되고 return한다 . } catch(ArithmeticException e) { //e.getMessage(); //이렇게쓰면 출력하지 않음. System.out.println(e.getMessage()); System.out.println("error 1, i의 값:" + i); i -=1; // for문을 이용해 오류 발생시 다시 하도록 하는 방법. count +=1; if(count == 10) i =10; } finally //try내부에 실행이 진입이되면 finally가 실행되는 것이다. { System.out.println("finally , finish"); } } } public static int makeMethod(int a, int b) { return a/b; } } class Make1 { int a =0; public void method2() { System.out.println("do do "); } public void method3(){ System.out.println("do do "); method2(); } } | cs |
위의 try catch문을 보면, 에러가 발생한 지점 이후로 수행을 하지 않는것 같다.
'C# > C# Concept' 카테고리의 다른 글
[Java] finalize 메소드 (0) | 2018.03.08 |
---|---|
[Java] throws, throw (0) | 2018.03.08 |
[Java] Inner 클래스와 Nested 클래스 (0) | 2018.03.07 |
[Java] Local 클래스와 Anonymous 클래스 (0) | 2018.03.07 |
[C#] for문에서 반복문으로 요소 제거 (0) | 2018.03.05 |