Java中的静态:
静态是一种非访问修饰符。
static关键字属于类,而不是类的实例。
可以用于将变量或方法附加到类。
静态关键字可以与以下内容一起使用:
方法
变量
嵌套在另一个类中的类
初始化块
不能与以下内容一起使用:
类(非嵌套)
构造函数
接口
方法局部内部类(与嵌套类不同)
内部类方法
实例变量
局部变量
示例:
想象一下以下示例,其中有一个名为count的实例变量,该变量在构造函数中递增:
package pkg;
class StaticExample {
int count = 0;
StaticExample() {
count++;
System.out.println(count);
}
public static void main(String args[]) {
StaticExample c1 = new StaticExample();
StaticExample c2 = new StaticExample();
StaticExample c3 = new StaticExample();
}
}
输出:
1 1 1
由于实例变量在对象创建时获取内存,因此每个对象都将拥有实例变量的副本,如果它被增加,它不会反映到其他对象中。
现在,如果我们将实例变量count更改为静态变量,则程序将产生不同的输出:
package pkg;
class StaticExample {
static int count = 0;
StaticExample() {
count++;
System.out.println(count);
}
public static void main(String args[]) {
StaticExample c1 = new StaticExample();
StaticExample c2 = new StaticExample();
StaticExample c3 = new StaticExample();
}
}
输出:
1 2 3
在这种情况下,静态变量只会获得一次内存,如果任何对象更改了静态变量的值,则它将保留其值。
带有final的静态变量:
声明为final和静态的全局变量在整个执行过程中都不会改变。因为静态成员存储在类内存中,它们只会在整个执行过程中加载一次。它们对类的所有对象都是相同的。如果将静态变量声明为final,则任何对象都无法更改它们的值,因为它是final的。因此,声明为final和static的变量有时被称为常量。接口的所有字段都被称为常量,因为它们默认为final和static。
![输入图像描述](https://istack.dev59.com/g7Hng.webp)
图片来源:Final Static