代码如下:
class ThisClass{
String name;
Integer age;
public void printThis(){
System.out.println("ThisClass本次调用对象的地址为:\t\t\t"+this);
}
}
class Test{
public static void main(String[] args){
ThisClass thisClass = new ThisClass();
thisClass.printThis();
System.out.println("ThisClass在main方法创建的对象的地址为:\t\t"+thisClass);
}
}
程序的加载流程如下:
1、执行Test类时,先装载Test到JVM中,并把main方法放入方法区
2、发现有ThisClass类的对象,先把ThisClass加载到JVM虚拟机中,发现拥有printThis方法,将printThis放到方法区中
3、在堆中开辟一块空间创建ThisClass对象,在栈中压入thisClass变量并将其引用地址指向在堆中创建的ThisClass地址,并给其属性初始化
4、将printThis压入栈中,并把thisClass的地址赋值给this,打印this,执行完毕后,将printThis出栈,this消失
5、运行输出语句,并将thisClass对像的地址输出
6、main方法执行完成,将thisClass、this.printThis()、输出程序出栈(注意出栈顺序是先进后出)
7、将main方法出栈
8、因thisClass对象已经没有变量引用,所以会被GC垃圾回收器不定时回收销毁