Java的Static使用介绍

2014-11-24 08:32:20 · 作者: · 浏览: 2

一、开篇


首先用一个例子开始我们今天的介绍。


定义一个TestStaticClass类如下:


public class TestStaticClass {


private static int a;
private int b = 0;

public TestStaticClass() {
a++;
b++;
}

public static void testRun() {
System.out.println("run TestStaticClass.testRun");
}

public String toString() {
return "a = " + a + ", b = " + b;
}
}


定义MainClass类如下:


public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new TestStaticClass());
System.out.println(new TestStaticClass());
}
}


运行的结果如下:


a = 1, b = 1


a = 2, b = 1


为什么会这样呢?这就是Static的作用之一,如果使用static来修饰一个变量,那么该变量就属于该类所有,而不再属于该类的某一实例,被类的所有实例共享。因为Java在加载该类的时候为static变量在内存中分配了一个固定的内存空间来存储,只要TestStaticClass类存在,那么该变量a所代表的地址空间就不会消失。


在上面的实例中,每一次新建一个TestStaticClass类,都会修改a所在的地址空间的内容,所以就会导致了a和b的值不一致的情况。


除了在实例中用Static来修饰变量外,还可以用来修饰修饰函数和代码块。这些在本文中都会详细的介绍,但是在这之前,必须记得Static的特性:固定。这个不仅仅指固定的地址,还包括固定的大小。使用static修饰的变量等,在编译时就为这些变量分配了空间。