Java中用到static的情况有两种:
1. 创建多个object的时候,某个(些)filed(s) 的值是全局性的(不仅仅适应于某个/些object)。这样我们只需开辟一块存储区域给这个filed就行了,不用每次创建新object的时候都给它开辟一块新的存储区域。
2. 如果想不是实例化就调用方法,那么可以用static标记。
由以上定义可以看出:
1. 无需实例化,直接用class的名字.field(或.method)就可以直接操作数据。
2. 实例化以后,用object的名字.field(或.method)效果同1是一样的。
public class HelloWorld {
//标记static以后,所有的实例化object中的i都来自同一地址
public static int i = 3;
//每次实例化一个object,都要为non-static的j开辟一块新的地址
public int j = 3;
//该方法无需实例化即可调用。
public static void addOne()
{
//i标记为static,无需实例化即可以操作。
HelloWorld.i++;
}
//non-static方法必须实例化以后方可调用。
public void addTwo()
{
HelloWorld.i++;
}
public static void main(String[] args) {
//无需实例化,直接调用static函数,直接操作i变量。
HelloWorld.addOne();
System.out.println(HelloWorld.i);
//non-static方法必须实例化后才能用。
HelloWorld hw = new HelloWorld();
hw.addTwo();
System.out.println(HelloWorld.i);
//又实例化了一个object叫hw1,由于共用同一地址,i值是5。
HelloWorld hw1 = new HelloWorld();
System.out.println(hw1.i);
//hw的j变量加1,j变为4,而hw1仍为3,说明二者non-static的j不在同一地址。
hw.j++;
System.out.println("hw.j = " + hw.j);
System.out.println("hw1.j = " + hw1.j);
}
}
输出:
4
5
5
hw.j = 4
hw1.j = 3