- class Demo
- {
- private String name;
- Demo(String name)
- {
- this.name=name;
- }
- public String show()
- {
- return name;
- }
- }
- class Test
- {
- public static void main(String[]args)
- {
- Demo d=new Demo("哈哈");
- d.show();
- }
- }
复制代码
对Test编译后,就产生了Test.class文件
java Test
首先操作系统会为虚拟机分配一个运行时数据区,java虚拟机进程就把Test类的类型信息加载到了方法区(也就是存放)
紧接着就是验证,初始化。
完成后,执行main方法中的代码
执行:Demo d=new Demo("哈哈");
由于Demo类不在方法区中,所以先把Demo类加载进方法区,接着就是在堆区,建立了Demo类的对象,这个对象有一个指向Demo类
类型信息的引用,其实就是内存地址值,这个内存地址值存放在堆区的数据区中。
局部变量d被添加到java主线程的方法调用栈中,这个d变量就引用着堆区的实例,它持有Demo实例的引用
执行:d.show()
根据d变量持有的引用,定位到了方法区中Demo类的类型信息,从而得到show()的字节码,接着执行该字节码。
|