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("---- ...
随机推荐
- codeforces 374D. Inna and Sequence 线段树
题目链接 给m个数, n个操作, 一个数列, 初始为空.一共有3种操作, 在数列末尾加0, 加1, 或删除位置为a[i]的数, a[i]为初始给的m个数, 如果a[i]大于数列长度, 那么什么也不发生 ...
- Linux 系统之Systemd
子贡问为仁.子曰:“工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者.”——孔子(春秋)<论语·卫灵公> [工欲善其事,必先利其器] 掌握一门技术,知道其发展历程是非常重要的 ...
- mybatis一对一关联表查询
先创建一个表 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name ) ); CREATE TABLE class( c_ ...
- Mysql5.6.24 zip解压缩版配置及修改默认编码方法
win64位下载地址: http://dev.mysql.com/downloads/file.php?id=456319 下载完毕后解压 配置环境变量 在Path后加上mysql解压后bin文件夹所 ...
- poj 3264 Balanced Lineup(线段树、RMQ)
题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...
- In Action(最短路+01背包)
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 如何查看程序被哪个版本编译器编译的linux-gcc
如何查看程序被哪个版本编译器编译的linux-gcc http://bbs.csdn.net/topics/380000949 那是不可能的,除非你加入了调试信息,也就是编译的时候加入了-g参数,然后 ...
- Main function
Main function A program shall contain a global function named main, which is the designated start of ...
- Ubuntu 15.04 安装rmagick 2.15.4
apt-get install pkg-config, libmagick-dev,libmagickcore-dev, libmagickwand-dev, gem install rmagick
- was服务器下修改jsp无效果
使用了jsp静态导入,修改了导入的jsp页面,但是目标页面没出现效果.先说下静态导入和动态导入的区别: include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么J ...