类是对象的外观或者行为方式的描述,通常只有使用new创建了一个对象后,数据存储空间才被分配,对象的方法才能被调用。这存在2种不足:
1、只想为特定属性分配储存空间,而不想创建对象。
2、想创建一个与此类的任何对象无关的方法,或不想创建对象,也想调用该方法。
static就是为解决此类问题存在的,只要用static修饰,就表示该属性该方法可以不依赖任何特定的对象实例。无需创建对象,也可以调用。
同时使用类名直接引用静态变量和方法是首选,这更强调了静态数据和方法是作为类而不是特定对象而存在的。
public class UseStatic {
static void test() {
System.out.println("这是一个静态方法");
}
public static void main(String[] args) {
UseStatic.test();
}
}
同样使用创建对象来调用test()也可以,当然首选是类,或者不加类名也可以。
UseStatic sta = new UseStatic();
sta.test();
test();
这是因为static即被叫做静态或全局,独自利用一个数据存储空间,以属性为例:
public class UseStatic {
static int i = 3;
UseStatic st1 = new UseStatic();
UseStatic st2 = new UseStatic();
}
即使创建了两个对象,但st1.i和st2.i都指向同一块存储空间,都是3;同样使用最优先级的类来引用:
{
UseStatic.i++;
}
此时st1.i和st2.i都变成了4。由以下代码可以证明,静态属性不依赖特定对象而存在的(属于类)。
public class UseStatic {
static int i = 3;
public static void main(String[] args) {
UseStatic st1 = new UseStatic();
UseStatic st2 = new UseStatic();
UseStatic.i++;
System.out.println(i); // 4
System.out.println(st1.i == UseStatic.i); // true
}
}
——参考《ON JAVA 8》