10.静态域与静态方法【Java温故系列】

参考自–《Java核心技术卷1》

1 静态域

如果将域定义为 static ,每个类只有一个这样的域。而该类的每个对象对于所有的实例域都有自己的一份拷贝。如:

class Employee{
	private static int nextId = 1; //静态域
	private int id;  //实例域
	...
}

每个 Employee 对象都有一个自己的 id 域,但是这个类的所有实例(对象)将共享一个 nextId 域。即若有100个 Employee 类的对象,就有100个实例域 id;但是只有一个静态域 nextId .即使没有一个 Employee 对象,静态域 nextId 也依旧存在,它属于类,而不属于任何一个独立的对象(但静态域可以被对象修改)。


2 静态常量

静态变量使用的比较少,但静态常量使用的比较多。例如:Math 类的 PI

public class Math{
	...
	public static final double PI = 3.14;
	...
}

在程序中,可以通过 Math.PI 的形式获得这个常量(如果 static 被省略,PI 就变成了 Math 类的一个实例域,需要通过一个 Math 类的对象访问 PI)。

System.out 也是一个经常使用的静态常量:

public class System{
	...
	public static final PrintStream out = ...;
	...
}

:在上述两个静态常量的定义中,都使用了 public 修饰,然而,在公有常量(final 域)中,即使有 public 其他方法也不能修改常量。


3 静态方法

静态方法是一种不能向对象实施操作的方法。例如,Math 类的 pow 方法就是一个静态方法Math.pow(x,a) 计算幂 x^a.在运算时,不能使用任何 Math 对象(即,无隐式的参数,无 this).

类的静态方法是不能访问类的实例域的,因为它不能操作对象。但是,静态方法可以访问自身类中的静态域。如:Employee 类的静态域 nextId,添加一个静态方法访问它

public static int getNextId(){
	return nextId;//返回静态域
}

可以通过类名调用这个方法:int n = Employee.getNextId();

:可以使用对象调用静态方法,但不建议。

以下情况使用静态方法:

  • 一个方法不需要访问对象状态,其所需参数都是通过显示参数提供(如 Math.pow)
  • 一个方法只需要访问类的静态域
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章