Java中的static
1、
2、
3、
1、
package com.meritit.test;
class Student {
static int numberOfStudents = 0;
Student() {
numberOfStudents++;
}
}每一次创建一个新的Student实例时,成员numberOfStudents都会不断的递增,并且所有的Student实例都访问同一个numberOfStudents变量,实际上int
多个实例共享一个变量似乎不足以让我们对static那么的热情,实际上java引入static却有另外的含义:
2、
3、
non-static
对于static的初始化问题,我们还是值得讨论的。现看下面的例子
package com.meritit.test;
public class StaticInit
{
static int i;
int a;
public StaticInit()
{
a=6;
System.out.println("a 的初始化"+a);
}
public static void main(String[] args)
{
new StaticInit();
}
static
{
i=5;
System.out.println("i 的初始化"+i);
}
}运行结果如下:
i
a
说起static的“局限“,总结起来就是:在static的方法中仅能够调用其他的static方法和static变量;在static方法中不能以任何方式引用this或super;static变量在定义时必须进行初始化,并且初始化的时间早于非静态。还有一个局限我需要具体的说明一下,static的变量的初始化仅能一次,如下例:
package com.meritit.test;
public class Static {
T1 t1 = new T1(2);
T1 t2 = new T1(3);
T1 t3 = new T1(4);
public Static() {
System.out.println("t1: " + t1.t);
System.out.println("t2: " + t2.t);
System.out.println("t3: " + t3.t);
}
public static void main(String args[]) {
new Static();
}
}
class T1 {
static int t = 1;
T1(int b) {
t = b;
}
}运行结果:
t1:
4
t2: 4
t3: 4
该static变量只是接受了最后一次的初始化.实际这还是我们先前提到的多个实例共享一个静态的变量的问题。
总之,static就是给我们一个这样的忠告:static的东西在编译时,就已向内存要到了存取空间了。
浙公网安备 33010602011771号