虽然已经工作了,但我还是想扎实一下Java的基本功,拿起了刚学Java时买的《Java编程思想》来看看。果然是神书,受益匪浅,尽管它的版本很落后,但一些基础性的问题能让人有醍醐灌顶的感觉,本片博客大部分内容源自《Java编程思想》中文版。
static,意为静态的。
1.从对象说起
我们用new关键字来创建对象时,数据存储空间才被分配,这个对象的方法才供外界调用。但有两种情况上述方法是解决不了的:a只想为某一特定域分配单一储存空间,而不用去考虑创建多少个对象(甚至不用创建对象);b希望某一个方法不与包含它的类的任何对象关联在一起,也就是说,即使没有创建对象,也能够调用这个方法。
2.static的用法
static关键字可以解决上面的两个问题:当申明一个事物(字段、方法、代码块等)是static时,就意味着这个域或者方法不会与包含它的的那个类的任何对象实例关联在一起了。所以,即使没有创建对象实例,也可以调用其static方法或者static域。
看下面的例子:
class staticTest{
static int i = 47;
}
现在即使你创建了两个staticTset的对象A和B,staticTest.i也只有一份储存空间,这两个对象共享一个i。特别说明,当下一个例子的increment方法调用后,i的值就会自增1,而不是一成不变的47。
A.i,或者staticTest.i都可以得到i的值,非静态成员则不能通过 类名.字段 的方式去取值。
《Java编程思想》中说,使用类名是引用静态变量的首选方式,因为这样不禁强调了变量是static结构,而且在某些情况下还为编译器进行优化提供了更好的机会。
下例定义了一个静态方法:
class staticTest1{
static void increment()
{
staticTest.i++;
}
}
同样地,我们可以创建staticTset1的实例C去调用increment()方法,也可以通过类直接调用:staticTest1.increment();
static一个重要的用法就是在不创建任何对象的情况下调用类的方法,所以,现在我们就会明白,为什么main方法是static方法了。
总结一下,static关键字,可以在没有类的实例的情况下,调用类的字段和方法。