java中一个实例对象被创建的过程

首先,jvm在执行时,遇到一个新的类,挥刀内存中的方法区去找class的信息,如果找到就直接拿来用,如果没有找到,就会去将类文件加载到方法区,在类加载时,静态成员变量加载到方法区的静态区域,非静态变量加载到方法区的非静态区域。

静态代码块时是在类加载的时候自动执行的代码,非静态代码块是在创建对象时自动执行的代码块,不创建对象不执行该类的非静态代码块。

加载过程:

1、jvm会先去方法区中找有没有相应类的.class存在。如果有,就直接使用;如果没有,则把相关类的.class加载到方法区

2、在.class加载到方法区时,先加载父类再加载子类;先加载静态内容,再加载非静态内容

3、加载静态内容:

把.class中的所有静态内容加载到方法区的静态区域内

静态内容加载完成后,对所有的静态变量进行默认初始化

所有的静态变量默认初始化完成后,再显式初始化

当静态区域下的所有静态变量显式初始化完成后,执行静态代码块

 

4、加载非静态内容:把.class中的所有非静态变量及非静态代码块加载到方法区下的非静态区域

5、执行完之后,整个类的加载就完成了

对鱼静态方法和非静态方法都是被动调用,即系统不会自动调用执行,所以用户没有调用时时不会执行的,主要在于静态方法可以通过类名直接调用,而非静态方法只能先实例化对象后才能调用

 

二、对象的创建过程

1、new一个对象时,在堆内存中开辟一块空间

2、给开辟的空间分配一个地址

3、把对象的所有非静态成员加载到所开辟的空间下

4、所有的非静态成员加载完成之后,对所有的非静态成员变量进行默认初始化

5、所有非静态成员变量默认初始化之后,调用构造函数

6、在构造函数入栈执行时,分为两个部分,先执行构造函数中的隐式三步

执行super()

对开辟空间下的所有非静态成员变量进行显式初始化

执行构造代码块===即构造函数中书写的代码

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值