首页 理论教育 Java程序设计:引用数据类型

Java程序设计:引用数据类型

时间:2023-11-01 理论教育 版权反馈
【摘要】:当引用数据类型声明的变量作为成员变量使用时,默认值为“null”,表示没有指向任何对象;而作为局部变量使用时,是没有默认值的,使用之前需要进行初始化赋值,否则编译时会报错。注意:Java中8种基本数据类型不存在“引用”的概念,基本数据类型的值都直接存储在JVM的栈内存中。引用数据类型变量的值在栈内存中,而所引用的对象本身存储在堆内存中。

Java程序设计:引用数据类型

一个引用数据类型的变量,存储的是一个内存地址值,该内存地址值指向该变量所引用的对象。当引用数据类型声明的变量作为成员变量使用时,默认值为“null”,表示没有指向任何对象;而作为局部变量使用时,是没有默认值的,使用之前需要进行初始化赋值,否则编译时会报错。

注意:

Java中8种基本数据类型不存在“引用”的概念,基本数据类型的值都直接存储在JVM的栈内存中。引用数据类型变量的值在栈内存中,而所引用的对象本身存储在堆内存中。

【例2-4】

假设main()方法中有一条语句“Person p=new Person();”,请说明JVM内存分配过程。

分析:这里要用到类和对象的相关知识,该条语句通过Person类的构造方法来创建一个Person对象,并将该Person对象的地址赋值给Person类型的引用变量p。

当JVM调用main()方法时,JVM会在栈内存为该方法分配一个栈帧,用于存储该方法用到的局部变量。当JVM执行到语句“Person p=new Person();”时,首先,在main()方法栈帧中创建一个Person类型的变量p。然后,执行Person类的构造方法new Person(),在堆内存中新建一个Person类的实例对象,对象构造完成后,JVM将该Person对象在堆内存中的首地址赋值给栈中的引用变量p,于是变量p便拥有了对该Person对象的引用关系。如图2-10所示。(www.xing528.com)

图2-10 引用变量和对象在内存中的分配

在程序后续执行中,可以通过栈中的引用变量p找到所引用的堆中的对象。

注意:

当main()方法返回时,分配的栈帧将会被弹出,该栈帧的所有局部变量将会释放。而堆内存中的对象不会被释放,当对象没有被变量引用时,会通过JVM垃圾回收机制回收。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈