JAVA 之"反射"

1、类型模板 Class:

    物以类聚:

    我们可以用class Person{ }   class Animal{ }来描述一类人或一类动物;

    那么再想一下,我们是不是可以用class Class{ } 来抽象描述类呢?

    答案时可以的,这就是jdk中的 Class 类(类型模板),

     Class类也可以简单的理解为描述类的类;

 

    我们得到一个类的类型模板就像得到了一个人的DNA,

    DNA中包含的一个人的所有外部形态特征,

    某个类的Class类型模板中也就包含的该类的所有特征(如类名、包名、方法……等) 。

    所以我们  只要得到了一个类的类型模板,就能将一个类剖析的很清楚。

     

2、获取Class类型模板对象的方法:
  (1):通过对象调用getClass()方法创建。

  (2):利用Class类中的forName()方法来创建。

  (3):利用类型名(类名)来创建。

3、通过反射方法动态来获取类中的方法以及构造函数(五步)。
  (1).先获取类型模板对象,
      《1》Student stu=new Student();

             Class c=stu.getClass();

 

      《2》Class c=Class.forName("类全名");
      《3》Class c=Student.class;
  (2).通过类型模板对象来获取构造函数

      《1》获取无参(默认构造)
        Class[] arr={};//构造方法的参数 类型、顺序、个数,此处为无参构造。

        Constructor con=c.getDeclaredConstructor(arr);

      《2》获取有参构造

        Class[] arr={String.class,int.class,Integer.class};// 构造方法的参数 类型、顺序、个数。

        Constructor con=c.getDeclaredConstructor(arr);
  (3).调用构造方法创建对象

      《1》利用无参构造创建对象
        Object[] arr1={};//构造方法的参数值,此处无参
        Object obj=con.newInstance(arr1);//利用得到的构造方法创建实例对象

      《2》利用有参构造创建对象
        Object[] arr1={"yuyihua",21,89};//构造方法的参数值。
        Object obj=con.newInstance(arr1);//利用得到的构造方法创建实例对象


  (4).获取方法
        Method m=c.getMethod("show",arr);//show为方法名,arr为方法参数表,同(2)《1》

        Method m=c.getMethod("show",arr);//show为方法名,arr为方法参数表,同(2)《2》


  (5).通过 invoke method 调用方法
        m.invoke(obj, arr1);//obj为利用反射得到的对象,arr1为传入方法参数值,同(3)《1》

        m.invoke(obj, arr1);//obj为利用反射得到的对象,arr1为传入方法参数值,同(3)《2》

  (1)--(3)  相当于  Student stu=new Student();

                   或   Student stu=new Student(={"yuyihua",21,89);

  (4)--(5)  相当于  stu.show();  或  stu.show("yuyihua",21,89);

 

4、实例代码

 

  

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值