首頁/ 文章/ java八股之反射机制

java八股之反射机制

2025-03-02 15:03  瀏覽數:101  來源:愚者    

什么是反射?
1、反射就是把Java类中的各种成分映射成一个个的Java对象。例如:一个类有成员变量、方法、构造方法、
包等等信息,利用反射技术可以对一个类进行解剖,把一个个组成部分映射成一个个对象。
2、反射能够在运行时获取类的信息。
3、JVM加载完类后,会在堆内存的方法区中产生一个Class类型的对象(一个类只有一个Class对象),
这个Class对象包含了完整的类结构信息。
(这个对象就像一面镜子,通过这个镜子能够看到类的结构,这种方法就是反射。)
为什么要在运行时获取类的信息?.java文件->.class文件->加载到JVM运行,
这就是所谓的在运行时获取类的信息,其实就是为了让我们所写的代码更具有【通用性】和【灵活性】
反射在框架中的应用?
1、SpringMVC你在方法上写上对象,传入的参数就会帮你封装到对象上
2、Mybatis可以让我们只写接口,不写实现类,就可以执行SQL【动态代理->反射】
3、在类上加上@Component注解,Spring就帮你创建对象
4、JDK动态代理其实就是运用了反射的机制,而CGLIB代理则用的是ASM框架,
通过修改其字节码生成子类来处理。
5、使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序。
反射机制的作用?
1、在运行时判断任意一个对象所属的类。
2、在运行时构造任意一个类的对象。
3、在运行时判断或调用任意一个类所具有的成员变量和方法。
4、在运行时获取泛型信息。
反射机制的优缺点?
优点:可以实现动态创建对象和编译,体现出很大的灵活性。
通过反射机制我们可以获得类的各种内容,进行了反编译。对于JAVA这种先编译再运行的语言来说,
反射机制可以使代码更加灵活,更加容易实现面向对象。
缺点:1、性能开销:反射相当于一系列解释操作,通知JVM要做的事情,性能比直接的Java代码要慢很多。
2、安全限制:使用反射技术要求程序必须在一个没有安全限制的环境中运行。
如果一个程序必须在有安全限制的环境中运行,如Applet,那么这就是个问题了。
3、内部暴露:由于反射允许代码执行一些在正常情况下不被允许的操作(比如:访问私有的属性和方法),
所以使用反射可能会导致意料之外的副作用,这可能导致代码功能失调并破坏可移植性。
反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化。
使用反射来获取Class对象的三种方法?
1、通过运行时类来获取class对象:Class dataClass = Data.class;
2、通过运行时类的对象来获取class对象:Data data = new Data();
Class aClass = data.getClass();
3、通过Class的静态方法forName(String path):
Class aClass1 = Class.forName("com.baizhi.Data");
如何使用反射破坏单例?
1、首先拿到万能的class对象(有三种方法)
2、拿到构造器,是这个方法私有的构造器也可以拿到
3、设置在构造器的时候不执行权限检查
4、由于没有了权限检查,在singleton类外面也可以创建对象了,然后执行方法。
反射在项目中的应用?
RPC项目中使用动态代理屏蔽网络传输的细节时,使用JDK动态代理的过程中用到了反射。



聲明:以上文章均為用戶自行添加,僅供打字交流使用,不代表本站觀點,本站不承擔任何法律責任,特此聲明!如果有侵犯到您的權利,請及時聯系我們刪除。

字符:    改为:
去打字就可以设置个性皮肤啦!(O ^ ~ ^ O)