Java对象创建过程
2023-02-26 10:21:12 时间
对象创建过程
类加载的五个过程:加载、验证、准备、解析、初始化。
加载
通过名字获取类的二进制流并在内存中生成class对象。在加载阶段,虚拟机主要完成三件事:
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
- 通过一个类的全限定名来获取定义此类的二进制字节流。
- 将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。
- 在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区域数据的访问入口。
验证
验证二进制流的正确性和安全性,包括文件格式验证,元数据验证,字节码验证以及符号引用验证四个步骤。
准备
给类变量(static)分配空间并完成初始化 注意:如果不是final变量,值均为零值。
解析
将符号引用解析为直接引用,包括类或接口的解析,字段解析,类方法解析,接口方法解析。
初始化
执行类的()方法,这个方法由所有对静态变量的赋值操作和所有静态代码块组成,虚拟机会保证父类的()方法在子类的方法开始之前结束,并且提供线程安全的保证(类似于double check,多个线程同时初始化时只有一个线程进入方法,其他线程阻塞,执行完成后其他线程不会再进入方法)
相关面试题
检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。 public class HelloB extends HelloA { public HelloB() { } { System.out.println("I’m B class"); } static { System.out.println("static B"); } public static void main(String[] args) { new HelloB(); } } class HelloA { public HelloA() { } { System.out.println("I’m A class"); } static { System.out.println("static A"); } } A. static A I’m A class static B I’m B class B. I’m A class I’m B class static A static B C. static A static B I’m A class I’m B class D. I’m A class static A I’m B class static B 正确答案: C 解析: Java程序初始化工作可以在许多不同的代码块中来完成,它们的执行顺序如下: 父类的静态变量、父类的静态代码块、子类的静态变量、子类的静态代码块、 父类的非静态变量、父类的非静态代码块、父类的构造函数、 子类的非静态变量、子类的非静态代码块、子类的构造函数。
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- Java 多线程(七):线程池
- Java 多线程(五):锁(三)
- Java 多线程(四):锁(二)
- Java 多线程(三):锁(一)
- Java 多线程(二):并发编程的三大特性
- Java 多线程(一):基础
- Java SE 18 新增特性
- Java SE 17 新增特性
- Java SE 16 新增特性
- Java SE 15 新增特性
- Java SE 14 新增特性
- Java SE 10 Application Class-Data Sharing 示例
- Java SE 13 新增特性
- Java SE 12 新增特性
- Java SE 11 新增特性
- Java SE 10 新增特性
- Java SE 9 模块化示例
- Java SE 9 多版本兼容 JAR 包示例
- Java SE 9 新增特性
- Java SE 8 新增特性