java反射机制反射详解

  

Java语言有好些个名词,让人望而生畏。

  

上智不教即知,下愚虽教无益,中庸之人,不教不知。

  

人的天性中就有一点对未知的恐惧。

  

刚开始不了解,也没认真看,发现好难呀,等,静下心来自己研究,再看其实不难,发现都是纸老虎,不堪一击。

  

今天就来分析一下反射:Reflection 

  

看一下维基百科的解释:

  

在诸如Java之类的面向对象的程序设计语言中,反射允许在程序运行期间访问类,接口,字段和方法,而不必在编译期间知道接口,字段或者方法的名称。

  

反射也允许实例化对象和调用方法。

  

总结三点:

  

第一:反射可以获取类,接口,字段和方法的信息。

  

第二:不止新可以创建对象,反射也可以实例化对象。

  

第三:通过反射实现对方法的调用。

  

对于创建对象或者调用方法:正常的步骤是先用新关键词,造一个对象,然后再使用此对象的引用去调用方法,这是正常的套路。

  

反射就是不按正常套路来,但是殊途同归,本来可以一步到位的东西,他要分几个详细的步骤或者绕个弯走。而他的先获取类类对象,再去创建对象仿佛就是分步走。

  

然后通过类类对象获取方法,然后通过方法的调用方法调用对象的方法就是在绕个弯。

  

癹ava反射机制反射详解"

  

首先要创建一个反射测试类

  

癹ava反射机制反射详解"

  

使用反射创建对象,用新的创建对象就没必要再说了.JavaAPI为反射机制提供了一些类包括类和数组包下的类。

  

(1)第一种方式:使用类类的forName静态方法,可以获取一个类对象,然后调用类对象的newInstance方法创建对象。

  

(2)第二种方式:直接使用类名. class获取类对象,然后调用类对象的newInstance方法创建对象。

  

癹ava反射机制反射详解"

  

癹ava反射机制反射详解"

  

使用反射,获取类的公共方法,并尝试调用类的方法。

  

(1)首先通过反射获取类对象,通过类对象的getMethods方法,获取类的所有公共方法方法[]。

  

方法是. lang。反映包下的类:提供某个类,接口的单一方法信息,提供对方法的访问。这个反射方法可以获取类方法或者实例方法。

  

循环输出方法名,可以看的到,不止test1, 3还有等于,hashCode等继承对象的方法。

  

但是并没有test2,因为他不是公共类型的方法。

  

癹ava反射机制反射详解"

  

癹ava反射机制反射详解"

  

(2)使用方法的调用调用方法test1和hashCode

  

癹ava反射机制反射详解"

  

癹ava反射机制反射详解"

  

(3)也可以使用getMethod获取方法,不过要注意其参数

  

第一个参数:方法名

  

第二个参数:此方法参数的类型集合

  

癹ava反射机制反射详解"

  

癹ava反射机制反射详解"

  

使用反射,获取类的公共字段,和获取方法类似,也有两个方法,一个是获取所有的公共字段,另一个是获取某个公共字段

  

癹ava反射机制反射详解"

  

癹ava反射机制反射详解"

  

使用反射,获取类和方法的注解。(保留(RetentionPolicy.RUNTIME),运行时类型的才能获取到)

  

(1)获取类的注解

  

癹ava反射机制反射详解"

  

癹ava反射机制反射详解"

java反射机制反射详解