總網頁瀏覽量

2013年2月1日 星期五

static

在類別內的變數或函式(method)如果加上這個修飾字,就成為所謂的類別變數或類別方法。
主要用意是產生一個"class專屬"的"共用"資料成員或方法
因為static變數是class層級的東西,所以不可以宣告在method裡面
error: illegal start of expression

意思是這個變數跟函式,專屬於類別而非物件。



如果呼叫或存取static變數、函式,也就沒有this參考
又因為宣告static的方法  沒有this參考 所以在static方法中
不能使用non-static成員
以下是static方法存取non-static的錯誤訊息
(sample8.java:25: error: non-static variable num cannot be referenced from a static context)


使用static函式呼叫其他static函式時
會以自己的類別(class)作為呼叫的對象
幻想它會自動冠上<<類別名稱>>.
在這個例子中會對應到test1.more(2, 4, 4, 4)
之所以一樣都是類別下的成員函式還得加上static
是因為在非static的成員函式中呼叫其他成員函式時
會以自己的實體(instance)作為呼叫的對象
幻想它會自動冠上this.
在這個例子中會對應到this.more(2, 4, 4, 4)





static 函式無法存取非 static 成員(也就是 instance 成員) ,
        但是非 static 函式可以存取 static 成員 ,


特徵是不用建立物件來存取他們,
可以透過類別直接存取

呼叫方法:
Classname.methodname();
Classname.viraible;

不加上static的變數與函式都必須透過物件(實體化)才能存取與設定,因此稱為實體變數、實體方法。



當class載入記憶體時,static屬性的變數與方法就跟著載入記憶體並初始化,之後建立物件時不會再另外載入記憶體給予初始化。



應用方面
static int sum;
可以用來計算建立多少物件

沒有留言:

張貼留言