静态(static)和非静态(non-static)

本文详细比较了编程中的静态和非静态概念,涉及变量存储、生命周期、调用方式。静态成员属于类级别,如静态变量和方法,而非静态成员则关联于实例。静态变量持久存在,非静态变量随对象实例化而存在。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态(static)和非静态(non-static)是计算机编程中的两个重要概念,它们主要涉及变量的存储方式和生命周期,以及方法的调用方式。

静态成员(包括变量和方法)属于类级别,而非静态成员属于实例级别。在调用方式、生命周期和存储方式上,两者存在显著差异。

  1. 静态变量:

    • 静态变量是在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间。也就是说,只要程序在运行,那么这块内存就会一直存在。
    • 静态变量可以通过类名直接访问,不需要创建对象。
    • 静态变量在内存空间中只有一份,也永远只有一份。而非静态变量只要new出一个对象引用就会在内存中分配一份空间给它。
    • 静态变量可以被所有实例共享,其修改值对其它实例可见。
  2. 非静态变量:

    • 非静态变量(也称为实例变量)是在对象的实例中独立存储的。非静态变量只在对象被实例化时分配内存,并且每个实例都有自己的非静态变量副本。
    • 非静态变量必须通过创建对象后才能访问。
    • 非静态变量的生命周期与对象的生命周期相同,当对象被销毁时,非静态变量也会被释放。
  3. 静态方法:

    • 静态方法是以static关键字修饰的方法。
    • 静态方法属于类级别,而不是实例级别,因此可以直接通过类名调用,无需创建对象。
    • 静态方法不能直接访问非静态变量,因为非静态变量需要对象实例才能存在。
  4. 非静态方法:

    • 非静态方法(也称为实例化方法)属于实例对象,实例化之后才会分配内存,必须通过类的实例来引用。当实例对象被JVM回收之后,也跟着消失。
    • 非静态方法在类定义时没有占用内存,只有在类被实例化成对象时,对象调用该方法才被分配内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值