我的反射笔记

本文详细介绍了Java反射机制,包括获取Class对象的三种方式及其在不同场景的应用。通过Class对象,可以访问类的字段、构造器和方法,实现运行时动态操作。此外,还讲解了如何无视访问权限进行反射操作以及如何通过构造器和方法对象创建实例和执行方法。
摘要由CSDN通过智能技术生成

反射:框架设计的灵魂

一、获取Class对象的方式

在这里插入图片描述

1.1Source源代码阶段(还未加载进内存)

Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
  • 多用于配置文件,将类名定义在配置文件中。读取文件,加载类

1.2Class类对象阶段

类名.class:通过类名的属性.class获取
  • 多用于参数的传递

1.3Runtime运行时阶段

对象.getClass():getClass()方法在Object类中定义着。
  • 多用于对象的获取字节码的方式

结论:
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。

二、Class对象的功能(方法)

2.1获取field、constructor、method

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

Field[] getDeclaredFields()  获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name)  
  1. 获取构造方法们
Constructor<?>[] getConstructors()  
Constructor<T> getConstructor(<?>... parameterTypes)  

Constructor<T> getDeclaredConstructor(<?>... parameterTypes)  
Constructor<?>[] getDeclaredConstructors()  
  1. 获取成员方法们:
Method[] getMethods()  
Method getMethod(String name,<?>... parameterTypes)  

Method[] getDeclaredMethods()  
Method getDeclaredMethod(String name,<?>... parameterTypes)  
  1. 获取全类名
String getName()  

2.2对成员变量对象操作

  1. 设置值
void set(Object obj, Object value)  
  1. 获取值
get(Object obj) 
  1. 忽略访问权限修饰符的安全检查
setAccessible(true):暴力反射

2.3对构造方法对象操作

创建对象:

T newInstance(Object... initargs)  
constructor.newInstance(参数1,参数2);

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

2.4对方法对象操作

1.执行方法:

Object invoke(Object obj, Object... args)  

2.获取方法名称:

String getName:获取方法名

Object invoke(Object obj, Object... args)  

2.获取方法名称:

String getName:获取方法名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值