A「恆定」(const
)是隻能設置一次,並且必須在靠近(通常立即)設置爲對象的聲明的對象。所以,你不能做到這一點:
const val:String;
... 5 minutes later ...
val = 'hello world'
相反,你必須做到:
const val:String = 'hello world';
從文檔,看來以後可以設置它比這一點,但似乎沒有成爲一個預定義的時間或順序,您可以在其中設置它。如上所述,您最好立即設置它。如果在「嚴格模式」下編譯,則必須按照上面的方法設置必須爲。
常數是一個很好的處理時間。因爲它是一個固定值,所以運行時可以以更有效的方式以不同的方式存儲它。我不記得具體細節,但consts在標準變量的對象訪問時提供了實質性的改進。
static
是一個訪問修飾符,就像private
或public
(有不少其他人,我建議你閱讀所有這些文件)。靜態對象只存在一次。一個標準對象每次被實例化或訪問時都被聲明。靜態對象只是第一次聲明。所以考慮以下幾點
public class ClassA {
public static var URL:String = "http://google.com";
public function ClassA(){
//hello world
}
}
這是一個簡單的類,其中存儲public static var
。當我實例化類像這樣:
var hello:ClassA = new ClassA();
URL
創建並設置爲谷歌的網址。現在,一個靜態屬性不屬於一個對象,所以如果你試圖訪問hello.URL
,它將會失敗。相反,它屬於類定義。所以你可以像ClassA.URL
那樣訪問它。在ClassA的範圍內,您可以通過ClassA.URL
或僅通過URL
訪問它。通常,靜態對象在兩個地方使用:
- Util類。
Math.PI
或Math.max()
情況下,你需要保存單個實例這
- 對象的好例子。我喜歡將它們用於用戶系統,您只有在任何給定時間才能以單個用戶身份登錄。我通常有一個
User
對象,其中我存儲username
和accountType
等。
靜態對象是有好有壞。對於將被實例化一千次的類,該值永遠不會改變,它提供了大量的內存使用優勢(而不是存儲15個字節x 1000或1.5千字節,只存儲前15個字節)。但是,需要考慮範圍問題和一般OOP標準。在面對靜態對象時,你會發現有人會爭辯,直到他們面對藍色,並且通過關聯Singletons(閱讀它們,它們不是靜態對象),永遠不會被使用,因爲它違背OOP原則。如果它應該是靜態的,我將它用於User對象的例子是有爭議的。有人會認爲它應該是一個Singleton(我最新的項目實際上使用了一個Singleton),有些人會認爲它應該使用其他方法,有些人甚至會認爲User
對象應該無限通過對象,以便它到達需要的地方(這是一個絕對的噩夢來處理)。
在現實中,按照您認爲合適的方式使用它們。你是開發者。找出最適合該項目以及您和您的團隊的項目。
閱讀here關於常數和here的(一般和大多數基於類的OOP語言)約在AS3訪問修飾符一個很好的概述
一個static const
從兩個提供的好處。這是一個只存在一次的對象,只能設置一次,所以它提供了內存和處理時間的好處。它通常用於當您需要保存一個永遠不會改變但需要多次訪問的值(如Math.PI
或MouseEvent.MOUSE_DOWN
)
如果這兩個常量在分離文件中,我會建議不要使用第一種情況。我不確定as3的具體情況,這就是爲什麼我沒有回答這個問題,但在C++中有一個叫做static fiasco初始化順序的東西。在這種情況下,無法確定哪個靜態常量變量會首先初始化。可能是因爲as3沒有這樣的問題:) – krizajb