Java
中的 static
关键字
static
代表着什么?
在 Java
中,static
表示 “全局” 或者 “静态” 的意思,用来修饰成员变量和方法,当然也可以修代码块。
Java
把内存分为栈内存和堆内存,其中栈内存用来存放一些基本类型的变量、数组和对象的引用,堆内存主要放一些对象。在 JVM
加载一个类的时候,若该类存在 static
修饰的成员变量或方法,则会为这些成员变量或方法在固定的位置开辟一个固定的内存区域,从而让 JVM
可以非常方便地访问他们。同时如果静态的成员变量和方法不出作用域,它们的句柄都会保持不变。被 static
修饰的成员变量或方法是独立于该类的,它不依赖于某个特定的实例变量,也就是说它是被该类的所有实例共享的。
如何使用 static
static
关键字可以用于修饰成员变量和成员方法,我们将其称为静态变量和静态方法,直接通过类名进行访问。
ClassName.propertyName
ClassName.methodName
除此以外,static
还能修饰代码块,当 JVM
装载类时,就会执行这块代码块。
1.静态变量
static
修饰的变量称为静态变量,没有用 static
修饰的变量称为实例变量。两者的区别是:
- 静态变量是随着类加载时被完成初始化,它在内存中仅有一个,而且
JVM
也只会为它分配一次内存,同时类所有的实例都共享这个静态变量,可以直接通过类名来访问它。 - 实例变量是每个实例对象特有的,它与实例对象同生共死
2.静态方法
static
修饰的方法称为静态方法,通过类名对其进行直接调用。由于静态方法在类的加载时就存在了,它不依赖于任何实例,所以,静态方法必须实现,也就是说他不能是抽象方法!!
在很多工具类中,一些工具方法就被定义为静态方法,比如 Math
类,Arrays
类。
总结:无论是变量,方法,还是代码块,只要用 static
关键字修饰的,就是在类中被加载时已经准备好的了,也就是可以脱离实例对象使用。