静态变量和普通变量

一、普通变量:每个对象都有属于自己的值

          

结果展示:

          

二、静态变量:属于类级别,每一个对象是由的都是同一个变量(唯一)

           

结果展示:

           

 

三、调用静态方法和一般成员方法的区别

1、调用静态方法:

类名.静态成员方法名();

2、调用普通的成员方法:

1)先声明一个对象

2)对象名.一般成员方法名();

四、静态代码块1

                                  

结果展示:

疑问?

(1)为什么第21行的调用a2函数的时候既不用类也不用对象名调用呢?

答:第一、a2函数是个静态函数,所以在调用的时候可以直接用类名调用,不嫌麻烦的话也可以用对象名调用

       第二、不使用类名调用是因为mian函数和a2函数都是同一个类中,而且这两个方法都是静态的,所以直接用方法名就可以

 

五、静态代码块2

结果展示:

根据上面两个代码执行的情况,有同学可能觉得为什么第一次输出的结果一直是1呢?

后面的2和3的顺序为什么不一样就不再解释了,只解释1的原因,因为写在静态代码块中的有最高的执行优先级(4--7行是静态代码块),那么到这里有同学可能还会问那这个静态代码块是什么时候执行的呢?它是在类加载的时候就被执行了

<think>好的,我现在需要帮助用户理解静态变量普通变量之间的区别。首先,我需要回顾一下已有的引用资料,看看有哪些关键点可以提取出来。 根据引用[3],全局变量静态变量都存储在静态存储区,生命周期与程序相同,但作用域不同。普通局部变量则存储在栈区,生命周期仅限于函数执行期间。这一点很重要,可以强调存储位置生命周期的差异。 引用[1]提到静态变量在C语言中保持其值不变,即使函数执行结束。这说明静态局部变量具有持久性,而普通局部变量在函数调用结束后会被销毁。这也是一个关键区别点。 引用[4]指出实例变量属于对象,而静态变量属于类。这可能更多是面向对象编程中的概念,但用户的问题可能更偏向于过程式语言如C,所以需要区分静态变量在不同上下文中的表现。 用户的问题涉及静态变量普通变量的区别,需要从作用域、生命周期、存储位置、初始化等方面进行对比。可能需要分点说明,结构清晰。 还需要注意用户提供的引用中有提到静态变量的默认值为0,而普通局部变量如果不初始化则值不确定。这也是一个重要区别,需要包含在内。 另外,是否需要举例说明?比如静态局部变量在函数多次调用中保持值,而普通变量每次重新初始化。代码示例可能有助于理解。 需要确保使用正确的中文表达,避免技术术语错误。同时,根据用户的示例,可能需要生成相关问题,如存储位置的区别、初始化的不同、应用场景等。 现在需要组织这些信息,按照用户要求的格式,使用列表或分点,结构清晰。确保使用正确的LaTeX格式,比如行内公式用$...$,独立公式用$$...$$,但这里可能不需要数学公式,主要是文字描述。 最后,生成相关问题,可能涉及静态变量的应用场景、不同编程语言中的表现、内存管理影响等。</think>### 静态变量 vs 普通变量 区别详解 #### 1. **作用域差异** - **静态变量** - 静态局部变量:作用域仅限定义它的函数或代码块内部,但生命周期持续到程序结束[^3]。 - 静态全局变量:作用域限定在当前文件内,其他文件无法访问[^3]。 - **普通变量** - 局部变量:作用域仅在函数或代码块内部,函数结束后变量被销毁。 - 全局变量:作用域为整个程序的所有文件,但可能引发命名冲突。 #### 2. **生命周期与存储位置** - **静态变量** - 存储在**静态存储区**,生命周期与程序一致[^5]。 - 静态局部变量:即使函数退出,值仍保留,下次调用时继续使用。 - 示例: ```c void counter() { static int count = 0; // 静态局部变量 count++; printf("%d", count); } // 多次调用counter()会输出递增的值 ``` - **普通变量** - 局部变量:存储在**栈区**,函数结束时释放。 - 全局变量:存储在**静态存储区**,但作用域不同。 #### 3. **初始化特性** - **静态变量** - 未显式初始化时,默认值为`0`(整型)或`NULL`(指针)[^3]。 - 初始化仅执行一次(如`static int x = 5;`)。 - **普通变量** - 局部变量:未初始化时值为随机(取决于栈区状态)。 - 全局变量:默认值也为`0`,但作用域更广。 #### 4. **编程应用场景** - **静态变量** - 需要跨函数调用保留状态(如计数器、单例模式)[^1]。 - 限制全局变量的可见性(静态全局变量)[^3]。 - **普通变量** - 临时数据存储(如循环变量、函数参数)。 - 全局共享数据(需谨慎使用以避免副作用)。 #### 5. **内存管理影响** - **静态变量** - 占用固定内存空间,可能增加程序体积。 - **普通局部变量** - 动态分配栈内存,随函数调用自动回收。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值