Zi 字媒體
2017-07-25T20:27:27+00:00
這是海芋最近碰到的一個小問題,為什麼在同一個類別中,Static Method 不能存取 Non-Static Method 呢?於是海芋就想啊想的,加上翻了一下資料,終於恍然大悟,就把他寫下來,避免將來忘記。
就程式語言的變數、類別來說,分為 Static 和 Non-Static 分為兩種不同的型態,則 Java 大概可以分為四種資料成員,分別為「class field」、「class method」、「instance filed」、「instance method」,而這麼多的型態,我們該如何去分辨呢?
在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 cd = new CD()
double area = cd.area;
又倒底是什麼原因,讓 static method 只能存取 static method 呢?原因很簡單,因為在同一個類別之中,沒有建立自己的物件,既然沒有建立物件,那如何存取instance method呢?
在 instance method 中,則是可以存取到 static method,但是仍然要以「類別名稱.變數/method名稱」來存取,這點是相當重要的喔!
所以總結如下:
在同一個類別中,若有method宣告為static,則此method只能呼叫其它宣告為static的method。
在不同的類別中,若要呼叫其它class的static method/field,則使用下列程式碼:className.fieldName
className.methodName
若要呼叫class method或是class filed,則需先建立物件,再使用下列程式碼:objectVariableName.fieldName
objectVariableName.methodName
但是,在同一類別中,instance method和instance method間,可以互相呼叫。
文章打完也說完了,如果是您不是程式設計師,或許會看得霧殺殺!那就略過吧! ~( ̄▽ ̄)~(_△_)~( ̄▽ ̄)~(_△_)~( ̄▽ ̄)~!
寫了
5860316篇文章,獲得
23313次喜歡