您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页Java入门 -- 反射

Java入门 -- 反射

来源:测品娱乐

反射

框架设计的灵魂

概念

反射就是把Java类中的各个成分映射成一个个的Java对象。
即在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取信息及动态调用对象方法的功能叫Java的反射机制。

功能

  • 在运行时判断一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法
  • 生成动态代理

好处

1)在程序运行过程中,操作封装成对象的类的各个部分
2)解耦合,提高程序的可扩展性

Java代码流程

java中主要由以下的类来实现java反射机制
注:这些类都位于java.lang.reflect包中

Class类 //代表一个类。 Field类:代表类的成员变量(成员变量也称为类的属性)
Method类 //代表类的方法
Constructor类 //代表类的构造方法
Array类 //提供了动态创建数组,以及访问数组的元素的静态方法

三个阶段:
1)源代码阶段(source)
编码—形成.java文件
编译—javac编译获得.class文件
代码尚未进内存,还在硬盘上

2)类对象阶段(class)
一个class文件生成一个class类对象

3)运行时阶段(runtime)
在内存中生成对象

使用方法

获取class对象

Class personClass=Class.forName(“Person”);
Class personClass= Person.class;
Class personClass=person.getClass();

成员变量

Field[] getFields() :获取所有public修饰的成员变量
Field getField(String name)   获取指定名称的 public修饰的成员变量

Field[] getDeclaredFields()  获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name)  
操作
  1. 设置值
    * void set(Object obj, Object value)

  2. 获取值
    * get(Object obj)

  3. 忽略访问权限修饰符的安全检查
    * setAccessible(true):暴力反射

构造方法

Constructor<?>[] getConstructors()
Constructor<T> getConstructor(<?>... parameterTypes)  

Constructor<T> getDeclaredConstructor(<?>... parameterTypes)  
Constructor<?>[] getDeclaredConstructors()  
操作

创建对象:
T newInstance(Object… initargs)

如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法

成员方法

Method[] getMethods()  
Method getMethod(String name,<?>... parameterTypes)  

Method[] getDeclaredMethods()  
Method getDeclaredMethod(String name,<?>... parameterTypes)
操作

执行方法:
* Object invoke(Object obj, Object… args)

获取方法名称:
* String getName:获取方法名

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务