Gen, continue,return 처리

2722 단어

 
void tryItOut () {}
void wrapItUp () {}

void tryFinally() {
	for (int i = 0; i < 2; i++) {
		try {
			tryItOut();
		} finally {
			wrapItUp();
			return;
		}
	}
}

생성된 class 파일의 내용은 다음과 같습니다.
void tryFinally();
    flags:
    Code:
      stack=2, locals=3, args_size=1
         
	 0: iconst_0  //  0    
         1: istore_1  //  0       1   
         2: iload_1
         3: iconst_2
         4: if_icmpge     22

         //   try body  
         7: aload_0
         8: invokevirtual #2                  // Method tryItOut:()V

         //   finally body 
        11: aload_0
        12: invokevirtual #3                  // Method wrapItUp:()V
        15: return

        16: astore_2 //  throwable          2   
        17: aload_0
        18: invokevirtual #3                  // Method wrapItUp:()V
        21: return

        22: return

      Exception table:
         from    to  target type
             7    11    16   any
            16    17    16   any

 
 
public void t(boolean a, int b) {
	E: {
		while (a) {
			if (b == 1) {
				continue;
			}
			if (b == 2) {
				break;
			}
			if (b == 3) {
				break E;
			}
		}
		
		int c=2;
	}
}

class 파일의 내용은 다음과 같습니다.
public void t(boolean, int);
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=3
         0: iload_1
         1: ifeq          28 //    int     0    

         // continue   
         4: iload_2          //        b    
         5: iconst_1         //    1    
         6: if_icmpne     12 //       int   ,            ,      12
         9: goto          0

         // break   
        12: iload_2
        13: iconst_2
        14: if_icmpne     20
        17: goto          28

         // break   
        20: iload_2
        21: iconst_3
        22: if_icmpne     0
        25: goto          30

        28: iconst_2
        29: istore_3
        30: return

로컬 변수 테이블의 내용은 다음과 같습니다.
0:this1: 방법 형식 매개 변수 a2: 방법 형식 매개 변수 b
  
 
 
 
 
 
 
 
  

좋은 웹페이지 즐겨찾기