cn.wensiqun.asmsupport.block.control
类 Finally

java.lang.Object
  继承者 cn.wensiqun.asmsupport.definition.AbstractExecuteable
      继承者 cn.wensiqun.asmsupport.block.ProgramBlock
          继承者 cn.wensiqun.asmsupport.block.control.SeriesBlock
              继承者 cn.wensiqun.asmsupport.block.control.Finally
所有已实现的接口:
IBlockOperators, ArithmeticOperator, ArrayOperator, Bitwise, CreateBlockOperator, CrementOperator, LogicalOperator, MethodInvokeOperator, RelationalOperator, ThisVariableable, ValueOperator, VariableOperator, Executeable, Cloneable

public abstract class Finally
extends SeriesBlock

作者:
温斯群(Joe Wen)

字段摘要
 
从类 cn.wensiqun.asmsupport.block.ProgramBlock 继承的字段
insnHelper, method, ownerBlock, returned, scope
 
构造方法摘要
Finally()
           
 
方法摘要
 void executing()
           
protected  void init()
           
 void prepare()
          执行execute的预先操作 在此方法中如果要对执行队列操作 那么不能对执行队列做删除和添加操作 只能做替操作 除了MethodBody类型的Block是通过直接调用的方式执行Prepare方法之外, 其他Block 均在调用创建该Block的时候触发Prepare方法, 所有创建非MethodBody类型Block都在 jw.asmsupport.block.operator.CreateBlockOperator接口中 对于一般的Block,比如if...else...
 void setReturned(boolean returned)
           
 String toString()
           
 
从类 cn.wensiqun.asmsupport.block.control.SeriesBlock 继承的方法
getPrevious, setPrevious
 
从类 cn.wensiqun.asmsupport.block.ProgramBlock 继承的方法
add, addAllExe, addException, addExe, afterDec, afterInc, append, arrayLength, arrayLength, arrayLength, arrayLength, arrayLength, arrayLoad, arrayLoad, arrayLoad, arrayLoad, arrayLoad, arrayStore, arrayStore, arrayStore, arrayStore, arrayStore, assign, beforeDec, beforeInc, bitAnd, bitOr, bitXor, breakout, checkCast, clonerGenerate, conditionalAnd, conditionalOr, continueout, createArrayVariable, createArrayVariable, createArrayVariableWithAllocateDimension, createVariable, div, dowhile, equal, equals, execute, forEach, generateInsn, getCopy, getExecuteBlock, getExecuteQueue, getInsnHelper, getLocalAnonymousVariableModel, getLocalVariableModel, getMethod, getMethodArguments, getMethodBody, getMethodOwner, getOwnerBlock, getPreExecuteInsn, getScope, getSuper, getThis, getThrowExceptions, greaterEqual, greaterThan, ifthan, instanceOf, inverts, invoke, invokeConstructor, invokeOriginalMethod, invokeStatic, invokeVerify, isReturned, isUnreachableCode, leftShift, lessEqual, lessThan, logicalAnd, logicalOr, logicalXor, mod, mul, neg, newArray, newArrayWithValue, newArrayWithValue, newArrayWithValue, newArrayWithValue, newArrayWithValue, not, notEqual, removeException, removeExe, replaceExe, rightShift, runReturn, runReturn, setExecuteBlock, setInsnHelper, setOwnerBlock, setScope, setWhetherCheckUnreachableCode, sub, subBlockPrepare, subBlockPrepare, syn, ternary, throwException, tiggerTryCatchPrepare, tryDo, unsignedRightShift, whetherCheckUnreachableCode, whileloop
 
从类 java.lang.Object 继承的方法
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

Finally

public Finally()
方法详细信息

prepare

public void prepare()
从接口 Executeable 复制的描述

执行execute的预先操作 在此方法中如果要对执行队列操作 那么不能对执行队列做删除和添加操作 只能做替操作

除了MethodBody类型的Block是通过直接调用的方式执行Prepare方法之外, 其他Block 均在调用创建该Block的时候触发Prepare方法, 所有创建非MethodBody类型Block都在 jw.asmsupport.block.operator.CreateBlockOperator接口中

对于一般的Block,比如if...else... 比如如下代码:

 public void method(){
     if(...){
        while(....){
           ...
        }
     }else{
        for(...){
           ...
        }
     }
 }
 

通常执行prepare的顺序如下:

 $ 表示调用 CreateBlockOperator.xxx方法
 _\ 表示触发prepare方法
 
    MethodBody
         |
         |$
         |____\ IF Block
         |          |
         |          |$
         |          |____\ While Block
         |                       |
         |                       |
         |/______________________|
         |           
         |$
         |____\ Else Block 
                    |
                    |$
                    |____\ For Block
                                 |
                                 |
   Method Body End /_____________|
   
 

但是对于每个连续的Try...Catch...Finally...块, asmsupport会先将这一连续的 块逐一创建完成,再执行各自的Prepare方法。 如下图所示

 $ 表示调用 createBlockOperator.xxx方法
 _\ 表示出发prepare方法
 
    MethodBody
         |
         |$
         |____\ Try Block 1
         |          | 
         |          |
         |                         |
         |$                        |
         |____\ Catch Block 1      |
         |                         |
         |$                        |
         |____\ Finally Block 1    |
         |                         |
         |                         |
         |_________________________|
         
                                 |
   Method Body End /_____________|
   
 

指定者:
接口 Executeable 中的 prepare
覆盖:
ProgramBlock 中的 prepare

init

protected final void init()
指定者:
ProgramBlock 中的 init

executing

public final void executing()
指定者:
ProgramBlock 中的 executing

setReturned

public void setReturned(boolean returned)
覆盖:
ProgramBlock 中的 setReturned

toString

public String toString()
覆盖:
Object 中的 toString


Copyright © 2013. All Rights Reserved.