代码
public class Application {
public static void main(String[] args) {
Cat myFirstPet = new Cat();
myFirstPet.name="小黑";
myFirstPet.actCute();
}
}
public class Cat {
public String name;
public int age;
public void actCute(){
System.out.println(this.name+"向你卖萌。");
}
}
首先,程序运行的时候,它先加载Application这个类,我觉得应该是main方法在这个类中,所以先加载这个类。
其次,main()被装入栈中。
然后main()方法开始执行,执行到第一句,需要new一个Cat,所以会加载Cat这个类,类的加载都是在方法区。
new完之后,会产生一个对象,为myFirstPet,这是一个变量其实(引用变量嘛),变量都是存在栈当中。
但实际上,栈的变量名存放的实际上是堆的地址,变量名myFirstPet指向堆,也就是说myFirstPet的实体是存放在堆当中的。
然后到给name赋值为“小黑”,这一步其实是吧常量池里面的“小黑”,丢给堆中的name。
静态方法区里面主要放的是static修饰的东西,是跟类 一起同时加载的。