Bootstrap

反射的相关知识点

1. 什么是反射呢?

(1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到类对象之后,再通过类对象进行反编译,从而获取对象的各种信息。

(2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁

注意:反射可以获取到所有的类信息   包括:类名字(类修饰,类注解) 属性域(修饰,类型,名字,注解),方法(修饰符,返回类型,入参数量,入参类型,方法名字)。。。

2.反射的使用

       首先所有为private修饰的(属性,方法,构造器)想使用的话,都要执行暴力反射(xx.setAccessible(true))

2.1 获取class类的三种方式

        Class class = 对象名.getClass() 

        Class class = 类名.class

        Class class = Class.forName("全类名")

         注:class.getName():获取到全类名

         此时可以通过class.newInstance() 通过反射调用构造器创建对象 (无参的)

2.2 Constructor获取构造方法

  Constructor[] getConstructors() 获取所有public修饰的该类的所有构造器

  Constructor getConstructor(变量类型.class,变量类型.class) 获取public修饰的一个指定的构造器

   Constructor[] getDeclaerdConstructors() 获取所有修饰符的构造器

   Constructor getDeclaerdConstructor(变量类型.class,变量类型.class) 获取任何指定的构造器

   Object xx.newInstance("aa") 创建一个实例化对象,传参是aa

        注意:当是无参构造器时可以直接用(class).newInstance()

2.3 获取类上的属性(成员变量)

  Field[] getFields 获取所有public修饰的该类的全部属性

  Field getField(String name) 获取public修饰的变量名问name的变量

  Field[] getDeclaredFields() 获取所有修饰符的对象

  Field getDeclaredFIeld(String name):获取名字为name的属性

  xx.get("实例名字") :获取实例中为xx属性的值,返回值为Object

  xx.set("实例名字","aa") :将实例中的xx设置为aa

2.4 获取类上的方法以及执行

   Method[] getMethods() 获取所有public修饰的方法

   Method getMethod("方法名字",参数类型.class,参数类型.class) 获取指定由public修饰的方法

   Method[] getDeclaredMethods() 获取所有方法

   Method getDeclaredMethod("方法名字",参数类型.class,参数类型.class) 获取指定方法名字及参数的方法

   Object xx.invoke.("实例对象","aa") 调用实例对象中方法为xx的对象传入的参数为"aa"

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;