类变量或static变量是用static修饰符声明的变量。一个给定的类每个static变量只有一个副本,而不管该类被实例化了多少次。
如果static更改了变量的值,则新值在类的所有实例中均可用。在final可以添加关键字来表示的数值static变量永远不会改变。
如果尝试为final变量分配新值,则会出现编译错误。
package org.nhooo.example.fundamental;
public class StaticDemo {
// 静态变量
static int x = 12;
// 静态变量 with final value that never change
final static int Y = 20;
// 非静态变量
int z;
public static void main(String[] args) {
StaticDemo sd0 = new StaticDemo();
System.out.println("x before update = " + StaticDemo.x);
System.out.println("y= " + StaticDemo.Y);
sd0.z = StaticDemo.x + StaticDemo.Y;
System.out.println("z= " + sd0.z);
StaticDemo.x = 15;
System.out.println("x after update = " + StaticDemo.x);
StaticDemo sd1 = new StaticDemo();
StaticDemo sd2 = new StaticDemo();
StaticDemo.x = 20;
System.out.println("StaticDemo.x = " + StaticDemo.x);
System.out.println("sd0 = " + sd0.getX());
System.out.println("sd1 = " + sd1.getX());
System.out.println("sd2 = " + sd2.getX());
//
// 尝试将值分配给最终变量,这将导致
// 编译时间错误
//
// StaticDemo.Y = 30;
}
public int getX() {
return StaticDemo.x;
}
}这是程序打印的输出:
x before update = 12 y= 20 z= 32 x after update = 15 StaticDemo.x = 20 sd0 = 20 sd1 = 20 sd2 = 20