基本信息
文件名称:深入剖析Java中的反射,由浅入深,层层剥离!.docx
文件大小:16.92 KB
总页数:5 页
更新时间:2025-05-21
总字数:约3.06千字
文档摘要

深入剖析Java中的反射,由浅入深,层层剥离!

之前更新了不少Java的基础知识,比如Java的类、对象、基础类型、关键字、序列化、泛型、值传递等等,今天要上点深度了,来聊一聊Java中的反射!

所谓反射,就是在运行时分析、检查和操作类、接口、方法、属性的行为!

简单感受一下反射

在开始详解反射之前,我们先通过一段代码,简单的感受一下反射的魅力!首先,我们已经写了一个Person类,类中有age和name属性,并提供了set/get方法。这时候分别通过正常的实例化对象调用,和反射调用去操作对象的属性值!

publiccom.javabuild.server.pojo.Person()

---------------

publiccom.javabuild.server.pojo.Person()

publiccom.javabuild.server.pojo.Person(int)

publiccom.javabuild.server.pojo.Person(int,java.lang.String)

----------------

publiccom.javabuild.server.pojo.Person(int)

【步骤三】

通过Constructor对象初始化反射类对象

//通过newInstance()进行实例化

Objecto=constructor.newInstance();

【步骤四】

获取要调用的方法的Method对象

//通过class获取类的元数据-setName/getName方法

MethodsetName=classa.getMethod(setName,String.class);

MethodgetName=classa.getMethod(getName

【步骤五】

通过invoke方法进行方法调用

setName.invoke(o,JavaBuild-反射

以上即为反射使用的全过程!下面贴一下全量代码。

Person类

publicclassPerson{

privateintage;

privateStringname;

publicintgetAge(){

returnage;

publicvoidsetAge(intage){

this.age=age;

publicStringgetName(){

returnname;

publicvoidsetName(Stringname){

this.name=name;

//无参构造

publicPerson(){

//一个参数构造

publicPerson(intage){

this.age=age;

//2个参数构造

publicPerson(intage,Stringname){

this.age=age;

this.name=name;

反射测试类

publicclassTest{

publicstaticvoidmAIn(String[]args)throwsClassNotFoundException,NoSuchMethodException,IllegalAccessException,InvocationTargetException,InstantiationException{

//Java正射实现

Personperson=newPerson();

person.setName(JavaBuild-正射

System.out.println(person.getName());

//Java反射实现

//获取类的class对象

Classclassa=Class.forName(com.javabuild.server.pojo.Person

//通过class获取类的元数据-setName/getName方法

MethodsetName=classa.getMethod(setName,String.class);

MethodgetName=classa.getMethod(getName

//获取默认空构造方法

Constructorconstructor=classa.getCon