1. 程式人生 > >static、final、transient等關鍵字的作用

static、final、transient等關鍵字的作用

static

static表示“全域性”或者“靜態”的意思,用來修飾成員變數和成員方法,也可以形成靜態static程式碼塊
被static修飾後的成員,在編譯時由記憶體分配一塊記憶體空間,直到程式停止執行才會釋放,那麼就是說該類的所有物件都會共享這塊記憶體空間。
在java類庫當中有很多類成員都宣告為static,可以讓使用者不需要例項化物件就可以引用成員。
靜態導包就是Java包的靜態匯入,用import static代替import靜態匯入包是JDK1.5中的新特性。
一般我們匯入一個類都用 import com…..ClassName;而靜態匯入是這樣:import static com…..ClassName.*;這裡的多了個static,還有就是類名ClassName後面多了個.* ,意思是匯入這個類裡的靜態方法。當然,也可以只匯入某個靜態方法,只要把 .* 換成靜態方法名就行了。然後在這個類中,就可以直接用方法名呼叫靜態方法,而不必用ClassName.方法名 的方式來呼叫。
好處:這種方法的好處就是可以簡化一些操作,例如列印操作System.out.println(…);就可以將其寫入一個靜態方法print(…),在使用時直接print(…)就可以了。但是這種方法建議在有很多重複呼叫的時候使用,如果僅有一到兩次呼叫,不如直接寫來的方便。

final

final類不能被繼承,沒有子類,final類中的方法預設是final的。
用final修飾的成員變量表示常量,值一旦給定就無法改變!
final修飾的變數有三種:靜態變數、例項變數和區域性變數,分別表示三種類型的常量。

transient

Java的serialization提供了一種持久化物件例項的機制。當持久化物件時,可能有一個特殊的物件資料成員,我們不想用serialization機制來儲存它。為了在一個特定物件的一個域上關閉serialization,可以在這個域前加上關鍵字transient。當一個物件被序列化的時候,transient型變數的值不包括在序列化的表示中,然而非transient型的變數是被包括進去的。

volatile

volatile的作用是: 作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.
一般說來,volatile用在如下的幾個地方:
1、中斷服務程式中修改的供其它程式檢測的變數需要加volatile;
2、多工環境下各任務間共享的標誌應該加volatile;
3、儲存器對映的硬體暫存器通常也要加volatile說明,因為每次對它的讀寫都可能有不同意義;
另外,以上這幾種情況經常還要同時考慮資料的完整性(相互關聯的幾個標誌讀了一半被打斷了重寫),在1中可以通過關中斷來實現,2 中可以禁止任務排程,3中則只能依靠硬體的良好設計了。

strictfp

想讓你的浮點運算更加精確,而且不會因為不同的硬體平臺所執行的結果不一致的話,可以用關鍵字strictfp.