Java--反射基础

1.反射概述

1.1 反射概念

  • 对于任意一个类,都能够知道这个类的所有属性和方法;
  • 对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

1.2 反射原理

我们先要了解一个java程序运行的过程

  1. 编译期:首先我们写好的源程序会被javac编译成.class字节码文件
  2. 运行期:jvm的类加载器将字节码文件加载进内存生成Class类对象(类加载机制
  3. 对象被创建使用(Java对象的创建

java反射则是在运行期时,主动让jvm去加载某个.class文件生成Class对象,并调用其中的方法属性。(即反射的核心是操作Class对象)

2.获取Class对象的方法

  • Class.forName(“全类名”) :将字节码文件加载进内存,并返回Class对象
  • 类名.class :通过类名的属性class获取
  • 对象.getClass() :通过Object定义的方法获取
//1.通过Class的静态方法获取
Class c1 = Class.forName("JavaSE.Person");

//2.调用运行时类本身的.class属性
Class c2 = Person.class;

//3.通过运行时类的对象获取
Class c3 = person.getClass();

注意:同一字节码文件在一次程序运行过程中,只会被加载一次,所以不论通过哪一种方式获取的Class对象都是同一个。参考原理:双亲委派模型

3.使用Class对象

3.1 成员变量 :Field

(1)Class对象获取Field
  • getFields() :只能获取运行时类及其父类中声明为public的属性
  • getDeclaredFields() :可以获取运行时类本身的所有属性
  • getDeclaredField(“属性名”) : 获取运行时类的指定属性
(2)Field的使用
  • setAccessible(true) :获取到私有属性时需要设置setAccessible,忽略访问权限修饰符的安全检查
  • set(对象,值):给变量设置值
  • get(对象):获取变量的值
  • getName() :获取属性名
  • getType() :获取属性类型(Class 类型)
  • getModifiers() :获取修饰符类型代表的数字

3.2 构造器 : Constructor

(1)Class对象获取Constructor
  • getConstructors():获取public的构造方法
  • getConstructor(构造参数.class):根据构造参数返回构造器
  • getDeclaredConstructor(构造参数.class):根据构造参数返回私有构造器
(2)Constructor的使用
  • Class对象.newInstance() :(Class对象的方法)直接使用该类的无参构造器创建对象
  • setAccessible(true):获取到私有构造器时需要设置setAccessible,忽略访问权限修饰符的安全检查
  • newInstance(参数列表) :使用对应构造器创建对象

3.3 方法 : Method

(1)Class对象获取Method
  • getMethods() :只能获取运行时类及其父类中声明为public的方法
  • getDeclaredMethods() :可以获取运行时类本身的所有方法
  • getDeclaredMethod(“方法名”) : 获取运行时类的指定方法
(2)Method的使用
  • invoke(obj , arg…) : 执行方法,传入实例对象和相应参数
  • setAccessible(true):获取到私有方法时需要设置setAccessible,忽略访问权限修饰符的安全检查
  • getName() getType() getModifiers() :与获取属性调用相同的方法不再阐述
  • getReturnType() :获取返回值类型(Class 类型)
  • getParameterTypes() : 获取形参列表(获取的是形参的类型)
  • getExceptionTypes() : 获取抛出的异常类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值