摘要:
读《Thinking In Java》的一些关于static关键字的总结。
Why
Why we have to use a static
key word?
一般来说,要想引用类成员变量、使用类方法或者分配存储空间,需要创建一个对象。
如:
1 | //引用类变量,注意到st1.i和st2.i指向同一存储空间,具有相同值47 |
那么,如果我们遇到特殊需求。比如我们希望为特定域(field)分配单一存储空间,而不去考虑究竟需要创建多少对象,甚至不用创建对象;再比如我们希望某个方法不与包含它的类的对象相关联,就是说,可以不用创建对象而使用方法。
此时,我们可以使用static
关键字。
How
How do we use static
当声明一个事物是static时,就意味着这个域或方法不会与包含它的类的任何对象实例关联在一起。
回顾上述两个类,我们可以声明类变量i
和类方法increment()
是static
,再直接使用类名引用它们:
1 | Class StaticTest { |
需要注意的地方
- 类中
static
方法不能访问非static
变量。- 类中
static
方法不能使用this
关键字。
原因就是Static
方法是类方法,先于任何的实例(对象)存在。即Static
方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。
总结
- 声明为
static
的事物也可以用前文所述常规方法引用。- 通过类名直接引用是引用
static
事物的首选方式,这不仅是因为它强调了事物的static
结构,而且在某些情况下它还为编译器进行优化提供了更好的机会。
总结自《Thinking in Java 4th edition》P29 - P30