java --- 对象的创建过程
java 对象创建的过程
存在了继承关系之后,对象创建过程如下:
1.分配空间。要注意的是,分配空间不光是分配子类的空间,子类对象中包含的父类对象所需要的空间,一样在这一步统一分配。在分配的空间的时候,会把所有的属性设置为默认值。
2.递归的构造父类对象。
3.初始化本类属性。
4.调用本类的构造方法。
举例介绍对象创建的过程。
假设如下代码:
class A{
int valueA = ;
public A(){ valueA = ; }
}
class B extends A {
int valueB = ;
public B(){ valueB= ; }
}
public calss TestInherit{
public static void main(Stirng []){
B b = new B();
}
}
我们在main方法中创建了一个b对象,创建的过程如下:
1.分配空间。在分配空间时,会把B、A这两个对象的空间一次性都分配完毕,然后将这两个对象的属性都设置为默认值,这样,valueA、valueB这两个属性都被设置为0。
2.递归构造B对象的父类对象。这里,要构造的就是A类对象。
3.初始化B的属性。即把valueB赋值为200。
4.调用B的构造方法。
其中第2步,创建A类对象,不需要再重新分配空间,需要一下几步:
2.1 递归的构造A类对象的父类对象。创建的步骤与创建A类对象同理。此例中以为A没有任何的父类,没有任何的输出。
2.2 初始化A类属性。把valueA 赋值为100.
2.3 调用A类的构造方法。
总结一下,创建B类对象的步骤一共有5步
1.分配空间
2.初始化父类--A类属性。
3.调用父类--A类的构造方法.
4.初始化子类 B的属性。
5.调用子类B的构造方法。
java --- 对象的创建过程的更多相关文章
- 图解JAVA对象的创建过程
前面几篇博文分别介绍了JAVA的Class文件格式.JVM的类加载机制和JVM的内存模型,这里就索性把java对象的创建过程一并说完,这样java对象的整个创建过程就基本上说明白了(当然你要有基础才能 ...
- 深入理解Java对象的创建过程:类的初始化与实例化
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...
- (转)深入理解Java对象的创建过程
参考来源:http://blog.csdn.net/justloveyou_/article/details/72466416 摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一 ...
- Java对象的创建过程:类的初始化与实例化
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...
- 2 Java对象的创建过程
JAVA中创建对象直接new创建一个对象,对么对象的创建过程是怎样的呢? 程序运行过程中有许多的对象被创建出来.那么对象是如何创建的呢? 一 对象创建的步骤 1 遇到new指令时,检查这个指令的参数是 ...
- Java对象(创建过程、内存布局、访问方法)
(Java 普通对象.不包括数组.Class 对象等.) 对象创建过程 类加载 遇到 new 指令时,获取对应的符号引用,并检查该符号引用代表的类是否已被初始化.如果没有就进行类加载. 分配内存 ...
- Java对象的创建过程
//TODO https://www.cnblogs.com/chenyangyao/p/5296807.html
- JAVA虚拟机:对象的创建过程
简要说明的话,Java对象的创建过程分为下面几步: 1.执行相关检查: 2.为对象分配内存,将分配到的内存空间都初始化为零值: 3.进行构造代码块和构造函数的初始化 下面详细介绍这几个步骤: 1.执行 ...
- java中对象的创建过程
public class Test1 { public static void main(String[] args) { new B(); System.out.println("---- ...
随机推荐
- 帝国cms分页样式修改文件-注意事项
帝国cms分页样式主要有:内容页分页样式.列表页分页样式以及默认搜索模板使用的搜索样式等几种. 要改这些样式其实也很简单,在网站目录中找到相应的.css文件修改empages属性就行了,但是这样比较麻 ...
- Python之三层菜单
三层菜单,根据用户所选数字,进入子菜单.一级一级呈现. menu = { 'Beijing': { "ChaoYang": { "CBD": ['CICC', ...
- mybatis日记配置Log4j
拷贝log4j-1.2.16.jar到项目lib下 方式一是在src下新建一个log4j.xml文件,其具体内容如下 <?xml version="1.0" encoding ...
- linux所有信息查询网址
- Splunk
http://www.huxiu.com/article/33724/1.html http://www.netis.com.cn/splunk/%E4%BB%80%E4%B9%88%E6%98%AF ...
- java 面试 复习 II
1 break 多重 循环跳出当前循环到上层循环再执行. 如若想跳出多重循环可以使用标号 2 byte,short,char都可以隐含转换为int.可以用在switch 表达式.long和str ...
- VS2010/MFC说明
此栏目大多数内容转自鸡啄米http://www.jizhuomi.com/ 方便使用对其内容做了少量修改,仅是个人收藏使用,不做其它用途.
- JS动态增加页面上的控件实例
<input type="button" value="继续添加" onclick="append();"/ > & ...
- Android实现视频录制
安卓实现视频录制,有两种方法,一种是调用自带的视频功能,一种是使用MediaRecorder. 每种方法都有自己的优缺点.接下来,把两种方法的代码写出来. 先说第一种方法,也是最简单的方法,那就是直接 ...
- SQL SERVER 2005 同步复制技术(转)
SQL SERVER 2005 同步复制技术 以下实现复制步骤(以快照复制为例) 运行平台SQL SERVER 2005 一.准备工作: 1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密 ...