java反射机制详解

本文详细介绍了Java反射机制的概念及其用途,包括如何在运行时判断对象的类型、构造对象、调用方法等。同时,文中还列举了获取Class对象的三种方式及反射API的常见用法。

1. 反射机制是什么?

  反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,并能够直接操作程序的内部属性, 还能够动态实例化该类的对象等。

2. 反射机制能做什么?

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法,包括构造方法、实现的接口、父类
  • 在运行时调用任意一个对象的方法

3. 三种生成Class对象的方法

1) 类名.class
  虚拟机将类装入内存,但不做类的初始化工作,返回Class对象
2) Class.forName("包名.类名")
  虚拟机静态加载类,对类进行静态初始化
3) 实例对象.getClass()
  对类进行静态初始化非静态初始化;返回实例对象运行时真正所指的对象(,即最终子类对象, 因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象

4. 反射机制常用API

1) 通过一个对象获得完整包名和类名

Reflect reflect = new Reflect();
System.out.println(testReflect.getClass().getName());
//  .getName(): 返回类名/方法名

2) 获取一个对象的父类、实现的接口和构造函数

Class<?> class = Class.forName("test.Reflect");
//取得父类
Class<?> parentClass = class.getSuperclass();
//获得所有接口
Class<?> intes[] = class.getInterfaces();
//获得全部的构造函数
Constructor<?> cons[] = class.getConstructors();

3) 更多API
Field getField(String name) 获取名为name的public字段
Field getFields()获取所有的public字段
Field getDeclaredField(String name)获取名为name的所有字段,包括public、private、protected
Field getDeclaredFields()获取所有的字段,包括public、private、protected
Constructor[] getConstructors()
Constructor getConstructor(Class[] params)返回形参结构与params顺序相同的构造函数
Method[] getMethods()
Method getMethod(String name, Class[] params)返回名称为name,形参结构与params顺序相同的方法

4) 开始使用Reflection:
用于reflection的类,都可以在java.lang.reflect包中找到.使用步骤
(1)获得想操作的类的java.lang.Class对象, 如 String.class、Class.forName("java.lang.String")、str.getClass();
(2)调用getDeclaredMethods()等方法, 以获取该类中定义的方法列表
(3)使用reflection API来操作这些信息

  • field的简单应用
    java Rectangle r = new Rectangle(2, 3); Field heightField = r.getClass().getField("height"); System.out.println(heightField.get(r));//结果: 3 heightField.set(r, 1); System.out.println(heightField.get(r));//结果: 1

转载于:https://www.cnblogs.com/liuyuxiao/p/7221685.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值