final、finally、finalize 的區別
1)final:用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,被其修飾的類不可繼承。bash
對於一個final變量,若是是基本數據類型的變量,則其數值一旦在初始化以後便不能更改;若是是引用類型的變量,則在對其初始化以後便不能再讓其指向另外一個對象。性能
當用final修飾一個類時,代表這個類不能被繼承。final類中的全部成員方法都會被隱式地指定爲final方法。優化
使用final方法的緣由有兩個:this
- 第一個緣由是把方法鎖定,以防任何繼承類修改它的含義;
- 第二個緣由是效率。在早期的Java實現版本中,會將final方法轉爲內嵌調用。可是若是方法過於龐大,可能看不到內嵌調用帶來的任何性能提高(如今的Java版本已經不須要使用final方法進行這些優化了)。類中全部的private方法都隱式地指定爲final。
2)finally:異常處理語句結構的一部分,表示老是執行。spa
3)finalize:Object類的一個方法,在垃圾回收器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。該方法更像是一個對象生命週期的臨終方法,當該方法被系統調用則表明該對象即將「死亡」,可是須要注意的是,咱們主動行爲上去調用該方法並不會致使該對象「死亡」,這是一個被動的方法(其實就是回調方法),不須要咱們調用。code
在GC要回收某個對象時,這個對象:「最後一刻,我還能再搶救一下!」。所以JVM要對它進行額外處理。finalize成爲了CG回收的阻礙者,致使這個對象通過多個垃圾收集週期才能被回收。對象
static,this,super
static 關鍵字
- 修飾成員變量和成員方法:被static修飾的成員屬於類,不屬於單個這個類的某個對象,被類中全部對象共享,能夠而且建議經過類名調用。被static 聲明的成員變量屬於靜態成員變量,靜態變量存放在Java內存區域的方法區。
調用格式:類名.靜態變量名 類名.靜態方法名()。
複製代碼
- 靜態代碼塊: 靜態代碼塊定義在類中方法外, 靜態代碼塊在非靜態代碼塊以前執行(靜態代碼塊—>非靜態代碼塊—>構造方法)。 該類無論建立多少對象,靜態代碼塊只執行一次.
- 靜態內部類(static修飾類的話只能修飾內部類): 靜態內部類與非靜態內部類之間存在一個最大的區別: 非靜態內部類在編譯完成以後會隱含地保存着一個引用,該引用是指向建立它的外圍類,可是靜態內部類卻沒有。沒有這個引用就意味着:1. 它的建立是不須要依賴外圍類的建立。2. 它不能使用任何外圍類的非static成員變量和方法。
- 靜態導包(用來導入類中的靜態資源,1.5以後的新特性): 格式爲:import static 這兩個關鍵字連用能夠指定導入某個類中的指定靜態資源,而且不須要使用類名調用類中靜態成員,能夠直接使用類中靜態成員變量和成員方法。
this 關鍵字