zoukankan      html  css  js  c++  java
  • 对象初始化

    (类初始化和对象初始化的区别?)
    Person p = new Person("zhangsan",20);

    这句话都做了什么事情?
    0,栈内存分配main中的p空间。
    1,因为new用到了Person.class文件,所以会先找到Person.class文件加载到内存中。
    2,执行该类中的static代码块,给Person.class类进行初始化。
    3,在堆内存中开辟空间,分配内存地址。
    4,在堆内存中建立对象的特有属性,并进行默认初始化。
    5,对属性进行显示初始化。
    6,对对象进行构造代码块初始化。
    7,对对象进行对应的构造函数初始化。
    8,将内存地址赋给栈内存中的p变量。
    初始化顺序:类初始化>>属性默认初始化>>属性显示初始化 >>构造代码块初始化 >>构造函数初始化。


    当创建一个类时,如 Student stu = new Student();
    jvm到底做了些什么?
    1.栈内存分配main中的stu空间。
    2.因为new用到了Studetn.class文件,所以会先找到Student.class文件加载到内存中。
    3.执行父类静态代码块。(类初始化)
    4.执行子类静态代码块。(类初始化)
    5.在堆内存中建立对象的特有属性,并进行默认初始化。


    6.父类显示初始化。**
    7.执行父类构造代码块。
    8.执行父类构造函数。


    9.子类显示初始化。**
    10.执行子类构造代码块。
    11.执行子类构造函数。

  • 相关阅读:
    windows安装nacos
    anki处理
    minikube安装net5
    在.net core中使用属性注入
    C# 使用MD5算法对密码进行加密
    c# 获取本机系统已经安装的打印机信息
    C# 比较两个datatable并找出修改差异的值
    打印机点击打印后无反应
    GUID转换成16位字符串或19位数据(确保唯一)
    RESTful
  • 原文地址:https://www.cnblogs.com/lsx1993/p/4648633.html
Copyright © 2011-2022 走看看