黑马程序员武汉中心——javaee面试宝典 类加载

3 类加载

3.1类的加载过程:

当使用java命令运行java程序时,此时JVM启动,并去方法区下找java命令后面跟的类是否存在,如果不存在,则把类加载到方法区下

在类加载到方法区时,会分为两部分:先加载非静态内容到方法区下的非静态区域内,再加载静态内容到方法区下的静态区域内

当非静态内容载完成之后,就会加载所有的静态内容到方法区下的静态区域内

3.1  先把所有的静态内容加载到静态区域下

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

3.3  当所有的静态成员变量默认初始化完成之后,再对所有的静态成员变量显式初始化

4,当所有的静态成员变量显式初始化完成之后,JVM自动执行静态代码块(静态代码块在栈中执行)[如果有多个静态代码,执行的顺序是按照代码书写的先后顺序执行]

5,所有的静态代码块执行完成之后,此时类的加载完成

3.2对象的创建过程:

当在main方法中创建对象时,JVM会先去方法区下找有没有所创建对象的类存在,有就可以创建对象了,没有则把该类加载到方法区

在创建类的对象时,首先会先去堆内存中开辟一块空间,开辟完后分配该空间(指定地址)

当空间分配完后,加载对象中所有的非静态成员变量到该空间下

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

所有的非静态成员默认初始化完成之后,调用相应的构造方法到栈中

在栈中执行构造函数时,先执行隐式,再执行构造方法中书写的代码

6.1  构造方法中的隐式:

第一步:执行super()语句      调用父类的没有参数的构造方法

第二步:对所有的非静态成员变量进行显式初始化(在定义成员变量时后面有赋值)

第三步:所有的非静态成员变量显式初始化完成之后,执行构造代码块

Ps.第二步第三步按照书写顺序执行

   6.2 最后执行构造方法中书写的代码

当整个构造方法全部执行完,此对象创建完成,并把堆内存中分配的空间地址赋给对象名(此时对象名就指向了该空间)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值