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)
  • 一個方法只需要訪問類的靜態域
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章