zoukankan      html  css  js  c++  java
  • 7.21总结——反射的用法

    今天一天就讲了一个反射,其实反射本身很简单,只是运用起来相对复杂;

    先说说反射是干嘛的吧!反射的强大之处就在于他可以通过.class的文件,调用原生Java文件中的任何属性,方法,不管是私有还是公共的。

    注意:反射调用的类一定要有一个无参的构造器

      现在介绍一下获取反射模板的三种方式:

        1)类名.class

          eg:Class clazz1=Reflect01.class;

        2)先new对象,在用对象.getClass获取

          eg:Reflect01 reflecto1=new Reflect01();
            Class clazz2=reflecto1.getClass();

        3)Class.forName(包名+类名)

          eg:Class clazz3=Class.forName("com.cdsxt.test.vo.User");这里会抛异常,是因为路径可能不对,需要trycatch

    反射几个常用的API:

      getSimpleName:获取类名;

      getName:1)Class类中的getName方法:获取包名+类名,即全类名

            2)Field类中的getName方法:获取属性的名字

      getPackage:获取包名,即从src下的全部包路径

      getType:Field类中的getType方法:获取属性的类型

      getField:获取所传参数的属性对象

      getFields:获取该类中的所有属性对象

      getDeclaredField和getDeclaredFields:获取私有的属性对象,只要有Declared都可以获取私有的方法,属于。。。。

      newInstance:获取类对象

    /*
    * 设置属性值的方法
    * 1)a) 获取属性对象:clazz.getField("属性名")
    * b) 获取类对象:clazz.newInstance();
    * c) 通过set方法赋值:获取到的属性对象.set(获取到的类对象, 值);
    * d) 通过get方法的到值:获取到的属性对象.get(获取到的类对象)
    */

    /*
    * 通过反射模板获取方法的方式 和调用方法的方式
    * 1)三种方式获取类,类名.class,Class.forName("包名+类名"),先new对象,在用对象.getClass
    * 2)clazz.getMethods()返回方法数组,clazz.getMethod(方法名 ,参数列表【类型.calss】 );私有的就加Declared
    * 3)getName()获取方法名,getReturnType()获取返回值类型
    */
    /*
    * 通过方法对象 调用方法1
    * 1)a)获取模板上的方法:getDeclaredMethod("方法名字")
    * b)invoke方法:method.invoke(obj);无参不传,有参传方法对应的参数,另外,静态传null,非静态传obj
    * c)最后达到调用该方法的目的
    *
    */

    反射的应用:利用反射来封装数据库的增删改查方法,好处在于,可以查询任何类型表

    在用反射封装时,还用到了泛型参数,泛型简单点说就是不确定类型,你传什么类型的参数,泛型就代表什么类型。

      

      

  • 相关阅读:
    C#代码中函数调用相关问题
    C#语言编写代码时常用的三大循环
    c#语言中的类型转换
    tesseract_vs2015工具包使用
    Halcon除法
    halcon批量读取图片
    halcon分离路径名称
    Halcon旋转图片的研究
    关于Haclon使用GPU加速的代码实例
    OpenCV代码:画出轮廓的外接矩形,和中心点
  • 原文地址:https://www.cnblogs.com/yaya-yaya/p/5693211.html
Copyright © 2011-2022 走看看