Java反射

Posted Coding-Liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java反射相关的知识,希望对你有一定的参考价值。

在Java中反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法。这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。

 

静态编译和动态编译:

静态编译:在编译时确定类型,绑定对象

动态编译:在运行时确定类型,绑定对象

 

Java反射API

反射API用来生成JVM中的类、接口或者对象的信息

  • class类,反射的核心类,可以获取类的属性,方法等信息
  • Field类,Java.lang.reflec包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值。
  • Method,Java.lang.reflec包中的类,表示类的方法,他可以用来获取类的方法信息
  • constructor类,Java.lang.reflec包中的类,表示类的构造方法

 

反射的使用步骤(获取class对象,调用对象方法)

  • 获取想要操作的类的class对象,他是反射的核心,通过class对象我们可以任意调用类的方法
  • 调用class类中的方法,即是反射的使用阶段
  • 使用反射API来操作这些信息

 

获取class对象的三种方法

调用某个对象的getClass()方法

  Person p = new Person();

  Class clazz = p.getClass();

调用某个类的class属性来获取该类对应的class对象

  Class clazz = Person.class;

使用Class类中的forName()静态方法(最安全/性能最好)

  Class clazz = Class.forName("类的全路径");  (最常用)

 

创建对象的两种方法

  • Class对象的newInstance()
  • 调用constructor对象的newInstancec()
//获取Person类的Class对象
Class clazz = Class.forName("reflection.Person");

//使用.newInstance方法创建对象
Person p = (Person)clazz.newInstance();

//获取构造方法并创建对象
Constructor c = clazz.getDeclaredConstructor(String.class,String.class,Int.class);

//创建对象并设置属性
Person p1 = (Person)c.newInstnce("李四","男",20);

 

反射的优缺点

优点:运行期类型的判断,动态加载类,提高代码灵活性

缺点:1,性能瓶颈,反射相当于一些列解释操作,通知JVM要做的事情,性能比直接Java代码要慢的多。2,安全问题,会增加安全隐患

 

参考文档:https://zhuanlan.zhihu.com/p/80519709

    https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/basic/reflection.md

 

以上是关于Java反射的主要内容,如果未能解决你的问题,请参考以下文章

反射机制入门

反射机制入门

反射机制入门

使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)

为啥我的 Ray March 片段着色器反射纹理查找会减慢我的帧速率?

OpenGL片段着色器不照亮场景