static有什么作用?

面试题:static有什么作用?

答:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数

 一、       定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:

(1)       在全局数据区内分配内存

(2)       如果没有初始化,其默认值为0

(3)       该变量在本文件内从定义开始到文件结束可见

 二、       定义局部静态变量:在局部静态变量前面加上关键字static,该局部变量便成了静态局部变量。静态局部变量有以下特点:

(1)       该变量在全局数据区分配内存

(2)       如果不显示初始化,那么将被隐式初始化为0

(3)       它始终驻留在全局数据区,直到程序运行结束

(4)       其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

  三、       定义静态函数:在函数的返回类型加上static关键字,函数即被定义成静态函数。静态函数有以下特点:

(1)       静态函数只能在本源文件中使用

(2)       在文件作用域中声明的inline函数默认为static

                说明:静态函数只是一个普通的全局函数,只不过受static限制,他只能在文件坐在的编译单位内使用,不能呢个在其他编译单位内使用。

在C++语言中新增了两种作用:定义静态数据成员或静态函数成员

  一,       定义静态数据成员。静态数据成员有如下特点:

(1)       内存分配:在程序的全局数据区分配

(2)       初始化和定义:静态数据成员定义时要分配空间,所以不能在类声明中初始化

  二,       静态成员函数。静态成员函数与类相联系,不与类的对象相联系。静态成员函数不能访问非静态数据成员。原因很简单,非静态数据成员属于特定的类实例,静态成员函数主要用于对静态数据成员的操作。

(1)       静态成员函数没有this指针。


转自:http://blog.csdn.net/leo115/article/details/8085414 与原文有出入的地方已标注。

在Java中,static关键字用于声明类的静态成员,包括属性、方法、代码块和嵌套类,这些成员与类本身相关,而非类的实例相关[^1]。 ### static关键字的作用 - **静态属性(类变量)**:静态属性被类的所有实例共享。无论创建多少个类的对象,静态属性只有一份拷贝存储在内存中。例如在`Employee`类中,`private static int count = 0;` 这个静态变量`count`会在所有`Employee`对象之间共享,每次创建新的`Employee`对象时,`count`的值会加1,并且可以通过类名直接访问这个静态变量,如`Employee.showCount()` [^2]。 - **静态方法**:静态方法属于类,而不属于类的实例。可以直接通过类名调用静态方法,不需要创建类的对象。静态方法只能访问静态成员(静态属性和其他静态方法),不能访问实例成员,因为实例成员依赖于具体的对象实例。 - **静态代码块**:使用`static`关键字和`{}`包裹的一段代码,在类被加载到JVM时执行一次,且仅执行一次。它的执行时机早于任何对象的创建和任何方法的调用,主要用于初始化静态资源,比如加载数据库驱动、初始化静态变量的复杂逻辑等 [^3]。 - **静态内部类**:静态内部类是定义在另一个类内部的静态类,它可以不依赖于外部类的实例而被实例化,并且只能访问外部类的静态成员。 ### static关键字对变量生存周期的影响 普通实例变量的生存周期与对象的生存周期一致。当创建一个对象时,实例变量被分配内存;当对象被垃圾回收时,实例变量的内存被释放。而静态变量的生存周期与类的生存周期一致。当类被加载到JVM时,静态变量被分配内存;当类被卸载时,静态变量的内存才被释放。因此,静态变量在程序的整个运行期间都存在,只要类在内存中,静态变量就一直存在并且可以被访问。 ```java public class StaticExample { // 静态变量 private static int staticVariable = 0; // 实例变量 private int instanceVariable; static { // 静态代码块,在类加载时执行 staticVariable = 10; System.out.println("静态代码块执行,staticVariable 初始化为 " + staticVariable); } public StaticExample(int value) { this.instanceVariable = value; System.out.println("实例对象创建,instanceVariable 初始化为 " + instanceVariable); } public static void main(String[] args) { // 访问静态变量 System.out.println("静态变量 staticVariable 的值: " + staticVariable); // 创建实例对象 StaticExample obj1 = new StaticExample(20); StaticExample obj2 = new StaticExample(30); // 再次访问静态变量 System.out.println("静态变量 staticVariable 的值: " + staticVariable); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值