我是靠谱客的博主 爱笑苗条,最近开发中收集的这篇文章主要介绍java反射机制介绍,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、反射机制介绍
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2.获取Class对象的四种方式
①知道具体类的情况下可以使用:

Class alunbarClass = TargetObject.class;

但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此 方式获取Class对象不会进行初始化。
②通过 Class.forName()传入类的路径获取:

Class alunbarClass1 = Class.forName("cn.javaguide.TargetObject");

Class.forName(className)方法,内部实际调用的是一个native方法 forName0(className, true, ClassLoader.getClassLoader(caller), caller); 第2个boolean参数表示类是否需要初始化,Class.forName(className)默认是需要初始化。一旦初始化,就会触发目标对象的 static块代码执行,static参数也会被再次初始化。

③通过对象实例instance.getClass()获取:

Employee e = new Employee();
Class alunbarClass2 = e.getClass();

④通过类加载器xxxClassLoader.loadClass()传入类路径获取

class clazz = ClassLoader.LoadClass("cn.javaguide.TargetObject");

通过类加载器获取Class对象不会进行初始化,意味着不进行包括初始化等一些列步骤,静 态块和静态对象不会得到执行

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

反射机制优缺点
优点: 运行期类型的判断,动态加载类,提高代码灵活度
缺点: 1,性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的 java 代码要慢很多。
     2,安全问题,让我们可以动态操作改变类的属性同时也增加了类的安全隐患。

3、反射的应用场景
反射是框架设计的灵魂。 在我们平时的项目开发过程中,基本上很少会直接使用到反射机制,但这不能说明反射机制没有用,实际上有很多设计、开发都与反射机制有关,例如模块化的开发,通过反射去调用对应的字节码;动态代理设计模式也采用了反射机制,还有我们日常使用的 Spring/ Hibernate 等框架也大量使用到了反射机制。
eg:
①我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序;
②Spring框架的IOC(动态加载管理Bean)创建对象以及AOP(动态代理)功能都和反射有联系;
③动态配置实例的属性。

最后

以上就是爱笑苗条为你收集整理的java反射机制介绍的全部内容,希望文章能够帮你解决java反射机制介绍所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部