1.加载Application启动类。这个类中有一个main()方法。同时类中存在一个常量池,专门存放一些常量,例如现在存在一个常量:旺财。 // age中的3不是常量,是int类型的数字,也在该类中
2.执行main()方法。main()方法会存在于栈里,目前位于最底层。
3.new创建对象,会加载Pet类,生成具体的对象dog。dog(引用变量名)存在于栈中,只是一个变量名。真正的对象存在于堆中,占用一个内存地址,假定为0x0001(这个创建的对象是调用的无参构造的方法创建的,所以它的属性都为默认值)
4.赋值:由Application给堆中的对象赋值
注:类就相当于一个模板,new出来一个对象名在栈中,对象名指向的具体的对象存在于堆中
静态方法static是和类一起被加载的,所有的对象都可以去直接调用
方法区也属于堆。堆一般存放我们具体创建的对象,而栈里都是一些方法和变量的引用
我们同时new创建的都是Pet,但是创建的是不一样的对象,是因为内存地址不同,引用的对象名也不同。