C语言与Java中static关键字的区别

static关键字在C语言中用于修饰局部变量、全局变量和函数,影响它们的存储和生命周期。在局部变量中,static使得变量保持其值并在函数调用间保留。全局变量上,static限制其作用域为当前文件。对于函数,static使其成为文件内可见。在Java中,static主要修饰类变量和方法,初始化在类加载时进行,可通过类名直接访问。

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

C语言

首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存类型

1.局部变量:在任意一个函数内部定义的变量(不加static),初始值不确定,出函数自动销毁,存放于栈区。 使用static修饰这个变量时,编译器会把她初始化为零,存储于静态区,函数返回时值保持不变,出函数不销毁,下一次进入函数依然存在。根本原因——static修饰的局部变量存储在静态区。

2.全局变量普通全局变量定义在函数体外部,在静态区分配存储空间,编译器自动对其初始化。普通全局变量对整个工程可见,其他文件使用关键字extern外部声明后可以直接使用。 静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。 在定义不需要与其他文件共享的全局变量时,加上static关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用。

3.函数:在函数的返回类型前加上static,就是静态函数。例如:static int main() 静态函数只能在声明它的文件可见,其他文件不能引用该函数。不同文件可以使用相同名字静态函数 非静态函数可以在另一个文件直接引用。

总结,static在修饰全局变量和函数时,作用类似,是使被修饰的全局变量或函数仅在当前文件中可见。但在修饰局部量时,其作用则是只对被修饰的变量进行一次初始化,使变量所存数据在退出函数后仍然有效。

#include<stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d", i);
}
int main()
{
    int a = 0;
    while (a < 10)
    {
        test();
        a++;
    }
    return 0;
}

输出10个·1

#include<stdio.h>
void test()
{
    static int i = 0;
    i++;
    printf("%d", i);
}
int main()
{
    int a = 0;
    while (a < 10)
    {
        test();
        a++;
    }
    return 0;
}

输出1到10

Java

Java中对于static的使用与C中对局部变量的修饰有些类似,不过Java中static不能修饰局部变量,只能修饰类变量、方法和代码块。

被static修饰的部分,只有在第一次加载这个了类的时候进行一次初始化(所有被static修饰的都会被加载)。

对于被static修饰的类变量和方法,如果有访问权限(public...),可以使用类名直接调用访问,而不需要此类的实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河东张子恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值