定义static的方法或变量占用内存

本文解释了在Java中,static方法和变量如何在类装载时分配内存,并且指出所有对象都引用同一块内存区域。
在JAVA中,类是不分配存储空间的,但在定义static的方法和属性时,static的方法或变量其实是在类装载的时候分配内存空间,而且只存在一处。所有对象都是对这一块内存区域的引用。 详细内容以后看书后补充。
使用static定义局部变量和不使用static定义局部变量有以下区别: - **生命周期**:不使用static定义的普通局部变量,只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用内存也被收回;而使用static定义的局部变量只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。例如在Arduino代码中,未使用static的局部变量`int a=10`在函数`staticShow()`每次调用结束后就会被销毁,而使用`static int a=10`定义的局部变量在程序运行期间都不会释放[^1][^4]。 - **存储位置**:普通局部变量在栈里分配空间,而静态局部变量在静态存储区分配空间。static实际修改了局部变量的存储类型,将原本应该存储在栈区的局部变量存储在静态区,静态区上数据存储的特点是程序结束变量才被释放,常见的全局变量就是存储在静态区上[^1][^2]。 - **初始化情况**:局部静态变量只在声明时进行初始化,而且只能初始化一次,如果没有初始化,其自动初始化为0空字符;普通局部变量在每次进入其作用域时都会进行初始化[^4]。 - **记忆性**:使用static定义的局部变量具有“记忆性”,在两次函数调用时,第二次调用开始时,变量能够保持上一次调用结束时的值;普通局部变量不具备这种特性,每次函数调用都是重新开始[^4]。 - **作用域**:两者都只有局部作用域,但使用static定义的局部变量出作用域不被销毁,而普通局部变量出作用域就会被销毁[^1][^2]。 示例代码如下,展示了有无`static`修饰的区别: ```cpp // 不使用static的情况 void setup() { Serial.begin(115200); } void staticShowWithoutStatic() { int a = 10; Serial.println(String("a的值(无static):") + a); a += 10; } void loop() { staticShowWithoutStatic(); delay(3000); } // 使用static的情况 void setup() { Serial.begin(115200); } void staticShowWithStatic() { static int a = 10; Serial.println(String("a的值(有static):") + a); a += 10; } void loop() { staticShowWithStatic(); delay(3000); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值