首页 > 其他分享 >反射的概述和获取字节码class对象的三种方式

反射的概述和获取字节码class对象的三种方式

时间:2022-10-20 10:47:40浏览次数:46  
标签:字节 对象 System class 概述 println Class out

反射概述

反射:将类的各个组成部分封装为其他对象 这就是反射机制

反射的框架设计灵魂

框架:半成品软件 可以在框架的基础上进行软件开发 简化编码

class类对象这个阶段可以看作为反射

反射好处:

1.可以在程序运行过程中 操作这些对象

2.可以解耦 提高程序的可扩展性

获取字节码class对象的三种方式

获取Class对象的方式:

1.Class.forName("全类明“):将字节码文件加载进内存 返回class对象

2.类名.class:通过类名的属性Class获取

3.对象.getClass():getClass()方法在Object类中定义着

代码:

/*
   获取Class对象的方式:
       1.Class.forName("全类明“):将字节码文件加载进内存 返回class对象
       2.类名.class:通过类名的属性Class获取
       3.对象.getClass():getClass()方法在Object类中定义着
    */
public class DemoReflect {
    public static void main(String[] args) throws Exception {
        // 1.Class.forName("全类明“)
        Class name1 = Class.forName("bai.demoReflect.Person");
        // class bai.demoReflect.Person
        System.out.println(name1);
        // 类名.class
        Class name2 = Person.class;
        // class bai.demoReflect.Person
        System.out.println(name2);
        // 对象.getClass()
        Person ps = new Person();
        Class name3 = ps.getClass();
        // class bai.demoReflect.Person
        System.out.println(name3);

        System.out.println("---------------------------");

        // 使用==比较对象 查看是否时同一个对象
        System.out.println(name1==name2);
        System.out.println(name1==name3);
        System.out.println(name2==name3);
    }

 结论:同一个字节码文件(*.class)在一次程序运行过程中 只会被加载一次 不论通过哪一种方式获取的Class对象都是同一个

三种方式的使用场景

第一种方式用于配置文件 将类名定义在配置文件中 读取文件 加载类

第二种方式用于参数的传递

第三种方式用于对象的获取字节码的方式

标签:字节,对象,System,class,概述,println,Class,out
From: https://www.cnblogs.com/shenziyi/p/16808849.html

相关文章

  • 配置Spring报错:class path resource [applicationContext.xml] cannot be opened beca
    无法打开applicationContext.xml文件问题:classpathresource[applicationContext.xml]cannotbeopenedbecauseitdoesnotexistExceptioninthread"main"org.s......
  • 【极客时间】大数据概述及HDFS介绍
    ......
  • 版本控制概述(Git入门)
    简介版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本......
  • day13 I/O流——字节输入输出流、字符输入输出流 & File常用类 & (字节)复制大文件
    day13I/O流定义:数据在两设备传输称为流,流是一组有顺序的,有起点和终点的字节集合I是input的缩写,表示输入流O是output缩写,表示输出流字节流(视频等)输入InputStream......
  • FTP概述
     FTP是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unencode一......
  • spring-事务概述
    目录​​Spring事务架构​​​​事务特性​​​​并发事务下存在的几个安全性问题​​​​脏读​​​​不可重复读​​​​幻读​​​​事务的隔离级别​​​​事务传播特性......
  • Classical Cipher
    [NPUCTF2020]ClassicalCipher难得做到一道古典密码的题目,打开后有一个flag.zip和一个提示。解密后的flag请用flag{}包裹压缩包密码:gsv_pvb_rh_zgyzhs对应明文:***......
  • 爬虫-1.概述和HTTP请求与响应处理
    爬虫-1.概述和HTTP请求与响应处理概述爬虫,应该称为网络爬虫,也叫网页蜘蛛、网络机器人、网络蚂蚁等。搜索引擎,就是网络爬虫的应用者。大数据时代的到来,所有企业都希望通过海......
  • 深入剖析Redis系列:Redis数据结构与全局命令概述
    前言Redis提供了5种数据结构。理解每种数据结构的特点,对于Redis的 开发运维 非常重要,同时掌握Redis的 单线程命令处理 机制,会使 数据结构 和 命令 的选择事......
  • 约束_概述与约束_非空约束
    约束_概述约束概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。分类:1.主键约束:primary key2.非空约束:......