groovy解析hello world
1742 ワード
彼の下位層がjvm上で実行されていることを知っているので、関数入口main関数があるはずです.そこで、classを逆コンパイルしてみました.
Dディスクの下で新規作成:Hello.groovy
groovyc Hello.groovy
ハローを生成するclass
逆コンパイル後:
まず、mainで無パラメトリック構造関数Helloを呼び出してHelloオブジェクトを生成し、run()メソッドを呼び出すべきである.他のオブジェクトはapiを見て、ソースコードで消化をゆっくり理解します.
Dディスクの下で新規作成:Hello.groovy
println 'hello world'
groovyc Hello.groovy
ハローを生成するclass
逆コンパイル後:
import groovy.lang.Binding;
import groovy.lang.Script;
import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
public class Hello extends Script
{
public Hello()
{
Hello this;
CallSite[] arrayOfCallSite = $getCallSiteArray();
}
public Hello(Binding arg1)
{
Binding context;
CallSite[] arrayOfCallSite = $getCallSiteArray();
ScriptBytecodeAdapter.invokeMethodOnSuperN($get$$class$groovy$lang$Script(), this, "setBinding", new Object[] { context });
}
public static void main(String[] args)
{
CallSite[] arrayOfCallSite = $getCallSiteArray();
arrayOfCallSite[0].call($get$$class$org$codehaus$groovy$runtime$InvokerHelper(), $get$$class$Hello(), args);
}
public Object run()
{
CallSite[] arrayOfCallSite = $getCallSiteArray(); return arrayOfCallSite[1].callCurrent(this, "hello world"); return null;
}
static
{
__$swapInit();
Long localLong1 = (Long)DefaultTypeTransformation.box(0L);
__timeStamp__239_neverHappen1330265162012 = localLong1.longValue();
Long localLong2 = (Long)DefaultTypeTransformation.box(1330265162012L);
__timeStamp = localLong2.longValue();
}
}
まず、mainで無パラメトリック構造関数Helloを呼び出してHelloオブジェクトを生成し、run()メソッドを呼び出すべきである.他のオブジェクトはapiを見て、ソースコードで消化をゆっくり理解します.