反射

反射机制
  1. 当一个类被加载进内存后,都会相应的有一个字节码文件(里面有类的信息)对象
  2. 我们可以通过去剖析这个类的构成,还能调用该类中的功能
  3. 想要通过反射去调用类中的功能和属性,那必须的先要得到该类对象的字节码文件对象
反射概述

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

获取class文件对象的三种方式
  1. Object类的getClass()方法
  2. 静态属性class
  3. Class类中静态方法forName()
成员变量Field类
获取所有成员变量
	public Field[] getFields()
		获取所有的公共成员变量包含从父类继承过来的
	public Field[] getDeclaredFields()
		获取所有的成员变量 包含私有的 也包含从父类继承过来的成员变量
获取单个成员变量
	public Field getField(String name)
	public Field getDeclaredField(String name)
		参数是字段名,即成员变量的名字
给成员变量赋值
	获取的成员变量.setAccessible(true)
		取消语法检查  私有的外界不能直接访问
	public void set(Object obj,  Object value)
		obj: 表示的就是对象,clazz.newInstance()
		value: 表示的意思就是要具体赋的值
	public Object get(Object obj)
		通过字段对象获取字段字
构造方法 Constructor类
获取所有构造方法
	public Constructor<?>[] getConstructors() 
		获取所有的构造方法不包含私有的
	public Constructor<?>[] getDeclaredConstructors()
		获取所有的构造方法 包括私有的
获取单个构造方法
	public Constructor<T> getConstructor(Class<?>... parameterTypes)
		获取单个的构造方法 不包含私有的
		参数:就是你构造方法中的参数类型的 Class 类型,不填就是无参构造
	public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
		获取单个的构造方法包含私有的
创建对象
	获取的构造.setAccessible(true) ; 
		取消语法检查不然会报错 因为私有的外界不能直接访问
		值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查
	public T newInstance()
		调用构造方法的时候传递的具体的参数
		参数代表你要传的内容
通过空参创建对象【方式二】
	clazz.newInstance()
成员方法Method类
获取所有成员方法
	public Method[] getMethods()
		获取所有的公共的成员方法不包含私有的 包含从父类继承过来的过来的公共方法
	public Method[] getDeclaredMethods()
		获取自己的所有成员方法 包含私有的,不包含父类的
获取单个成员方法
	参数1: 方法名称  参数2:方法形参的class 对象【类型.class】
	public Method getMethod(String name,Class<?>... parameterTypes)
		获取单个的方法 不包含私有的
	public Method getDeclaredMethod(String name,Class<?>... parameterTypes) 
		获取单个方法包括私有的
调用方法
	获取的成员方法.setAccessible(true)
		取消语法检查  私有的外界不能直接访问
	public Object invoke(Object obj, Object... args)
		obj: 	表示的是对象,clazz.newInstance()
		args: 	表示的是调用该方法的时候传递的具体的参数
		Object:	返回的是方法执行完毕以后的结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值