Java的Static使用介绍

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

定义一个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修饰的变量等,在编译时就为这些变量分配了空间。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d5b94a4f805b3acb5fa1b53ec51a7544.html