Object o = new Object();
对象创建的时候存在一个半初始化状态;
public class T {
int m=8;
public static void main(String[] args) {
T t=new T();
//Object o = new Object();
}
}
// access flags 0x9
public static main([Ljava/lang/String;)V
// parameter args
L0
LINENUMBER 12 L0
NEW practice/practice/jvm/T
DUP
INVOKESPECIAL practice/practice/jvm/T.<init> ()V
ASTORE 1
L1
LINENUMBER 14 L1
RETURN
主要是5条指令:new, dup, invokespecial, astore_1, return指令;
至少需要3步;
new 申请一块内存空间用来装我new出来的这个对象;new出来的这个对象t 里面一定是有一个成员变量m的,刚刚new出来,m的值是它的默认值,此时是0;也称作半初始化状态
invokespecial 调用完此对象的默认构造方法,T.<init>,这个方法执行完,这个m的值才会变为8
astore_1 建立关联,局部变量 t 与此对象建立关联,通过t就可以访问了。