反射???

一、反射的概述

java的反射指的是在程序运行时解析类的的内部信息,对于任意一个类,

都能够知道其属性以及方法,而对于任意一个对象,也能调用它的方法及属性,

这种可以动态获取信息的方法就称之为java的反射机制。

二、反射中获取类信息的三种方法

  先写一个ToolKit类

1)Class c = ToolKit.class;             //通过已知类名获取类型信息

2)ToolKit tl = new ToolKit();

  Class c = tl.getClass();            //通过对象获取类型信息

3)Class c = Class.forName(String classFullPath)  //通过全包路径字符串获取信息

注意:这三种获取类信息的方法,第一种需要导入类的包,否则编译错误,依赖性强;

   第二种getClass对象有了就不需要反射;

   所以一般都用第三种方法,通过路径获取信息

三、如何调用构造方法

  一个类中通常有无参构造和有参构造两种方法

  1)通过无参构造

    T t = (T)c.newInstance();

  2)通过有参构造

    Constructor cons = c.getConstructor(Class<?>...parameter Types);

    T t = (T)cons.newInstance(Object...parameters);

  Class类中的newInstance()方法只能创建默认构造器的对象,

  而想要创建有参的构造函数还是要使用Constructor类中的newInstance(Object...initargs)方法.

 四、获取类中的自定义属性与方法

  通常在调用类中被保护的信息时可以:

      xxx.setAccessible(true)(设置属性的可见性)

  1)调用自定义属性

    <1>Filed[] fs = c.getDeclaredFields();  //获取当前类中的所有属性

    int modifiedNum = f.getModifies();    //获取属性访问修饰整数

      2:private  0:default  4:protected  1:public

    Class c = f.getType();          //获取属性的类型信息

    String fieldName = f.getName();      //获取属性的名称

    注:给属性赋值的两种方式

      f.set(T t , E value)

      f.invoke(T t , E value)

      给t对象的f属性赋值

  2)调用自定义方法

    <1>Method[] ms = c.getDeclaredMethods();

       String methodName = m.getName();    //获取方法名称

     Class c = m.getReturnType();      //获取方法返回类型

     

原文地址:https://www.cnblogs.com/afeiiii/p/13125778.html