gnu

블로그 이미지
by 군우

TAG CLOUD

  • Total hit
  • Today hit
  • Yesterday hit

예외처리는 필수이다. 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
AND

ARTICLE CATEGORY

분류 전체보기 (197)
C (0)
HTML (7)
C# (88)
Python (27)
IT (0)
Android (2)
Java (65)
Study (5)
JavaScript (1)
JSP (2)

RECENT ARTICLE

RECENT COMMENT

CALENDAR

«   2025/04   »
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

ARCHIVE

LINK