反射

反射
反射的概述
反射概述:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取类的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类, 必须先要获取到该类的字节码文件对象。
而解剖使用的就是Class类中的方法,所以先要获取到每一个字节码文件对应的Class类型的对象
class文件对象的三种方式
类的构成:构造方法,成员变量,成员方法
      Constructor 构造方法
      Field  成员变量
      Method 成员方法
获取一个类对应的字节码文件对象
方式一: 第一种通过Object类中的getClass方法
方式二: 通过静态属性(class属性)
方式三: 通过Class类中的一个静态方法:
  public static Class forName(String className): 
  className: 这个表示的是一个类对应的全类名(就是需要加上包名)
反射获取构造方法
通过反射获取无参构造方法并使用
1.获取所有构造方法:
	public Constructor<?>[] getConstructors() 获取所有的构造方法不包含私有的
	public Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法 包括私有的
2.获取单个构造方法:
	public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取单个的构造方法 不包含私有的
	public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 获取单个的构造方法包含私有的
通过反射获取带参构造方法并使用
newInstance(Object...initargs)
使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例;
基本步骤:
获取字节码文件对象
	Class clazz = Class.forName("com.click369.Student") ;
	Constructor con = clazz.getDeclaredConstructor(String.class , int.class) ;
	Object obj = con.newInstance("张三" , 23) ;
	System.out.println(obj);
反射获取成员变量
通过反射获取成员变量并使用
1.获取所有成员变量:
	public Field[] getFields() 获取所有的成员变量包含从父类继承过来的
	public Field[] getDeclaredFields() 获取所有的成员变量 包含私有的 也包含从父类继承过来的成员变量
2.获取单个成员变量:
	public Field getField(String name)
	public Field getDeclaredField(String name)
反射获取成员方法
通过反射获取无参无返回值成员方法并使用
1.获取所有成员方法:
	public Method[] getMethods() //获取所有的公共的成员方法不包含私有的 包含从父类继承过来的过来的公含私有的方法:
	public Method[] getDeclaredMethods()//获取自己的所有成员方法 包含私有的
2.获取单个成员方法:
	参数1: 方法名称  参数2:方法行参的class 对象
	public Method getMethod(String name,Class<?>... parameterTypes) 获取单个的方法 不包含私有含私有的
	public Method getDeclaredMethod(String name,Class<?>... parameterTypes) 获取单个方法包括私有的
通过反射获取无参无返回值成员方法并使用
1.获取所有成员方法
	public Method[] getMethods() //获取所有的公共的成员方法不包含私有的 包含从父类继承过来的过来的公含私有的方法
	public Method[] getDeclaredMethods()//获取自己的所有成员方法 包含私有的
2.获取单个成员方法
	//参数1: 方法名称  参数2:方法行参的class 对象
	public Method getMethod(String name,Class<?>... parameterTypes) //获取单个的方法 不包含私有的
	public Method getDeclaredMethod(String name,Class<?>... parameterTypes) 获取单个方法包括私有的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值