Java是怎么在运行的时候识别对象类型的
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.
Java是怎么在运行的时候识别对象类型的
精选 原创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收藏
- 评论
- 分享
- 举报
Recommend
-
31
一、引言 如你所知,Java是一门面向对象的编程语言。我们平常在写代码的时候也是在不停的操作各种对象,那么当你在写出User user = new User();这样一行代码的时候,JVM都做了些什么呢?
-
7
在 .NET 对象和 JSON 互相序列化的时候,枚举类型如何设置成字符串序列化,而不是整型? 2020-06-02 23:57 默认情况下,Newtonsoft.Json 库序列化和反序列化...
-
7
V2EX › Linux 如何在 Ubuntu 云服务器运行 sh 脚本的时候退出到可以输入命令的模式 TwoSetVi...
-
3
JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的 又名:Java虚拟机的内存模型(JMM)是什么样的. 通过前面两篇文章的学习,我们知道了一个Java类的生命周期及类加载器。我们可以得到如下两幅图: 类生命周期: 父类委托...
-
3
特别重要:人脸识别的时候,一定要穿上衣服啊公众号「非著名程序员」主理人,程序员/复业者/生涯规划师文章首发于微信公众号「非著名程序员」,欢迎大家关注。
-
3
V2EX › Python 升级 marshmallow,运行 pytest 的时候有大量 warning 怎么快速修改正确?
-
4
V2EX › Java Java ,大量对象内存中计算, oom 怎么处理哇。 frank1256 · 18 小时 14 分钟前...
-
2
运行npm install命令的时候会发生什么? 2022年04月22日 02:49 · 阅读 46 本文分享自华为...
-
2
参考 Ability的
-
7
V2EX › Java docker 容器中运行的程序 怎么在它运行的时候把它标识出来?
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK