4

Java是怎么在运行的时候识别对象类型的

 1 year ago
source link: https://blog.51cto.com/u_15460453/5819373
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Java是怎么在运行的时候识别对象类型的

精选 原创

周杰伦本人 2022-11-03 11:59:52 ©著作权

文章标签 加载 java 初始化 文章分类 Java 编程语言 yyds干货盘点 阅读数287

Table of Contents

Java是怎么在运行的时候识别对象类型的

Java可以在运行的时候知道对象的信息,这主要体现在Java的两个功能,RTTI和反射。

RTTI全称Run-Time Type Identification,通过运行时类型信息使用它的引用来检查引用指向的对象的派生类。Java中的一切类是Object类的派生类,比如我们定义了一个Xpp类,在运行的时候RTTI会将Object转型为Xpp。

RTTI的工作原理是每个类多有一个Class对象,Class对象的生成是通过类加载机制完成,这就涉及Java虚拟机的知识了。构造方法是类的隐性静态方法,当我们使用new调用构造器创建对象的时候,类就加载进来Java虚拟机中。这里采用的是动态加载,在被使用的时候才进行加载,静态方法在类初始化的时候就被调用了。

类加载过程

类加载器的过程:加载、验证、准备、解析和初始化。

加载的过程就是类加载器会根据类名来加载对应的class文件,并创建这个类的Class对象。

验证就是验证class文件是否完整,这里包括文件格式的验证、原数据的验证、字节码的验证和符合引用的验证。

准备就是对类的静态变量就是被static修饰的变量分配内存,Jdk1.7之前是在方法区分配内存,jdk1.7和之后是在堆中分配内存,这里静态变量的初始值为0,被static final修饰的常量直接是最终值。

解析阶段是将符合引用转换为直接引用

初始化就是创建对象的过程了,如果类有父类,就先初始化父类。

Class类的各种方法

使用Class.forName(“全限定名类名”)方法可以获取类的Class对象,使用类字面常量也可以获取到类的Class对象,比如Xpp.class

使用Class的getInterfaces()方法可以获取这个类实现了哪些接口

使用Class的 getName()方法和getCanonicalName()方法返回的全限定名,也就是包含包的类名

使用Class的getSimpleName()方法返回直接类名, 如果基础类是匿名的,则返回一个空字符串。

使用Class的newInstance()方法创建Class对象表示的类的新实例。这个类必须包含空构造方法。如果尚未初始化该类,则将其初始化。

这篇文章我们讲了Java的一个重要的概念,RTTI,即运行时对对象进行类型定义,涉及到类的加载过程,最后介绍了一下Class这个类提供的常用的方法,这一部分的内容还是比较难理解的,涉及到了Java虚拟机的知识点。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
  3. 有不当之处欢迎批评指正。
  • 1收藏
  • 评论
  • 分享
  • 举报

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK