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

    主要参考这篇文章

    https://blog.csdn.net/sinat_38259539/article/details/71799078

    什么是反射?

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

    反射就是把java类中的各种成分映射成一个个的Java对象:

    例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象

    类对象

    每个类在第一次被调用时,都会被jvm创建类对象(因此只会有一个类对象),并加载到jvm内存.我们可以通过类对象来实现java反射的功能,即在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性

    怎么获取类对象?

    三种方法:

    Student stu = new Student("张三");
    //第一种, 通过getClass()方法
    Class clz1 = stu.getClass();
    //第二种,通过class属性
    Class clz2 = Student.class;
    //第三种,通过类的全名
    Class clz3 = Class.forName("com.test.Student");

    第一种 : 都有对象了,还要反射干什么

    第二种 : 需要导包才能用,麻烦.

    第三种 : 推荐使用

    通过反射获取构造方法

    public Constructor[] getConstructors() : 仅获取public的构造方法们

    public Constructor[] getDeclaredConstructors() : 获取所有的构造方法们(public, protected, default, private)

    public Constructor getConstructor(Class... parameterTypes) : 指定获取某个public构造方法,通过传入的参数类型的类对象确定

    public Constructor getDeclaredConstructor(Class... parameterTypes) : 指定获取某个(4种权限)构造方法,通过传入的参数类型的类对象确定

    Constructor-->newInstance(Object... initargs) : 用该构造函数创建对象,传如初始化参数.

    获取成员变量

    Field[] getFields() : 使用方法相似,不赘述

    Field[] getDeclaredFields()

    public Field getField(String fieldName) : 传入变量名来确定成员变量

    public Field getDeclaredField(String fieldName)

    Field --> public void set(Object obj,Object value) : 用Field对象调用set方法,形参1:赋值的对象, 形参2:赋的值  例 : fieldAge.set(person1, 22);

    获取成员方法

    public Method[] getMethods() : 不赘述

    public Method[] getDeclaredMethods()

    public Method getMethod(String name,Class<?>... parameterTypes) : 传入方法名以及方法参数的类对象们.

    public Method getDeclaredMethod(String name,Class<?>... parameterTypes)

    Method --> public Object invoke(Object obj,Object... args) : 参数1:要调用的方法的对象,  参数2:方法的参数们(形参)

    其他

    操作private属性或方法的前提 : 打开开关!(private属性或方法.setAccessible(true))

    Constructor类, Field类, Metod类, Properties类等等的toString()方法都被重写过! 会打印出方法或属性的声明语句,而不是打印地址.

    通过反射运行配置文件内容

    看上边的链接

    通过反射越过泛型检查

    泛型会在类编译成class文件之后被擦除,所以你知道该怎么做了吧?

    f

  • 相关阅读:
    sharepoint 2010 资料
    调试 SharePoint 解决方案
    定义不同模板的网站集
    作图工具
    struts2的优点
    get load
    什么是java的事物
    session的实现方式
    final 和static的关系
    各种大神的表单验证 感谢大神的辛苦
  • 原文地址:https://www.cnblogs.com/jinyu59/p/10738960.html
Copyright © 2011-2022 走看看