Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
java反射原理详解_什么叫反射,希望能够帮助你!!!。
一、概述
Java 的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。对之前写到反射机制补充。
二、正射
有反射就有对应到正射,当需要使用到某一个类的时候,先了解这个类到作用。然后实例化这个类,接着用实例化好的对象进行操作,这就是正射。
User u= new User(); u.setAge(20); u.setName("java");
三、反射
反射就是,一开始并不知道要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。
Class<?> clazz = null; //获取Class对象的引用 clazz = Class.forName("com.example.javabase.User"); //第一种方法,实例化默认构造方法,User必须无参构造函数,否则将抛异常 User user = (User) clazz.newInstance(); user.setAge(20); user.setName("java"); System.out.println(user);
两段代码执行效果一样,但是实现的过程还是有很大的差别的:
所以反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法。
四、Class类的对象
Java运行时识别对象和类的信息主要有两种方式:
每个类都有一个Class对象,每当编译一个新类就产生一个Class对象(保存在一个同名的.class文件中)。比如创建一个User类,那么JVM就会创建一个User对应Class类的Class对象,该Class对象保存了User类相关的类型信息
获取反射中的Class对象有三种方法:
反射创建类对象主要有两种方式:
反射除了创造对象,还可以获取方法,成员变量,构造器,这些都是基本的使用可以参考之前写到反射机制
五、反射实现原理
class类信息获取到之后开始实例化,有两种(一:无参构造函数,二:有参构造函数)
第二步(无参构造函数): 调用 newInstance() 的实现方式
第二步(有参构造函数):获取所有的构造器主要步骤
方法调用:
跟踪底层源码发现Method的invoke方法,是由本地方法invoke0决定的。
六、反射的问题
性能问题
安全问题
1、在构造方法中检查单例对象,如果已创建则抛出异常。
2、枚举式实现单例。
反射优点
能够运行时动态获取类的实例,提高灵活性。
与动态编译结合。
当然一般到业务场景以及如果一个程序对安全性有强制要求的场景,最好不要使用反射。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。