java成员变量和局部变量的初始化和内存中的运行机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java成员变量和局部变量的初始化和内存中的运行机制相关的知识,希望对你有一定的参考价值。

成员变量:

  当系统加载类或创建类的实例时,系统会自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。

 

技术分享图片

eyeNum是类属性。name是实例属性

所有person实例访问eyeNum都将访问person类的eyeNum属性。访问的是同一块内存。如果通过实例修改类属性,所有实例访问时都会改变。

 

局部变量:

 

局部变量定义后,必须经过显示初始化才能使用。这意味着定义了局部变量后,系统并未为这个变量分配内存空间,直到等到程序为这个变量赋值初始值时,系统才会给局部变量分配内存,并将初始值保存到这块内存中。

  与成员变量不同,局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中。如果局部变量是基本类型变量,则直接把变量值存放在栈中,如果是引用类型,则存放地址在栈中。

栈内存中的变量无须系统垃圾回收,变量是随方法或代码块的运行结束而结束的。因此,局部变量的作用域是从初始化该变量开始,知道该方法或该代码块运行完成而结束。因为局部变量只保存基本类型的值或对象的引用,因此局部变量所占的内存通常较小。

 

当我们定义一个成员变量时,成员变量将被放置到堆内存中,成员变量的作用域将扩大到类存在范围或者对象存在范围。这种范围扩大有两个坏处:

1,增大了变量的生存时间,将导致更大的系统开销

2,扩大了作用域,不利于程序的内聚性。

以上是关于java成员变量和局部变量的初始化和内存中的运行机制的主要内容,如果未能解决你的问题,请参考以下文章

Java Review (八面向对象----成员变量和局部变量)

java 成员变量为什么可以不初始化而局部变量必须初始化

java中成员变量和局部变量在内存中的分配

java中局部变量和成员变量的区别?

Java成员变量和局部变量区别

Java中成员变量和局部变量区别