节选自《Thinking in Java》第四版
Part1 static对象
通常来说,外界要调用一个类里面的方法,都要创建一个属于这个类的对象,使用new来创建对象时,数据存储空间才能被分配。
如果希望即使不创建任何对象,也可以调用某个方法的话,那就要用到static关键字了
当声明一个事物是static时,就意味着这个域或者方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或者访问其static域。通常,你必须创建一个对象,并用它来访问数据或方法。因为非static域和方法必须知道它们一起运作的特定对象。
只要将static关键字放在定义之前,就可以将字段或方法设定为static
class StaticTest {
static int i = 47;
}
现在即使创建了两个static对象,StaticTest.i也只有一份存储空间,这两个对象共享同一个i
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
这里st1.i和st2.i指向同一存储空间,他们有相同的值47
此时,若执行 Static.i++,则t1.i和st2.i仍然具有相同的值48
Part2 static方法--静态方法
对于静态方法,既可以通用一个对象来引用它,也可以以 ClassName.method()的方法引用
class A{
static void a() { do something}
}
}
以下引用a()的方法都是可行的
A a1 = new A();
a1.a();
A.a()
当static作用于某个字段的时候,会改变数据的创建方式——因为一个static字段对每个类来说都只有一份存储空间,非static字段则是对每个对象都有一个存储空间
但是,如果static作用于某个方法时,差别则没有那么大。
static方法的一个重要用法就是在不创建任何对象的前提下可以调用他