Java關鍵字理解與總結(未完)
一.static
static表示“全域性”或者“靜態”的意思,用來修飾成員變數和成員方法,也可以形成靜態static程式碼塊。它不依賴類特定的例項,被類的所有例項共享。只要這個類被載入,Java虛擬機器就能根據類名在執行時資料區的方法區內找到他們。因此,static物件可以在它的任何物件建立之前訪問,無需引用任何物件。
- 靜態變數:
按照是否靜態的對類成員變數進行分類可分兩種:一種是被static修飾的變數,叫靜態變數或類變數;另一種是沒有被static修飾的變數,叫例項變數。
兩者的區別是:
- 對於靜態變數在記憶體中只有一個拷貝(節省記憶體),JVM只為靜態分配一次記憶體,在載入類的過程中完成靜態變數的記憶體分配,可用類名直接訪問(方便),當然也可以通過物件來訪問(但是這是不推薦的)。
- 對於例項變數,沒建立一個例項,就會為例項變數分配一次記憶體,例項變數可以在記憶體中有多個拷貝,互不影響(靈活)。
- 靜態方法:
靜態方法可以直接通過類名呼叫,任何的例項也都可以呼叫。
靜態方法中不能用this和super關鍵字(原因),不能直接訪問所屬類的例項變數和例項方法,只能訪問所屬類的靜態成員變數和成員方法。因為例項成員與特定的物件關聯!
因為static方法獨立於任何例項,因此static方法必須被實現,而不能是抽象的abstract。 - 靜態程式碼塊:
靜態程式碼塊是一段在載入類時會執行的程式程式碼。它會在其他程式可以使用該類之前就執行,所以很適合放靜態final變數的初始化程式碼。(靜態程式碼塊會在建構函式之前執行)
class Box{
final static int width;
static{
width = 10;
}
}
靜態成員、靜態方法中不能用this和super關鍵字;
二.final
- ** final類:**
final的類代表你不能繼承該類,也就是建立他的子類。因此final類的成員方法沒有機會被覆蓋,預設都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會載被擴充套件,那麼就設計為final類。例如:String Interger -
final方法:
final的方法代表你不能覆蓋該方法,但是可以過載;如果一個類不允許其子類覆蓋某個方法,則可以把這個方法宣告為final方法。
使用final方法的原因有二:
- 把方法鎖定,防止任何繼承類修改它的意義和實現。(例如:方法的功能已經足夠完整了,子類中不需要改變 )
- 高效。編譯器在遇到呼叫final方法時候會轉入內嵌機制,大大提高執行效率。
- ** final的變數:**
final的變數代表你不能改變它的值; - final static常量:
public static final double PI = 3.14
- 空白final:
class Box{
final int width;
Box( int number){
width = number;
}
}
width儘管被宣告成final,但卻未得到一個初始值。無論在哪種情況下,空白final 都必須在實際使用前得到正確的初始化。而且編譯器會主動保證這一規定得以貫徹。然而,對於final 關鍵字的各種應用,空白final 具有最大的靈活性。位於類內部的一個final 欄位可以對每個物件都可以有所不同,同時依然保持其“不變”的本質。
- final引數:
當函式引數為final型別時,你可以讀取使用該引數,但是無法改變該引數的值。
public void print(final int i) {
//i++; //i是final型別的,值不允許改變的.
System.out.print(i);
}
總結:
- 對於基本資料型別,final表示該變數的數值不會被改變。
- 對於物件,final表示該引用變數的值不會被改變。即:該引用變數指向一個物件之後不能再指向其他的物件。但是,物件本身的內容是可以修改的。(集合的內容)
* 靜態final變數必須在宣告或靜態初始化程式中初始化賦值;
* 非靜態final變數必須在宣告或建構函式中初始化賦值;
- final關鍵字的好處:
- final關鍵字提高了效能。JVM和Java應用都會快取final變數。
- final變數可以安全的在多執行緒環境下進行共享,而不需要額外的同步開銷。
- 使用final關鍵字,JVM會對方法、變數及類進行優化。(?)
- 注意:
- final不能用於修飾構造方法
三.this
this 關鍵字只能在方法內部使用,表示對“呼叫方法的那個物件”的引用。
- this關鍵字的一種用法,當引數名和資料成員名相同時,防止歧義。(資料成員會被區域性變數遮蔽)
class Box{
int a = 2;
public void print(int a){
this.a = a;
}
}
相關文章
- Java transient關鍵字使用總結Java
- JAVA static關鍵字理解Java
- Java關鍵字final、static使用總結Java
- Java關鍵字volatile的理解Java
- static關鍵字作用總結
- static關鍵字的使用總結
- Java中this與super關鍵字Java
- 完全理解關鍵字this
- Java常量池理解與總結Java
- Java 資料結構總結 (未完成)Java資料結構
- 深入理解Java記憶體模型JMM與volatile關鍵字Java記憶體模型
- Java volatile關鍵字最全總結:原理剖析與例項講解(簡單易懂)Java
- 深入理解Java中的volatile關鍵字Java
- Java面試題,深入理解final關鍵字Java面試題
- 深入彙編指令理解Java關鍵字volatileJava
- 深入理解Java中的final關鍵字Java
- this 關鍵字的理解--java學習筆記(轉)Java筆記
- 關於熱部署-理解與總結熱部署
- 值得儲存的 synchronized 關鍵字總結synchronized
- Java關鍵字static、final使用小結Java
- Java課堂篇4_關鍵字this、static的理解Java
- 快速理解 volatile 關鍵字
- 深入理解synchronized關鍵字synchronized
- python:理解關鍵字—yieldPython
- 深入理解copy關鍵字
- [java]transient關鍵字Java
- java中this關鍵字Java
- java transient關鍵字Java
- java之this關鍵字Java
- 關於react我的理解與總結React
- 完全理解關鍵字”with”與上下文管理器
- 完全理解關鍵字"with"與上下文管理器
- abstract關鍵字 super 關鍵字 類與繼承繼承
- Java異常機制關鍵字總結,及throws 和 throw 的區別Java
- 完全理解JavaScript中的this關鍵字JavaScript
- 兩張圖理解volatile關鍵字
- Java關鍵字(八)——synchronizedJavasynchronized
- Java native關鍵字Java