描述Dog对象:
package android.java.oop10;
public class Dog {
public static String name;
public static int age;
public static void showNameAge() {
System.out.println("name:" + name + " age:" + age);
}
}
main测试方法:
package android.java.oop10;
public class Demo01 {
public static void main(String[] args) {
Dog.name = "阿白";
Dog.age = 98;
Dog.name = "李双";
Dog.age = 90;
Dog.showNameAge();
}
}
执行结果:
以上案例对应内存图:
1. 执行 java Demo01 是给JVM发送指令,和JVM说:把这个 Demo01.class 去执行;
2.JVM就去执行 Demo01.class 文件里面的字节码,首先第一步 是把 Demo01.class字节码加载进内存;
3.第二步把Demo01.class放入字节码存放区;
4.第三步把Demo01里面的静态数据(静态变量 与 静态方法)分配到 静态区;
5.第四步main方法进栈,如何进栈的,是把静态区里面的main方法拿到运行区(栈) 然后就进栈了;
6.第五步main方法执行 Demo. 的时候,就在此时 才把Dog.class加载进内存;
7.第六步把Dog.class放入字节码存放区;
8.第七步把Dog里面的静态数据(静态变量 与 静态方法)分配到 静态区;
9第八步 在main方法中执行 Dog.name 是向静态区去找到 Dog.name 拿来使用,由于是共享的 name 只保持最后修改的数据;