反射相关的知识点

雨点打透心脏的1/2处 2023-10-05 19:33 149阅读 0赞

反射

  • 概述
  • 获取class类的三种方式
  • 通过class对象获取类的所有信息
  • 反射的应用场景
  • 相关的面试题
    • 1、Java反射创建对象效率高还是通过new创建对象的效率高?
    • 2、反射机制的优缺点?

概述

  • JAVA反射机制是在运行状态中,对于任意一个类,都能够知道
    这个类的所有属性和方法;对于任意一个对象,都能够调用它的
    任意一个方法和属性;这种动态获取的信息以及动态调用对象的
    方法的功能称为java语言的反射机制。
  • 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖
    使用的就是Class类中的方法.所以先要获取到每一个字节码文件
    对应的Class类型的对象.

类的加载过程

可以简单的理解:
比如有一个妃子A和B,妃子B为了争宠要谋害A,她就扎一个A的小人。每天扎小人,对小人造成的伤害都会直接伤害到妃子A。

获取class类的三种方式

①Class.forName(“类的全限定名”):通过类的全限定名获取该类的 Class 对象(推荐)

常用,只需要传入一个类的完全限定名即可

  1. Class<?> hashMap= Class.forName("java.util.HashMap");

②类名.class:这种获取方式只有在编译前已经声明了该类的类型才能获取到 Class 对象

需要导入对应的包,依赖太强

  1. Class<HashMap> hashMap= HashMap.class;

③实例.getClass():通过实例化对象获取该实例的 Class 对象(不推荐)

已经创建对象,就意味着已经产生了Class类

  1. <String, String> hashMap = new HashMap<>();
  2. Class<? extends Map> hashMapClass = hashMap.getClass();

通过class对象获取类的所有信息

在这里插入图片描述

对应的一些API自己去Google一下就行了。

反射的应用场景

1、Spring 实例化对象:当程序启动时,Spring 会读取配置文件applicationContext.xml并解析出里面所有的标签实例化到IOC容器中。
2、反射 + 工厂模式:通过反射消除工厂中的多个分支,如果需要生产新的类,无需关注工厂类,工厂类可以应对各种新增的类,反射可以使得程序更加健壮。
3、JDBC连接数据库:使用JDBC连接数据库时,指定连接数据库的驱动类时用到反射加载驱动类

相关的面试题

1、Java反射创建对象效率高还是通过new创建对象的效率高?

通过new创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低

2、反射机制的优缺点?

优点:可以动态执行,在运行期间根据业务功能动态执行方法、访问属性,最大限度发挥了java的灵活性。

缺点:对性能有影响,这类操作总是慢于直接执行java代码

发表评论

表情:
评论列表 (有 0 条评论,149人围观)

还没有评论,来说两句吧...

相关阅读

    相关 反射知识

    一、Java反射机制是什么? 1.1 反射原理 (1)Java反射机制(`Java Reflection`)是Java语言中一种`动态(运行时)访问、检测 & 修改

    相关 vue相关知识

    1、插槽slot 插槽使组件具有更强的扩展性,抽取共性,保留不同 在子组件中,使用特殊的元素slot就可以为子组件开启一个插槽(可设置默认值),该插槽插入什么内容取决于

    相关 JavaScript相关知识

    JavaScript介绍 1今天想和大家分享的是JavaScript(以下称为js)的相关的一些知识点。1.1今天主要说一些简单的:1,js的基本介绍 2,变量和数据类型