Java调用机制

    在java应用当中,我们经常遇到这样一种情况,我们不希望我们的class被其他应用程序调用,
我们可以通过sun.reflect.Reflection来实现。下面来看这样一个故事。

从前有两个父亲,Tom 和 Jack ,Tom有一个儿子TomDong,可是Jack想要TomDong当自己的儿子。TomDong由于从小就没有见过父亲,没有办法辨认。Tom很伤心,于是去求太阳神sun想个办法,sun果然厉害,使用魔法将记忆加给了TomDong,于是TomDong就有了辨认父亲的能力。下面让我们来看一下sun的魔法是
怎样做到的:


//父亲Tom
public class Tom
{
    public Tom()
    {
    }
    public TomDong getChild()
    {
        return new TomDong();
    }
}
//父亲Jack
public class Jack
{
    public Jack()
    {
    }
    public TomDong getChild()
    {
        return new TomDong();
    }   
}

//没有记忆的Tom的儿子TomDong
public 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的儿子TomDong
public 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 根据类加载机制而定
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值