博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA虚拟机:对象的创建过程
阅读量:7097 次
发布时间:2019-06-28

本文共 1284 字,大约阅读时间需要 4 分钟。

简要说明的话,Java对象的创建过程分为下面几步:

1、执行相关检查;

2、为对象分配内存,将分配到的内存空间都初始化为零值;

3、进行构造代码块和构造函数的初始化

 下面详细介绍这几个步骤:

1、执行相关检查

虚拟机遇到一条new指令时,将会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载、解析和初试化过,如果没有,那必须先执行相应的类加载过程;

例:Person p = new Person()

当有这么一条new指令时,我们先去检查p这个符号引用是否能在常量池中定位到,然后检查Person这个类是否已经被加载、解析和初始化,没有则执行相关的操作;static代码块就是在这一加载过程中被执行;

2、为对象分配内存

类加载检查完后,将为新生对象分配内存;

将分配到的内存空间都初始化为零值;

如果Person类有继承父类,在这一步分配内存会分配Person类和其父类的内存,并先完成Person父类对象的创建

3、进行构造代码块和构造函数的初始化

上一步完成了内存空间的初始化后,接着进行构造代码块和构造函数的初始化

看下面的例子再理解一下对象创建的过程

public class test extends Person{    static {        System.out.println("子类static代码块");    }    {        System.out.println("子类构造代码块");    }    public test() {        System.out.println("子类构造方法");    }    public static void main(String[] args) {        test t = new test();    }}class Person{    static{        System.out.println("父类static代码块");    }    {        System.out.println("父类构造代码块");    }    Person(){        System.out.println("父类构造方法");    }}
父类static代码块子类static代码块父类构造代码块父类构造方法子类构造代码块子类构造方法

从结果可以看出:

1、static代码块是最先执行,子类和父类的static代码块都是在类加载的过程中就执行的;

2、父类对象的创建在子类对象之前完成,所以父类的构造代码块和构造方法先执行,执行完后再执行子类的;

3、构造代码块是在构造函数之前执行的,其实整个对象的加载顺序是:父类和子类的static代码块、父类中的变量、代码块、构造方法,然后再初始化子类变量、代码块、构造方法。其中变量最先初始化创建,其次是代码块,构造方法最后创建;

 

转载于:https://www.cnblogs.com/thiaoqueen/p/8855722.html

你可能感兴趣的文章
poj 1743 Musical Theme (后缀数组)
查看>>
XACML学习
查看>>
Java中文乱码问题研究(二)
查看>>
easyui图标大全
查看>>
Emmet:HTML/CSS代码快速编写神器
查看>>
webpack实战
查看>>
虚幻4游戏开发_3_创建与继承材质
查看>>
win2003域控主备(热备)搭建
查看>>
浪潮之巅读后感
查看>>
Mathematica 函数调用发生异常时停止计算
查看>>
Linux service命令
查看>>
TCP发送源码学习(2)--tcp_write_xmit
查看>>
Android第三方开源图片裁剪截取:cropper
查看>>
C# 中英文符号互转
查看>>
ACM HDU 1219 AC me(简单题,但是花了很长时间才AC)
查看>>
Ethernet LEDs
查看>>
row_number()over函数的使用(转)
查看>>
怎样在Delphi中屏蔽Flash控件的右键弹出菜单
查看>>
[BuildRelease]Mozilla Build Tools - Autoconf + GNU Make
查看>>
DRM-内容数据版权加密保护技术学习(上):视频文件打包实现(转)
查看>>