2021年3月31日星期三

类的执行过程

案例

Person.java

public class Person { public String name; public char sex; public int age;  public void show(){   int age = this.age + 20;  System.out.printf("二十年后 姓名: %s 性别: %c 年龄: %d",name,sex,age); }}

PersonTest.java

public class PersonTest { public static void main(String[] args) {   Person p = new Person();  p.name = "张三";  p.sex = '男';  p.age = 24;  p.show(); }}

执行顺序

  1. 执行java PersonTest命令后,jvm将PersonTest.classPerson.class``System.class三个文件加载到方法区。
  2. jvm在加载的文件中找到main方法并将方法压栈到栈区。
  3. 接着main方法中声明了Person类型的引用p。使用new关键字实例化Person对象存储在堆区,并将对象内存地址存储在p的内存中。
  4. 由于java中没有指针这个概念,堆区中的内容必须通过引用去访问。
  5. 接下来使用p的引用去访问堆区中对应对象的成员变量并改变它们的值。
  6. 通过对象引用p调用了成员方法show,此时show方法的内部变量被压栈,开辟int类型大小的内存空间存储由cpu计算的成员变量age和字面量20的和。
  7. show方法中对于System的调用同理,不再赘述。使用printf方法格式化输出相关变量的值。
  8. 完成show方法后,方法弹栈,销毁变量、清理内存空间。然回到main方法中。
  9. main方法执行完毕,弹栈退出程序。

注意

  • JVM中有方法区、堆区、栈区三个内存空间的划分。
  • 方法区存储引用类型的代码,包括类中的静态变量。
  • 堆区存放new出来的实例对象,也是GC自动垃圾回收机制的主要工作地方。
  • 栈区中存放局部变量和方法的调用。每个方法调用会有一个独立的栈帧,方法退出后会清理掉。
  • 方法区和堆区永远只有一个,栈区是每个线程有一个。

图示









原文转载:http://www.shaoqun.com/a/654759.html

跨境电商:https://www.ikjzd.com/

腾邦:https://www.ikjzd.com/w/1382

cbo:https://www.ikjzd.com/w/2670


案例Person.javapublicclassPerson{publicStringname;publiccharsex;publicintage;publicvoidshow(){intage=this.age+20;System.out.printf("二十年后姓名:%s性别:%c年龄:%d",name,sex,age);}}PersonTest.javapubliccl
barclays:https://www.ikjzd.com/w/2775
easybuy:https://www.ikjzd.com/w/2162
三维度:https://www.ikjzd.com/w/1312
气愤 花心老公在外称自己是单身:http://www.30bags.com/m/a/252909.html
7000+账号被删!亚马逊这类产品危险了!脱毛仪类目变狗的解决方法来了!:https://www.ikjzd.com/home/129238
办公室上司魅力不浅 口述我和男上司的第一次出差之旅:http://lady.shaoqun.com/m/a/269733.html