1:虚拟机加载OOPDemo类(省略详细加载过程(装载、链接、初始化)),提取类型信息(具体保存哪些类型信息查看博文:Java虚拟机体系结构),存储到方法区中,对应图中的绿色矩形区域。
2:通过保存在方法区的字节码,虚拟机开始执行main方法,main方法入栈。图中箭头1方法压栈。
3:进入main方法的第一条指令,new Person(23, "Syskey"); ok,虚拟机看到new指令,就知道要分配堆空间了,给谁分配呢?给Person类的实例对象啊。方法区没找到Person类,就接着装载Person类,并把类型信息存储到到方法区。
ok,现在通过存储在方法区中Person类的类型信息确定了实例对象需要分配的空间大小,就在堆中分配空间,并把实例对象的变量初始化为默认值。比如int初始化为0,引用变量初始为null。此时,对象创建完成。new操作的第一步执行完毕。new操作的第二步开始执行,调用构造方法,完成对象的初始化工作。然后把对象在堆空间的地址赋值给引用类型变量p1。整条Person p1 = new Person(23, "Syskey");指令执行完成。图中箭头2分配空间跟箭头3引用压栈。(此处省略第二条创建对象语句)。
4:调用say()方法,通过p1持有的引用,找到堆中的实例对象,通过实例对象持有的本类在方法区的引用,找到本类的类型信息,然后定位到say方法,say方法入栈,开始执行方法中的字节码。图中箭头4调用方法。
5:say方法执行完毕,say方法从栈中弹出,程序回到main方法。先进后就是这样子了(FILO)。main方法执行完毕。主线程消亡。虚拟机实例对象消亡。程序结束。
至此,介绍完了Java程序在JVM中的整个执行流程,还有一些细节没有画进去,比如详细的加载过程跟常量池解析符号引用,怕太乱了影响阅读与理解。有兴趣的童鞋继续研究。
相关推荐
总结来说,"面向对象-构造函数-调用&内存图解"涵盖了构造函数在对象创建过程中的角色,以及构造函数调用如何影响内存分配和对象实例化。理解这些概念对于编写高效、健壮的面向对象代码至关重要,特别是在处理大量...
Java成员初始化顺序对于理解和正确使用继承至关重要。当创建一个子类对象时,其内存加载顺序遵循以下规则: 1. **静态初始化块**:首先执行的是类中的静态初始化块,无论类被实例化多少次,静态初始化块只执行一次...
8. 方法:掌握方法的定义及格式,并能正确的调用方法,理解方法的调用过程,同时清楚方法的注意事项。 9. 数组:了解数组的概念,掌握数组的定义格式、静态初始化、动态初始化,并能够理解 Java 中数组的内存图解。 ...
ArrayTest.java和Array2Test.java可能是两个示例程序,演示了如何声明、初始化和操作数组。数组的使用包括创建数组、赋值、遍历以及数组方法如length属性获取数组长度。此外,Java提供了多种数组操作,如System....
在 Java 编程语言中,构造器是一种特殊的方法,用于初始化对象的创建。它是 Java 类中最重要的一个概念。下面将深入讨论构造器的机理、执行顺序、作用及与其他概念的区别。 一、构造器的机理 构造器是一种特殊的...
5. **数组**:学习一维和多维数组的声明、初始化和操作,以及遍历数组的方法。 6. **字符串处理**:了解String类的特点(不可变性),常用的方法如substring,concat,indexOf,trim等。 7. **异常处理**:理解...
4. **数组**:讲解一维和多维数组的创建、初始化及操作,以及数组的应用场景。 5. **函数**:讨论函数的定义、参数传递和返回值,以及如何调用标准库中的函数。 6. **对象和类**:这是面向对象编程的核心。会讲解...
理解一维、二维及多维数组的声明、初始化和操作至关重要。 4. **字符串处理**: String类在Java中广泛使用,了解其不可变性、常用方法(如concat、substring、indexOf等)以及StringBuilder或StringBuffer类用于字符...
- 当`new Dog()`执行时,会在堆中创建Dog对象,并初始化其属性。 - Animal类型的引用animal被分配到栈中的局部变量表,它只保存Dog对象的引用,而不是对象的所有数据。 - 当调用`animal.sound()`时,JVM会根据animal...
2. **初始化MapXtreme**:在Servlet的初始化方法中,我们需要实例化MapXtreme对象并进行必要的配置,比如设置数据源、地图样式等。 3. **处理请求**:当客户端发送请求时,Servlet会解析请求参数,这些参数可能包含...
* 对象:了解对象的概念,掌握对象的定义格式、静态初始化、动态初始化,并能够理解Java中对象的内存图解。 * 类和对象:掌握类和对象的概念,以及类和对象的关系。 * 继承:掌握继承的概念,以及继承的使用场景。 *...
此外,成员变量可以有默认初始化值,而局部变量在声明之前必须先初始化。 接下来,我们学习“面向对象的类类型参数”。类类型参数,也称为泛型,允许我们在编写代码时引入一种类型参数,以提高代码的灵活性和重用性...
- **XSL 文件中的初始化**:从给定内容来看,XSL 文件中包含了一些初始化的信息,比如 `taskwindowmanager` 和 `esriwindowmanager` 的初始化,这些初始化对于启动任务缓冲区分析至关重要。 #### 知识点三:关键类...
在本文中,我们将深入探讨Mapxtreme for Java的入门示例,通过简单的图解来帮助初学者理解其核心概念和使用方法。 1. **Mapxtreme简介** Mapxtreme是Extremesoft公司开发的一款产品,它提供了丰富的API和控件,...
这通常在Servlet的初始化方法中完成,然后将地图对象传递到JSP页面进行渲染。在JSP页面中,你可以使用JSP表达式或脚本来访问Servlet传递的Map对象,并调用其方法来展示地图。 MapXtreme还支持动态加载地图数据。...
然后,我们从session中获取MapJ对象(Mapxtreme的Java表示),如果没有找到,则初始化一个新的MapJ实例并存入session。 关键的逻辑在于检查请求参数`type`。如果`type=1`,则调用`chgmapview()`方法改变地图视图;...
- 创建并初始化服务代理对象 4. 编写客户端代码调用Web Services 在客户端,你需要编写代码来创建服务代理对象,调用服务端的方法,并处理返回的数据。这通常包括以下步骤: 4.1.1 客户端代码介绍: - 导入必要...
- 构造器:用于初始化新创建的对象,通常与类名相同且无返回类型。 - 访问修饰符:public, private, protected 和默认修饰符的区别,以及它们对类成员的可见性控制。 - this关键字:引用当前对象的引用,常用于...
2. **数据类型与变量**:讲解Java中的基本数据类型(如整型、浮点型、字符型和布尔型)和引用数据类型,以及变量的声明、初始化和使用。 3. **运算符与控制结构**:包括算术、比较、逻辑和位运算符的使用,以及条件...