1. 程式人生 > >201671010145 2016-2017《Java程序設計》靜態域與靜態方法

201671010145 2016-2017《Java程序設計》靜態域與靜態方法

arr 即使 定義 參數 pow 存在 設定 pub math

1.靜態域

如果將域定義為static,那麽每個類中只有一個這樣的域。而每一個對象對於所有的實例域卻都有自己的一份拷貝。例如,假定需要給每一個雇員賦予唯一的表示碼。這裏給Employee類添加一個實例域id和一個靜態域nextld:

class Employee

{

private int id;

private static int nextId=1;

}

現在,每一個雇員對象都有一個自己的id域,但這個類的所有實例將共享一個nextid域,換句話說,如果有1000個Employee類的對象,則有1000個實例域id,但是只有一個靜態域nextid,即使沒有一個雇員對象,靜態域nextil也存在,他屬於類,而不屬於任何獨立的對象。

下面來實現一個簡單的方法:

public void setId()

id= nextId;

nextId++;

假設為harry設定雇員標識碼:

harry.setId();

那麽harry的id域被設置,並且靜態域nextId的值加1:

hurry.id= . . .;

Employee.nextId++;

2.靜態常量

靜態變量使用的比較少,但是靜態常量卻使用的比較多,例如,在Math類中定義了一個靜態常量:

public class Math

{

public static final double PI=3.14159265358979323846;

}

在程序中通過Math.PI來訪問這個常量

如果關鍵字static被省略,PI就成了Math類的一個實例域,即需要用Math類的對向來訪問PI,並且每一個Math對象都有他自己的一份PI拷貝。

已經使用多次的另一個靜態常量是System.out,他在System類中聲明:

public class System

public static final PrintStream out= ...;

3.靜態方法:

靜態方法是不能想對象實施操作的方法。例如,Math類的pow方法就是一個靜態方法。表達式計算冪,他在運行的時候,不使用任何Math對象,換句話,沒有隱式的參數。

可以認為靜態方法不能操作對象,所以不能在靜態方法中訪問實例域。但是,靜態方法可以訪問自身類中的靜態域。下面例子:

public static int getNextId()

return nextId;

可以通過類名調用這個方法:

int n=Employee.getNextId();

這個方法可以省略static,但是需要通過Employee類對象的引用調用這個方法。

201671010145 2016-2017《Java程序設計》靜態域與靜態方法