ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021年8月4日

2021-08-06 09:01:43  阅读:164  来源: 互联网

标签:反射 java 字节 对象 2021 Class 类名


第5节 - 05-反射_概述

  反射用在开发框架中。开发项目,使用框架不会用到反射。

 

  注意:反射的概念,将类的各个组成部分封装为其他对象。华为云:反射,就是把java类中的各种成分映射成一个个java对象。reflection:(n.)映像; 映照出的影像; (声、光、热等的)反射; 反映; 显示; 表达。本来类是描述世间万物的抽象描述,那么类也需要被描述。这个类被描述的意思英文表达为映射。

 

java代码在计算机中经历的三个阶段:

  1、java类经过编译生成字节码文件,字节码包括:类名、成员变量、构造方法、成员变量等描述性内容。java类和字节码文件都在硬盘中存储。称为源代码阶段(source)。

  3、先讲第三个阶段,new一个对象后,到达计算机内存中,称为运行时阶段(runtime)。

  2、Class类对象阶段(下面详解)。以前没学的第二个阶段。第一阶段到第二阶段,将字节码文件加载进内存,使用的加载工具是类加载器(ClassLoador)。

补充:

  在内存中如何描述字节码文件?java中万物皆对象。在内存中有一个对象来描述字节码文件,称为Class类(的)对象。在java中有一个类java.lang.Class类,是用来描述所有字节码物理文件的类。描述这个字节码物理文件一些共同特征和行为的类,同其他普通类一样,但确实所有java类的字节码文件的共同的类。

  Class类中,有三部分比较重要的东西(也有其他内容),某类的字节码的成员变量、构造方法、成员方法。Class类中将其封装为Field对象、Contructor对象、Method对象(即:反射机制的概念所表达的),组合成一个Class对象。但因为不仅一个,所以用数组分别描述:Field[] fields、Constructor[] constructors、Method[] methods。

  然后就可以通过Class类对象的行为(如方法)来创建需要的对象。

  所以可以称第二个阶段为Class类对象阶段。我们使用的所有对象都是通过Class对象类创建出来的,只不过以前没有详细研究这个过程。

 

 

反射的好处:

  1.可以在程序运行过程中,操作这些(成员)对象。典型的使用例子:Idea等开发软件中(开发软件是在运行中的)通过“对象名”+“.” 来选择对象不同的方法。

    细想一下,Idea如何知道这个你使用的这个对象有哪些方法的?反射就是答案,因为这个类的Class类对象描述了对象的类的字节码文件。

 

  2.解耦,来提高程序的可拓展性。比较抽象,后面通过《第11节》案例讲解。

第6节 - 06-反射_获取(类的)字节码Class对象的三种方式

  反射是将 类的组成部分 封装成其他对象。获取和操作这些对象最关键的是获取字节码对象(Class类对象)。

  这三种方式分别对应java代码的三个阶段。

  1.source源代码阶段:意味着java代码只有字节码文件,未进内存。需要手动的将其加载进内存,生成字节码对象

    Class.forName("全类名"):将字节码文件加载进内存,返回Class对象。此为静态方法。

  2.Class类对象阶段:已经有字节码对象了,但是还没实际的对象。即字节码已经加载进内存了。不需要加载,只需要获取。

    类名.class:通过类名的属性class获取。(类名,实际上就是类的字节码对象名?应该不是,因为要获取字节码对象,那么类名是什么呢?字节码文件≠字节码对象=Class类对象=已加载的类≠类名,通过实际代码例子发现类名非字节码对象,但是有了字节码,自然而然有了字节码对象,两者相伴而生(?)。类名.class代表这个类的Class对象,同时也是类的.class文件的名字。Class对象也就是某类在java中的形式,万物皆对象,类也是一种对象。)

  3.Runtime运行时阶段。已经有对象了,

    对象.getClass():返回运行时类对象(Class类型的类对象、字节码对象)这个方法是封装在Object类里的,被所有的子类继承下来了,意味着所有的对象都有这方法。

 

 

 

 

 

 代码演示:

   注意:java类代码在集成开发环境Idea中一经保存,即已经被自动编译。也就是说保存后就会生成字节码文件。

 

 

  问题:类名,在java中是个什么类型的数据?

 

第7节 - 07-反射_(类的)字节码Class对象功能概述

  拿到Class对象,就要使用。如何使用?字节码对象有什么功能?通过查看java api发现Class类中大多是getXxx()类型的方法。说明有获取功能。

 

   后面举例使用这些方法,并详细讲解Declared

 

第8节 - 08-反射_(类的)字节码Class对象功能_获取Field成员变量

 

 

 

 

第9节 - 09-反射_(类的)字节码Class对象功能_获取成员方法Constructor构造方法

 

 

 

  

标签:反射,java,字节,对象,2021,Class,类名
来源: https://www.cnblogs.com/trumbull/p/15097213.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有