| « | November 2025 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | | | |
| 公告 |
要勇敢面对一切不幸 |
| 联系方式 |
|
MSN:ideation_shang@hotmail.com MAIL:ideation_shang@126.com QQ :113017429 |
Blog信息
|
|
blog名称:ideation_shang的blog 日志总数:30 评论数量:149 留言数量:0 访问次数:673804 建立时间:2005年4月21日 |

| |
|
[java基础]我不是你的儿子----谈java类调用机制 原创空间, 随笔, 软件技术, 电脑与网络
ideation 发表于 2006/11/29 11:20:59 |
| 在java应用当中,我们经常遇到这样一种情况,我们不希望我们的class被其他应用程序调用,我们可以通过sun.reflect.Reflection来实现。下面来看这样一个故事。
从前有两个父亲,Tom 和 Jack ,Tom有一个儿子TomDong,可是Jack想要TomDong当自己的儿子。TomDong由于从小就没有见过父亲,没有办法辨认。Tom很伤心,于是去求太阳神sun想个办法,sun果然厉害,使用魔法将记忆加给了TomDong,于是TomDong就有了辨认父亲的能力。下面让我们来看一下sun的魔法是怎样做到的:
//父亲Tompublic class Tom { public Tom() { } public TomDong getChild() { return new TomDong(); }}//父亲Jackpublic class Jack { public Jack() { } public TomDong getChild() { return new TomDong(); } }
//没有记忆的Tom的儿子TomDongpublic class TomDong { public TomDong() { System.out.println("你好父亲!"); }}
//测试public class Test{ public static void main(String[] args) { Tom tom=new Tom(); System.out.println("Tom get TomDong:"); tom.getChild(); Jack jack=new Jack(); System.out.println("Jack get TomDong:"); jack.getChild(); }}运行 输出结果:Tom get TomDong:父亲你好!Jack get TomDong:父亲你好!----------------------------------------------显然 TomDong 不认识自己的父亲
下面是被sun加了记忆的TomDong
//有记忆的Tom的儿子TomDongpublic class TomDong { public TomDong() { if (Reflection.getCallerClass(2) == Tom.class) { System.out.println("父亲你好!"); } else { System.out.println("坏蛋,我不是你的儿子!"); } }}运行Test,输出结果
Tom get TomDong:父亲你好!Jack get TomDong:坏蛋,我不是你的儿子!
----------------------------------------------
本文主要讲解了 sun.reflect.Reflection,0 是getCallerClass自身,1 是class自身,2 是class的调用方,3 根据类加载机制而定如有不明之处,qq 联系我。
尚兴林 |
|
|
回复:我不是你的儿子----谈java类调用机制 原创空间, 随笔, 软件技术, 电脑与网络
hewuyan(游客)发表评论于2007/11/13 17:08:35 |
|
» 1 »
|