Static
Data Member
- 對於同一個class下的每個object都有自己的data member,但是有時候我們會想要一些data member是共享的。
e.g. 在Ball類別當中會使用的圓周率這個資料,但是每個球的圓周率都是一樣的,不需要讓不同的球物件擁有各自的資料成員來記錄圓周率,而這個記錄的值卻是相同,這只會增加記憶體的消耗而已。
但是如果在此class之外不會用到這個參數,也可以不必使用static
- 這時可以將資料成員宣告為"static",被宣告為"static"的資料成員,它是屬於類別所擁有,而不是個別的物件,我們可以將"static"視為個別物件所擁有、共享的資料成員。
- public static double PI = 3.14159; // 宣告static資料
在Java中,你可以把Static看成是類別所擁有的,而且是一開始就放置於記憶體中的,而Instance則是伴隨著物件產生而產生的。
public class CD {
public static double PI =
Math.PI;
public double area = 0;
public CD() {
.........
}
}
因為PI這個變數是宣告為static的,所以他是屬於CD類別,因此若您要在別的類別存取他,只要使用「CD.PI」即可,其中「CD為類別名稱」、「PI則為變數名稱」。
再來,因為area不為static,因此您只能建立物件,再存取他,所以您如果要在別的類別存取他,只能這樣使用。
CD cd1 = new CD();
cd1.area = 20;
而又倒底是什麼原因,讓static
method只能存取static method呢?原因很簡單,因為在同一個類別之中,沒有建立自己的物件,既然沒有建立物件,那如何存取instance method呢?
而在instance
method中,則是可以存取到static method,但是仍然要以「類別名稱.變數/method名稱」來存取
總結如下:
- 在同一個類別中,若有method宣告為static,則此method只能呼叫其它宣告為static的method。
- 在不同的類別中,若要呼叫其它class的static method/field,則使用下列程式碼:
className.fieldName
className.methodName
- 若要呼叫instance method或是instance
filed,則需先建立物件,再使用下列程式碼:objectVariableName.fieldName
objectVariableName.methodName - 但是,在同一類別中,instance method和instance method間,可以互相呼叫。
沒有留言 :
張貼留言