欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 反射机制了解

反射机制了解

2025/4/17 6:34:06 来源:https://blog.csdn.net/Misnearch/article/details/143957927  浏览:    关键词:反射机制了解

反射概念

了解反射背景

存在某些变量或形参的声明类型是Object类型,但是程序却需要调用该对象运行时类型的方法,该方法不是Object中的方法,如何解决。转到如何获取该对象运行时类型的方法。
只能运行时才能获取,这就用到反射。

反射概述

Reflection被视为动态语言的关键。允许程序在运行期间借助Reflection API 取得任何类的内部信息,并能直接操作任何对象的内部属性和方法。
例如下面的案例,获取类的属性和方法,两种都是可行的。

 @Testpublic void test() {// 创建Person类的实例Person1 person1 = new Person1();// 调用Person类的属性和方法// 调用属性person1.age = 10;System.out.println(person1.age);// 调用方法person1.show();}/*使用反射完成上述的操作*/@Testpublic void test1() throws Exception {// 调用构造器方法Class<Person> personClass = Person.class;Person person = personClass.newInstance();System.out.println(person);// 调用属性,先获取age属性Field ageField = personClass.getField("age");// 然后通过属性设置对象内部的属性值,之前是通过对象调用方法设置属性值ageField.set(person, 10);System.out.println(ageField.get(person));// 调用方法Method showMethod = personClass.getMethod("show");showMethod.invoke(person);}

反射机制提供的功能

  • 在运行时判断任意一个对象所属的类
  • 构造任意一个类的对象
  • 判断任意一个类所具有的成员变量和方法
  • 获取泛型信息
  • 调用任意一个对象的成员变量和方法
  • 在运行时处理注解
  • 生成动态代理

Class类,java反射的源头

获取class实例的方式:

  • 调用运行时类的静态属性class
  • 调用运行时类的对象getClass()
  • 调用Class的静态方法,forName(String className)
  • 使用类的加载器方式

了解类的加载过程:
过程1:类的装载(loading)
将类的class文件读入内存,并为之创建一个java.lang.Class对象。此过程由类加载器完成

过程2:链接(linking)

  • 验证(Verify):确保加载的类信息符合JVM规范,例如:以cafebabe开头,没有安全方面的问题。
  • 准备(Prepare):正式为类变量(static)分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配。
  • 解析(Resolve):虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程。

过程3:初始化(initialization)
执行类构造器()方法的过程。
类构造器()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词