带你深入理解 Java成员变量,局部变量和静态变量的创建和回收时机

这篇具有很好参考价值的文章主要介绍了带你深入理解 Java成员变量,局部变量和静态变量的创建和回收时机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java中的成员变量、局部变量和静态变量具有不同的创建和回收时机。下面我将详细介绍它们的特点和生命周期。

  1. 成员变量(实例变量):
    成员变量是定义在类中的变量,每个类的实例都会拥有自己的成员变量。它们的生命周期与对象的创建和销毁相对应。
  • 创建时机:成员变量在对象创建时被初始化,并且每个对象都拥有独立的一份副本。
  • 回收时机:当对象不再被引用时,垃圾回收器会回收该对象所占用的内存空间,同时也会回收对象的成员变量。

例如,考虑以下代码:

public class MyClass {
    private int count; // 成员变量

    public void increment() {
        count++;
    }
}

在上述代码中,count 是一个成员变量,它属于 MyClass 类的实例。每次创建一个 MyClass 对象时,都会为该对象分配一块内存来存储 count 的值。当对象不再被引用时,该对象及其成员变量都会被垃圾回收器回收。

  1. 局部变量:
    局部变量是在方法、代码块或构造函数内部定义的变量。它们的生命周期受限于所在的作用域。
  • 创建时机:局部变量在其所属的作用域内被声明时被创建。
  • 回收时机:一旦离开了该变量所在的作用域,该变量就会被销毁并释放所占用的内存空间。

例如,考虑以下代码:

public void myMethod() {
    int num = 10; // 局部变量

    // 其他代码...
}

在上述代码中,num 是一个局部变量,它只在 myMethod 方法的作用域内有效。当方法执行完毕后,num 将被销毁,其占用的内存空间会被释放。

  1. 静态变量(类变量):
    静态变量是与类关联而不是与对象关联的变量。它们在类加载时被初始化,并且所有的对象共享同一份静态变量的副本。
  • 创建时机:静态变量在类加载时被初始化,只会被初始化一次。
  • 回收时机:当程序结束运行或类被卸载时,静态变量才会被销毁。

例如,考虑以下代码:

public class MyClass {
    public static int count; // 静态变量

    // 其他代码...
}

在上述代码中,count 是一个静态变量,它属于 MyClass 类而不

是类的实例。所有的 MyClass 对象都共享同一份 count 的副本。当程序结束运行或者 MyClass 类被卸载时,count 才会被销毁。

总结:

  • 成员变量的生命周期与对象的创建和销毁相对应,每个对象都有独立的一份成员变量副本。
  • 局部变量的生命周期受限于其所在的作用域,一旦离开作用域就会被销毁。
  • 静态变量的生命周期与类的加载和卸载相对应,所有对象共享同一份静态变量副本。

请注意,这里只是简单介绍了成员变量、局部变量和静态变量的创建和回收时机,实际上还涉及到更复杂的垃圾回收机制和内存管理。具体的情况会受到JVM的实现和运行环境的影响。在编写代码时,要根据需求选择合适的变量类型,并合理管理对象的生命周期和内存使用。文章来源地址https://www.toymoban.com/news/detail-465098.html

到了这里,关于带你深入理解 Java成员变量,局部变量和静态变量的创建和回收时机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面向对象【成员变量与局部变量、方法声明与作用】

    Java中的成员变量是指 类中声明的变量 ,也称为实例变量或属性。它们与方法一样属于类的成员,不同之处在于,它们存储在对象(堆)中而不是栈中,并且每个对象都有自己的一组值。 成员变量可以用来描述一个对象的状态,例如人的年龄、学生的姓名等。它们可以具有pub

    2024年02月10日
    浏览(61)
  • 全局变量、局部变量和静态变量

    定义:在函数外定义的变量是全局变量,全局变量可以为本文件中其它函数所共用,它的有效范围从定义变量的位置开始到本源文件结束。 设全局变量的作用:增加了函数间数据联系的渠道; 不必要时不要使用全局变量,因为:a) 全局变量在程序的全部执行过程中都占用存

    2024年02月06日
    浏览(36)
  • 带你深入理解Java异常

    💕“人生就像一盘棋,有时候你慢一步,就输掉了一局。但只要你不停止思考和行动,就永远有机会翻盘。”💕 🐼作者:不能再留遗憾了🐼 🎆专栏:Java学习🎆 🏀本文章主要内容:详细讲解Java异常🏀 Java是一种面向对象编程语言,提供了一种强大的异常处理机制。Jav

    2024年02月04日
    浏览(29)
  • 堆,栈,程序区,静态变量,局部变量,函数,参数宏

           堆和栈是堆和栈是在程序运行中用于 存储数据和指令 的两种不同的内存空间。 堆:堆内存是 用于分配程序中动态数据结构的内存空间 ,它的生命周期不由 程序的函数调用栈管理 ,通常会被 程序员 直接管理。        堆空间为程序 提供了极为灵活的空间分配和管

    2024年01月24日
    浏览(28)
  • 变量的存储类型(全局,局部,静态,动态)

    存储类型 是指变在内存中的存储方式,有静态存储和动态存储方式。 1.静态存储方式 静态存储方式的变量存储在内存的静态区,在程序编译时就已经分配好了内存空间。在整个程序运行时,该变量一直占有固有的内存空间,程序结束后才释放该部分内存空间。其中静态局部

    2024年02月03日
    浏览(43)
  • c++中static静态成员变量和静态成员函数、explcit和隐式类型转换、友元函数()详解

    声明为 static 的类成员 称为 类的静态成员 ,用 static 修饰的 成员变量 ,称之为 静态成员变量 ;用 static 修饰 的 成员函数 ,称之为 静态成员函数 。 静态成员变量一定要在类外进行初始化   静态成员 为 所有类对象所共享 ,不属于某个具体的对象,存放在静态区   静态成

    2024年02月04日
    浏览(50)
  • c++静态变量成员函数和全局函数的区别

    静态成员函数和全局函数在某些方面是相似的,但它们有一些关键的区别。 静态成员函数是与类相关联的函数,但它们不依赖于特定的类实例 。这意味着它们可以 在没有类实例的情况下被调用 ,并且没有隐含的this指针。静态成员函数可以通过类名直接调用,例如: 静态成

    2024年02月08日
    浏览(61)
  • 7种创建方式,带你理解Java的单例模式

    本文分享自华为云社区《《Java极简设计模式》第01章:单例模式(Singleton)》,作者:冰 河。 看几个单例对象的示例代码,其中有些代码是线程安全的,有些则不是线程安全的,需要大家细细品味,这些代码也是在高并发环境下测试验证过的。 代码一:SingletonExample1 这个类

    2024年02月12日
    浏览(43)
  • Labview局部变量、全局变量、引用、属性节点、调用节点用法理解及精讲

    写本章前想起题主初学Labview时面对一个位移台程序,傻傻搞不清局部变量和属性节点值有什么区别,概念很模糊。所以更新这篇文章让大家更具象和深刻的去理解这几个概念,看完记得点赞加关注喔~ 本文程序源代码附在后面,大家可以自行下载学习。 本文的结构还是首先教

    2024年01月20日
    浏览(40)
  • 深入理解c++特殊成员函数

    在c++中,特殊成员函数有下面6个: 构造函数 析构函数 复制构造函数(拷贝构造函数) 赋值运算符(拷贝运算符) 移动构造函数(c++11引入) 移动运算符(c++11引入) 以Widget类为例,其特殊成员函数的签名如下所示: 每个方法都有哪些作用,又都有哪些注意点? 本文将针对这些方法,

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包