对象的建立过程(对象的初始化过程)
Person p = newPerson();
在执行到new时,
第一步,会通过Java虚拟机把Person.class从内存加载到内存。
第二步,执行类静态代码块。(Static{ })
第三步,开辟 对象堆内存空间,分配内存地址。(就是new,要知道new就是开辟对象内存空间)
第四步,将对象属性放到对象内存空间,默初始化。
第五步,对象属性显示初始化(privateint a =10;)
第六步,构造代码块初始化。({ } )
第七步,构造函数初始化。(它有针对性,属于被调用)
第八步,将内存地址给栈内存的P变量。
对象的调用过程(重点)
这理解调用对象之前,要理解一些概念:
首先 要知道堆 主要存放 对象(实例)
其次 要理解一个概念方法区
方法区要 1.存放 所有的类和对象的方法代码(静,非静)。方法参数等。
2.静态变量
最后 要知道栈区的执行过程
1.基本上一个线程,对应一个栈。栈区中只放变量。
2.在程序执行时,会在栈区先建立一个main栈,分配main中的变量。
3.当执行另一个方法时,就会在栈区在开辟一个FUNCTION栈,并分配方法中的变量。
备注 每个方法中,都有一个变量,叫this。谁调用该方法,this就指向谁。
现在执行
Person p = new Person();1
p.setName(“lee”); 2
执行1的时候首先创建对象,在创建对象时,对于方法的创建做如下分析:
第一步在类被加载时,静态变量,静态方法代码被加载到方法区。
第二步在对象被创建时,普通方法代码被加载到方法区。
执行2
第一步 为方法setName创建栈。
第二步将方法使用变量存放到方法栈空间。
第三步通过参数为方法变量赋值。
第四步到方法区中找到方法,并执行。
第五步 执行内容为为对象属性name赋值Lee
第六步方法执行完,结束栈,会main栈。
总结
栈中 专门存储变量。栈区相当以一个大栈,每个方法是一个小栈。
方法区 专门存储方法,静态变量。
堆区 专门存储对象
附图: