码迷,mamicode.com
首页 > 编程语言 > 详细

Java反射

时间:2020-04-21 23:39:09      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:tde   str   信息   div   master   生成   反射机制   reflect   ocs   

在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反射

标签:tde   str   信息   div   master   生成   反射机制   reflect   ocs   

原文地址:https://www.cnblogs.com/codingLiu/p/12748803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!