籍慧文

山西农业大学信息学院

JAVA虚拟机中面向对象性实现原理

籍慧文

山西农业大学信息学院

通过对JAVA虚拟机原理的剖析阐述面向对象原理中的关键特性如封装、继承、多态在JAVA虚拟机中的实现方式。

JAVA虚拟机;面向对象;类;对象;封装;继承;多态

引言

在过去的二十几年间JAVA编程语言在众多面向对象程序设计语言中脱颖而出其跨平台特性功不可没。而跨平台特性的基础则是字节码技术和JAVA虚拟机技术,其中JAVA虚拟机解除了JAVA程序与底层硬件、操作系统间的耦合关系,为JAVA编程语言的“一次编译到处运行”提供了运行的环境基础。本文将着重阐述面向对象原理中的类、对象、封装、继承、多态等概念、特性在JAVA虚拟机内部的实现方式及原理。

1、面向对象原理

面向对象原理以对象为基础将属性和操作封装在一起并抽象出统一的新数据类型——类。面向对象相对面向过程从更接近人类思维方式的角度通过模拟客观世界间实物相互作用的方式,以其封装性、继承性、多态性三大特性达到简化问题,提高代码重用性,降低维护成本的目标。

2、JAVA虚拟机

JAVA虚拟机是一个规范来定义的抽象的计算环境,每个Java程序都运行于某个具体的JAVA虚拟机实现的实例[2]。Java虚拟机有多种方式,既可以是运行在操作系统上的软件也可以是软硬件的组合。

JAVA虚拟机内包含两种运行机制,一是类装载子系统它负责将类加载到虚拟机当中,另一个是运行引擎它负责执行已装载的类中的指令。

JAVA虚拟机通常由五个组成部分组成,它们是方法区、堆、JAVA栈、程序计数器、本地方法栈。

3、类在JAVA虚拟机中的实现

3.1 类的结构

类是对一组对象公有的属性和行为的抽象。为了能够更清晰地处理问题抽象通常被分为多个层次。子类可以从父类处继承父类的属性和方法,属性和方法可以分为静态域、静态方法和对象域、对象方法。静态域和静态方法展现了一种全局性,它是所有对象共享的资源。JAVA程序编译完成后会生成class文件,这些class文件在被虚拟机处理时首先需要经过类加载机制。

3.2 类的生命周期

类的生命周期从类加载开始一直持续到类从虚拟机中被卸载为止。当类被加载后还需要经过链接、初始化等若干步骤。类的初始化由JAVA虚拟机完成,初始化结束以后程序就可以对该类进行实例化获得对象,而当程序不再需要引用该类时,虚拟机就可以卸载这个类。这里需要注意一点,只有使用用户定义的类装载器装载的类才可以被卸载。

3.3 继承性的实现

在JAVA编程语言中为了强化类的单一职责取消了C++等语言中使用的多继承机制。在面向对象的语言中一个类一旦继承了其他类,就拥有了后者的属性和方法,在JAVA中编译生成的class文件中会保存一个父类标识来记录继承信息。JAVA虚拟机在加载类时会检查被加载类是否有父类,如果存在父类则将父类一并加载,并对父类递归执行这一加载机制直至Object类也被加载为止。

3.4 多态性的实现

多态性允许将子类类型的引用向上映射赋值给父类类型的引用。多态表现在子类方法实现对父类方法实现的覆盖效果,在需要使用覆盖时只需要在子类中定义与父类中方法具有相同方法名、返回值类型、参数列表的方法即可。被覆盖的方法将会在子类中拥有不同于父类方法的实现,当子类对象被调用时JAVA虚拟机则会依据链接模型调用子类中的新实现。在JAVA虚拟机的链接模型中,定位一个属性或者方法的顺序是先在本类的属性和方法中查找,如果查找成功则从本类获得需要的属性或方法,否则向父类递归延伸查找。在这一机制的作用下JAVA虚拟机便具备了支持多态性的能力。

4、对象的实现

4.1 对象的结构

对象是类的一次实例化的成果物,它是面向对象系统的基本组成单元。除了基本类型外在JAVA编程语言中其他的成员都是对象,数组也是一种对象。在JAVA编程语言中对象是动态创建的,创建过程可分为以下三步,首先JAVA虚拟机使用new指令来为新对象分配内存空间,JAVA虚拟机会在对象堆中分配内存空间会被用来封装对象的属性,之后JAVA虚拟机按初始值对属性进行初始化,最后待对象被创建后完毕时JAVA虚拟机会返回一个指向该对象的引用,使用这一引用便可以操纵对象的属性和方法。

4.2 对象间互操作

在JAVA虚拟中调用包括三个要素:方法名、参数列表、返回类型。JAVA虚拟机中的帧被用于处理调用关系。帧由操作数栈、局部变量数组、管理数据三个部分组成,JAVA方法的每一次调用都创建一个新的帧,新创建的帧被压入帧栈中,当方法执行完毕后帧栈弹出当前帧并且将返回值传给前一个帧的操作数栈中,如此就完成了方法的调用。

4.3 对象的生命周期

对象的生命周期从创建开始经过使用最终被回收。JAVA语言的一大特色就是自动回收机制,回收通常分为找出待回收对象和释放内存空间两个阶段。回收监测通常会建立一个根对象集合,并且以此为出发点检查对象是否被这些根对象引用如果根对象不再引用这些对象这些对象即可被回收。回收机制通常可以分为内存不足时会收和立即回收两种。

5、总结

本文通过对JAVA虚拟机中面向对象性实现原理的剖析全面地展示了面向对象三大特性在虚拟机内部的运行机制,对于虚拟机内部实现原理的了解一方面可以使我们对面向对象原理有更深入的认识,另外也的使得我们可以更好地使用JAVA编程语言进行编程和学习。

[1]The JavaTMVirtual Machine Specification.Sun Microsystems

[2]张广敏,盘细平,涂杰.Java虚拟机的面向对象性.计算机应用与软件,2006(03)

[3]笪斌,苏建元.Java实现面向对象的继承性、封装性和多态性.智能计算机与应用,2005(6):18-19

[4]张凯.Java虚拟机中类装载器的实现.王立冬,计算机应用,2002,22(11):107-109

[5]李永远.JAVA虚拟机相关技术研究与实践.信息通信,2015(5)

籍慧文(1994-),男,山西太谷人,山西农业大学信息学院,学生。