zoukankan      html  css  js  c++  java
  • 反射???

    一、反射的概述

    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();      //获取方法返回类型

         

  • 相关阅读:
    ASP创建对象及中文显示解决方法
    webservice解读
    top监控工具
    Crontab实例
    javascript闭包的理解
    98万买下51.com域名,51.com不止2000万美金
    百度08年网页搜索份额73.2% 创历史新高
    讲故事投资 天使投资人的中国式生存
    下个谷歌将诞生于中国或印度
    Twitter入选10大搜索引擎
  • 原文地址:https://www.cnblogs.com/afeiiii/p/13125778.html
Copyright © 2011-2022 走看看