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

    反射概述

    反射的概述

    什么是Java的反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

    Java的反射机制的作用

    是用来编写一些通用性较高的代码或者框架的时候使用。

    反射常用对象的概述

    • Class

      • Class类的实例表示正在运行的Java应用程序中的类和接口
    • Constructor

      • 关于类的单个构造方法的信息以及对它的访问权限
    • Field

      • Field提供有关类或接口的单个字段的信息,以及对它的动态访问权限。
    • Method

      • Method提供关于类或接口上单独某个方法的信息。

    反射常用API

    Class类的概述和使用

    • Java中java.lang.Class类用于表示一个类的字节码(.class)文件
    • 如何得到某个class文件对应的Class对象
      • 已知类和对象的情况下
        类名.class
        对象.getClass() ---- Object类提供
      • 未知类和对象的情况下
        Class.forName("包名.类名")

    Class类代表某个类的字节码,并提供了加载字节码的方法:
    forName("包名.类名"),forName方法用于加载类字节码到内存中,并封装成一个Class对象。

    Constructor类的概述和使用

    • Constructor类的实例对象代表类的一个构造方法
    • 得到某个类所有的构造方法
      Constructor[] constructors = Class.forName("java.lang.String").getConstructors();
    • 得到指定的构造方法并调用
      Constructor constructor = Class.forName("java.lang.String").getConstructor(String.class);
      String str = (String)constructor.newInstance("abc");
    • Class类的newInstance()方法用来调用类的默认构造方法
      String obj = (String)Class.forName("java.lang.String").newInstance();

    Field类的概述和使用

    • Field类代表某个类中的一个成员变量,并提供动态的访问权限

    • Field对象的获得

      • 得到所有的成员变量

        • Field[] fields = c.getFields();//取得所有public属性(包括父类继承)
        • Field[] fields = c.getDeclaredFields();//取得所有声明的属性
      • 得到指定的成员变量

        • Field name = c.getField("name");
        • Field name = c.getDeclaredField("name");
    • 设置Field变量是否可以访问

      • field.setAccessible(boolean);
    • Field变量值的读取、设置

      • field.get(obj);
      • field.set(obj, value);

    Method类的概述和使用

    • Method类代表某个类中的一个成员方法

    • Method对象的获得

      • 获得所有方法
        getDeclaredMethods()
        getMethods()
      • 获得指定的方法
        getDeclaredMethod(String name, Class<?>... parameterTypes)
        getMethod(String name, Class<?>... parameterTypes)
    • 设置Method方法是否可以访问
      method.setAccessible(boolean);

    • 通过反射执行方法
      invoke(Object obj, Object... args)

  • 相关阅读:
    乘法九九表
    #include <time.h>
    【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp
    【codevs1380】没有上司的舞会 树形dp
    【bzoj1060】[ZJOI2007]时态同步 树形dp
    【bzoj2435】[NOI2011]道路修建 树形dp
    【bzoj3573】[HNOI2014]米特运输 树形dp
    【bzoj4027】[HEOI2015]兔子与樱花 树形dp+贪心
    【codevs1163】访问艺术馆 树形dp
    【bzoj1864】[ZJOI2006]三色二叉树 树形dp
  • 原文地址:https://www.cnblogs.com/huowuyan/p/11628399.html
Copyright © 2011-2022 走看看