Java静态域与静态方法

来源:互联网 发布:gcc编译器下载 linux 编辑:程序博客网 时间:2024/05/16 12:09

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条

(三)小结

  1. 静态域在内存中只存在一份,所有对象共享。静态常量更觉,静态变量更多与一些设计模式结合使用。
  2. 静态方法更多用于工具类,或者是只访问类的静态域的情形。