概念:
类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。静态变量在第一次被访问时创建,在程序结束时销毁。与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。静态变量可以通过:ClassName.VariableName的方式访问。类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。
class A {
public static String StaticA = "A";
static {
StaticA = "A1";
}
public A() {
StaticA = "A2";
}
public static void Change() {
StaticA = "A3";
}
public static void Change2() {
StaticA = "A4";
}
}
class B {
public static final String StaticB;
static {
StaticB = "StaticB";
}
}
public class StaticTest {
private static Integer StaticInt = 1;
private Integer random = 1;
public StaticTest() {
StaticInt++;
random++;
}
public static void main(String[] args) {
System.out.println("类变量与对象变量的值变化");
StaticTest test = new StaticTest();
System.out.println("实例test:StaticInt:" + test.StaticInt + "----random:" + test.random);
StaticTest test2 = new StaticTest();
System.out.println("实例test2:StaticInt:" + test.StaticInt + "----random:" + test.random);
System.out.println("静态变量赋值");
System.out.println("静态语句块起作用:" + A.StaticA);
A a = new A();
System.out.println("构造器起作用:" + a.StaticA);
a.Change();
System.out.println("静态方法1起作用:" + A.StaticA);
a.Change2();
System.out.println("静态方法2起作用:" + A.StaticA);
System.out.println("常量赋值");
System.out.println("静态语句赋值:" + B.StaticB);
}
}
timit@TIMI:/home/workplace$ java StaticTest
类变量与对象变量的值变化
实例test:StaticInt:2----random:2
实例test2:StaticInt:3----random:2
静态变量赋值
静态语句块起作用:A1
构造器起作用:A2
静态方法1起作用:A3
静态方法2起作用:A4
常量赋值
静态语句赋值:StaticB