java反射机制(超细节)

news/2024/5/19 6:39:44 标签: 反射, java,

java_0">java反射机制:

反射:框架设计的灵魂
框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
反射:将的各个组成部分封装为其他对象,这就是反射机制
好处:
1. 可以在程序运行过程中,操作这些对象。
2. 可以解耦,提高程序的可扩展性。

  • 获取Class对象的方式:
    1. Class.forName(“全名”):将字节码文件加载进内存,返回Class对象
    * 多用于配置文件,将名定义在配置文件中。读取文件,加载
    2. 名.class:通过名的属性class获取
    * 多用于参数的传递
    3. 对象.getClass():getClass()方法在Object中定义着。
    * 多用于对象的获取字节码的方式
    在这里插入图片描述
    * 结论:
    同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。

    • Class对象功能:
      • 获取功能:
        1. 获取成员变量们
          • Field[] getFields() :获取所有public修饰的成员变量

          • Field getField(String name) 获取指定名称的 public修饰的成员变量

          • Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符

          • Field getDeclaredField(String name)

        • Field:成员变量
      • 操作:
        1. 设置值

          • void set(Object obj, Object value)
        2. 获取值

          • get(Object obj)
        3. 忽略访问权限修饰符的安全检查

          • setAccessible(true):暴力反射在这里插入图片描述
            在这里插入图片描述
            在这里插入图片描述
            注意这个有一个暴力反射,有它才可以访问私有变量.
        4. 获取构造方法们

          • Constructor<?>[] getConstructors()

          • Constructor getConstructor(<?>… parameterTypes)

          • Constructor getDeclaredConstructor(<?>… parameterTypes)

          • Constructor<?>[] getDeclaredConstructors()

    • Constructor:构造方法
      • 创建对象:

        • T newInstance(Object… initargs)

        • 如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法
          在这里插入图片描述
          在这里插入图片描述

        1. 获取成员方法们:
          • Method[] getMethods()

          • Method getMethod(String name, <?>… parameterTypes)

          • Method[] getDeclaredMethods()

          • Method getDeclaredMethod(String name, <?>… parameterTypes)

        • Method:方法对象
      • 执行方法:

        • Object invoke(Object obj, Object… args)
      • 获取方法名称:

        • String getName:获取方法名
          在这里插入图片描述
          在这里插入图片描述
          在这里插入图片描述
        1. 获取全
          • String getName()
            在这里插入图片描述

http://www.niftyadmin.cn/n/898735.html

相关文章

SpringMVC(超细节(一))

我们的开发架构一般都是基于两种形式&#xff0c;一种是 C/S 架构&#xff0c;也就是客户端/服务器&#xff0c;另一种是 B/S 架构&#xff0c;也就 是浏览器服务器。在 JavaEE 开发中&#xff0c;几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中&#xff0c;系统标准的三层…

Tomcat跨服务器提交数据

搞了一晚上了&#xff0c;查了很多资料&#xff0c;终于还是解决了&#xff0c;这里我就来记录一下。 tomcat默认的情况下是过滤到静态资源的上传的&#xff0c;所以需要我们手动的设置一下&#xff01; 1.打开你的tomcat的安装的路径&#xff0c;点击conf,找到web.xml打开&…

SpringMVC(超细节(二))

响应数据和结果视图 : 返回值分类&#xff1a; (1)当返回值是String&#xff1a; controller 方法返回字符串可以指定逻辑视图名&#xff0c;通过视图解析器解析为物理视图地址。 //指定逻辑视图名&#xff0c;经过视图解析器解析为 jsp 物理路径&#xff1a;/WEB-INF/pages/s…

Mybatis链接池与事务

mybatis将数据源基本分为三种&#xff1a; 在这三种数据源中&#xff0c;我们一般采用的是 POOLED 数据源&#xff08;很多时候我们所说的数据源就是为了更好的管理数据库连接&#xff0c;也就是我们所说的连接池技术&#xff09;。 Mybatis 中数据源的配置&#xff1a; 我们…

Mybatis动态SQL语句(超细节)

动态 SQL 之标签 我们根据实体类的不同取值&#xff0c;使用不同的 SQL 语句来进行查询。比如在 id 如果不为空时可以根据 id 查询&#xff0c;如果 username 不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。 <select id"findByUser&…

Mybatis——多表查询(一对多,多对多)

Mybatis 多表查询之一对多 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 一对一查询(多对一)&#xff1a; 需求 查…

Mybatis——延迟加载(超细节)

何为延迟加载? 延迟加载&#xff1a; 就是在需要用到数据时才进行加载&#xff0c;不需要用到数据时就不加载数据。延迟加载也称懒载. 好处&#xff1a;先从单表查询&#xff0c;需要时再从关联表去关联查询&#xff0c;大大提高数据库性能&#xff0c;因为查询单表要比关联查…

Mybatis缓存(超细节)

像大多数的持久化框架一样&#xff0c;Mybatis 也提供了缓存策略&#xff0c;通过缓存策略来减少数据库的查询次数&#xff0c;从而提高性能。 Mybatis 中缓存分为一级缓存&#xff0c;二级缓存。 Mybatis 一级缓存 一级缓存是 SqlSession 级别的缓存&#xff0c;只要 SqlSe…