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)