分享

Robocode源代码研究 - 入口(表象)

 richsky 2012-04-08

今日突然重新对Robocode发生了兴趣,为了能够更好的理解机器人的行动。开始研究Robocode的源代码。

RoboWiki上的命令行启动一文中,可以得到Robocode总体的一个入口所在。

robocode.Robocode

这个class就是包含了main()方法的入口class。

找到main()方法,读之,发现如下代码:

HiddenAccess.robocodeMain(args);

追踪进去查看,得到这样的内容:

init(); 
try { 
    robocodeMain.invoke(null, (Object) args); 
} catch (IllegalAccessException e) { 
    Logger.logError(e); 
} catch (InvocationTargetException e) { 
    Logger.logError(e.getCause()); 
    Logger.logError(e); 
}

可见,其中robocodeMain.invoke(null, (Object) args); 一句为关键。

跟踪robocodeMain,发现为Method类型。于是向前查其初始化之处。在init()方法中找到如下代码:

robocodeMain = main.getDeclaredMethod("robocodeMain", Object.class); 
robocodeMain.setAccessible(true);

从上面的代码可以看出,robocodeMain这个对象所对应的是main对象所代表的class中的robocodeMain()方法。main对象本身是Class的实例。至此,main对象成了关键,向前追查,找到:

ClassLoader loader = getClassLoader(); 
Class<?> main = loader.loadClass("net.sf.robocode.core.RobocodeMainBase");

真相大白,main对象所代表的类是net.sf.robocode.core.RobocodeMainBase。

可是这个类在哪里呢?它的robocodeMain()方法又是什么样子呢?

睡一觉,下次有空的时候继续追查……

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多