cn.wensiqun.asmsupport
接口 Executeable

所有已知子接口:
IGlobalVariableCreator, IMemberCreator, IMethodCreator
所有已知实现类:
AbstractArithmetic, AbstractArrayOperator, AbstractBitwise, AbstractCrement, AbstractDecrement, AbstractExecuteable, AbstractIncrement, AbstractLogical, AbstractNullCompareRelational, AbstractNumerical, AbstractOperator, AbstractPositiveNegative, AbstractRelational, Addition, AfterDecrement, AfterIncrement, ArrayLength, ArrayLoader, ArrayStorer, ArrayValue, ASMDirect, Assigner, Athrow, BeforeDecrement, BeforeIncrement, BinaryBitwise, BinaryLogical, BitAnd, BitOr, BitXor, BlockEndFlag, BreakStack, Catch, CheckCast, CInitBody, CommonMethodBody, CommonMethodInvoker, ConditionOperator, ConstructorInvoker, ControlBlock, Division, DoWhileLoop, DUP, Else, ElseIF, EnumCInitBody, EnumInitBody, Equal, Finally, ForEachLoop, GlobalVariableAssigner, GlobalVariableCreator, GOTO, GreaterEqual, GreaterThan, IF, InitBody, InstanceofOperator, Inverts, LeftShift, LessEqual, LessThan, LocalVariableAssigner, LocalVariableCreator, LogicalAnd, LogicalOr, LogicalXor, Marker, MethodBodyForModify, MethodCreator, MethodInvokeInvoker, MethodInvoker, Modulus, Multiplication, Negative, NoneOperator, NOP, Not, NotEqual, NumericalAndReferenceRelational, NumericalRelational, ProgramBlock, Return, RightShift, SeriesBlock, ShortCircuitAnd, ShortCircuitOr, StaticMethodBody, StaticMethodInvoker, Store, StringAppender, Subtraction, SuperConstructorInvoker, SuperMethodBody, Synchronized, TernaryOperator, Throw, Try, Try.UnAddExceptionThrow, UnaryBitwise, UnaryLogical, UnsignedRightShift, VariableInvoker, VisitFieldInsn, VisitIincInsn, VisitInsn, VisitIntInsn, VisitLdcInsn, VisitMethodInsn, VisitMultiANewArrayInsn, VisitTypeInsn, VisitVarInsn, WhileLoop

public interface Executeable

此接口表示可以执行。

作者:
温斯群(Joe Wen)

方法摘要
 void execute()
          执行
 void prepare()
          执行execute的预先操作 在此方法中如果要对执行队列操作 那么不能对执行队列做删除和添加操作 只能做替操作 除了MethodBody类型的Block是通过直接调用的方式执行Prepare方法之外, 其他Block 均在调用创建该Block的时候触发Prepare方法, 所有创建非MethodBody类型Block都在 jw.asmsupport.block.operator.CreateBlockOperator接口中 对于一般的Block,比如if...else...
 

方法详细信息

prepare

void prepare()

执行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 /_____________|
   
 


execute

void execute()
执行



Copyright © 2013. All Rights Reserved.