Java中的静态:
静态是非访问修饰符。static关键字属于该类,而不是该类的实例。可用于将变量或方法附加到类。
静态关键字可以用于:
方法
变量
嵌套在另一个类中的类
初始化块
不能用于:
类(未嵌套)
建设者
介面
方法本地内部类(与嵌套类不同)
内部类方法
实例变量
局部变量
例:
想象以下示例,该示例具有一个名为count的实例变量,该实例变量在构造函数中递增:
package pkg;
class StaticExample {
int count = 0;// will get memory when instance is created
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
由于实例变量在创建对象时会获得内存,因此每个对象都将具有实例变量的副本,如果递增,则不会反映到其他对象。
现在,如果我们将实例变量计数更改为静态变量,那么程序将产生不同的输出:
package pkg;
class StaticExample {
static int count = 0;// will get memory when instance is created
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和static的全局变量保持不变。因为,静态成员存储在类内存中,并且在整个执行过程中仅加载一次。它们是该类的所有对象共有的。如果将静态变量声明为final,则任何对象都无法更改其值,因为它是final。因此,声明为final和static的变量有时称为常量。接口的所有字段都称为常量,因为默认情况下它们是最终的和静态的。
图片资源:最终静态