Java静态域与静态方法
@(JAVA)[java]
在Java中,静态修饰符static只能用于类的成员变量与成员方法。
(一)静态域
1、静态变量
如果将某个变量定义为static,那么这个类及其所有对象共享同一个值,它在内存中只存在一份,严格来说是在每个JVM中只存在一份。
比如:
public class Employee{
private int id;
private static int nextId = 1;
}
每个Employee对象都有一个id的拷贝,而且它们的值并不相同。但所有的Employee共享同一个nextId的值,它在JVM中只存在一份。
2、静态常量
其实静态变量使用得相对较少,它一般会结合一些设计模式使用(如单例)。但静态常量却使用得非常的多,如Math类中的:
public static final double PI = 3.1415926538979323864;
另一个使用得非常多的是System.out,它在System类中被声明:
public static final PrintStream out = ...
(二)静态方法
静态方法不需要先实例化对象,再进行调用,面是可以直接使用类名进行调用。常用于一些工具类(utils等),如Math类中的很多方法:
Math.pow(5,2);
静态方法不能操作对象,也不能在静态方法中访问实例域(但可访问静态域)。
在以下2种情况使用静态方法:
* 【工具类】一个方法不需要访问对象状态,其所需参数都是通过显式参数提供(如Math.pow())
* 一个方法只需要访问类的静态域(如Employee.geetNextId())
(三)静态成员类
请参考《effective java》第24条
(三)小结
- 静态域在内存中只存在一份,所有对象共享。静态常量更觉,静态变量更多与一些设计模式结合使用。
- 静态方法更多用于工具类,或者是只访问类的静态域的情形。