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.执行子类构造函数。

  • 相关阅读:
    在SQLite中使用索引优化查询速度
    SQLite支持的SQL数据操作
    left (outer) join , right (outer) join, full (outer) join, (inner) join, cross join 区别
    深入理解Android内存管理原理(六)
    Merge Sorted Array
    Sort Colors
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Tree Postorder Traversal
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/lsx1993/p/4648633.html
Copyright © 2011-2022 走看看