java new对象的创建过程
https://www.cnblogs.com/chenyangyao/p/5296807.html
关于对象的创建过程一般是从new指令(我说的是JVM的层面)开始的(具体请看图1),JVM首先对符号引用进行解析,如果找不到对应的符号引用,那么这个类还没有被加载,因此JVM便会进行类加载过程(具体加载过程可参见我的另一篇博文)。符号引用解析完毕之后,JVM会为对象在堆中分配内存,HotSpot虚拟机实现的JAVA对象包括三个部分:对象头、实例字段和对齐填充字段(具体内容请看图2),其中要注意的是,实例字段包括自身定义的和从父类继承下来的(即使父类的实例字段被子类覆盖或者被private修饰,都照样为其分配内存)。相信很多人在刚接触面向对象语言时,总把继承看成简单的“复制”,这其实是完全错误的。JAVA中的继承仅仅是类之间的一种逻辑关系(具体如何保存记录这种逻辑关系,则设计到Class文件格式的知识,具体请看我的另一篇博文),唯有创建对象时的实例字段,可以简单的看成“复制”。
为对象分配完堆内存之后,JVM会将该内存(除了对象头区域)进行零值初始化,这也就解释了为什么JAVA的属性字段无需显示初始化就可以被使用,而方法的局部变量却必须要显示初始化后才可以访问。最后,JVM会调用对象的构造函数,当然,调用顺序会一直上溯到Object类。
至此,一个对象就被创建完毕,此时,一般会有一个引用指向这个对象。在JAVA中,存在两种数据类型,一种就是诸如int、double等基本类型,另一种就是引用类型,比如类、接口、内部类、枚举类、数组类型的引用等。引用的实现方式一般有两种,具体请看图3。此处说一句题外话,经常用人拿C++中的引用和JAVA的引用作对比,其实他们两个只是“名称”一样,本质并没什么关系,C++中的引用只是给现存变量起了一个别名(引用变量只是一个符号引用而已,编译器并不会给引用分配新的内存),而JAVA中的引用变量却是真真正正的变量,具有自己的内存空间,只是不同的引用变量可以“指向”同一个对象而已。因此,如果要拿C++和JAVA引用对象的方式相对比,C++中的指针倒和JAVA中的引用如出一辙,毕竟,JAVA中的引用其实就是对指针的封装。
注:本文为原创博文,转载请注明出处。
图1 对象的创建过程
图2 对象的组成结构
图3 对象引用的两种实现方式
java new对象的创建过程相关推荐
- JAVA学习第五篇--java中对象的创建过程以及函数的调用过程
下面本文将详细介绍java语言中对象的创建过程,以及函数的调用过程. class Person{public String name="zhao";public int ege;p ...
- java初始化实例化_Java对象的创建过程:类的初始化与实例化
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...
- Java对象的创建过程
对象的创建过程: ①将class load到内存: ②申请内存: ③成员变量赋默认值: ④调用构造方法<init>,同时,成员变量顺序赋初始值,执行构造方法语句,会先调用父类的构造方法,有 ...
- java什么是对象如何创建对象_java对象的创建过程是什么
java对象的创建过程: 类加载检查-->分配内存-->初始化零值-->设置对象头-->执行init方法 具体如下: 1.类加载检查 虚拟机遇到一条new指令时,先检查这个指令 ...
- java创建变量的过程_java 对象的创建过程
初始化的顺序首先是static(如果它们尚未由前一次对象创建初始化,也就是new对象的时候,只执行一次static变量初始化),变量初始化顺序有变量在类的定义顺序决定的: 对象的创建过程,以Dog类为 ...
- Java对象的创建过程:类的初始化与实例化
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...
- 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的?
转载自 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的? 先回顾一下Java程序执行的过程: Java程序执行时,第一步系统创建虚拟机进程,然后虚拟器用类加载器Class Loade ...
- java实例化类之后如何赋值_深入理解Java对象的创建过程:类的初始化与实例化...
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...
- Java 面向对象与对象的创建过程及变量
Java 面向对象与对象的创建过程及变量: 1.面向对象和面向过程的思想对比 : 面向过程 :是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的 面向对象 :是一种以对象为中心的编 ...
- 深入理解Java对象的创建过程:类的初始化与实例化
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...
最新文章
- 原来神经网络的损失函数也是网络的一部分
- SSM实现大学生综合素质评测系统
- [攻防世界 pwn]——hello_pwn
- java语音播报案例
- Silverlight反编译系列二常见代码(自动生成属性CompilerGenerated,代码)
- Leetcode--113. 路径总和Ⅱ
- 【html】【19】高级篇--大事件时间轴
- Onvif开发之代码框架生成篇
- 斩获VCR竞赛榜第一,腾讯微视推出BLENDer单模型,超越多模型最好效果
- AD域服务器中批量创建帐户
- 斯蒂夫·乔布斯《你必须要找到你所爱的东西》
- 计算机在智能交通应用,计算机信息技术在智能交通系统中的应用
- 从碧桂园和兴海物联看物业信息化、数字化和智能化
- AutoHotKey:Shift+ijkl实现方向键
- 手机浏览器找不到服务器,苹果手机的Safari浏览器找不到服务器怎么办?
- linux怎么将一个文件移动到另一个目录下
- length与length()的区别
- 来自帅气博主的c语言文案
- 自考计算机专业就业率,自考计算机专业就业前景和就业选择
- pptp连接服务器无响应,解决PPTP客户端拨号不成功