對於初學者而言(當然也包括我)對於這三者真的不是很陌生,經常會看到它們。但對於三者之間的區別和聯系一直是懵懵懂~~
今天心情不錯,那就簡單總結一下它們幾個的區別和聯系吧。如果又不對的地方歡迎批評指正~~
1.final
final是java的中的一個關鍵字。final關鍵字可以用來修飾屬性,方法和類。還有就是如果內部類要訪問局部變量的話,那么對應的局
部變量也必須為final關鍵字修飾的。
首先,使用final修飾的屬性是不能夠修改的。
例如:final int VALUE=100; 那么這里的VALUE的值是不能夠修改的。
其次,是使用final修飾的方是不能夠被重寫的。
例如:如果某個子類繼承了某個父類的話,那么一般而言這個子類是可以重寫它們的父類的方法。
但是如果這個父類中的方法使用final關鍵字修飾的話,那么子類是不允許重寫父類中final修飾的方法。
為了更好的說明這里點請看下面的代碼:
/** * 創建Person實例,作為Children類的父類 * @author 小浩 * @創建日期 2015-3-2 */ class Person{ /** * 大人可以掙錢,小孩是不能夠掙錢的, * 所以children類是不能夠重寫該方法 */ public final void makeMoney(){ System.out.println("我長大后要掙好多好多的錢哦~~~"); } } /** * 孩子類繼承了Person類,單Children類無法重寫makeMoney方法 * 因為此方法以使用final修飾 * @author 張浩 * @創建日期 2015-3-2 */ class Children extends Person{ /** * 這里報下面的錯誤,提示無法重寫此方法 * Cannot override the final method from Person */ @Override public void makeMoney(){ System.out.println("我是小孩,我想要掙錢~~"); } }
最后,final修飾的類是不能夠被繼承的。也就是說,如果一個類使用final修飾符,那么它是不能夠作為任何類的父類的。
例如:上面的Person類如果使用final修飾話,那么Children類就不能夠繼承Person類了哦。
總結,final修飾符出現主要作用是為了使相應的變量,對象或者方法一旦創建后,就不在發生任何改變。final修飾符比較經典的使用是
jdk中的String類,如果感興趣可以查看jdk的源碼。
此外給大家補充一個比較經典的例子(在閱讀下面的例子之前,請先弄明白上面的內容):
/** * 測試類 * @author 張浩 * @創建日期 2015-3-2 */ public class Test2{ public static void main(String[] args) { final StringBuffer VALUE=new StringBuffer("我考試好看100分,厲害不?"); System.out.println(VALUE); //VALUE的值發生了改變,請問下面的例子是否會報錯???? VALUE.append("不好意思,滿分150分哦~~SB"); System.out.println(VALUE); } }
首先說明上面不會報錯的。
對於final修飾的變量其對應值是不能夠發生改變的。需要注意的是VALUE這個變量名是存儲在棧中的,final修飾符不能夠改變指的是VALUE指向堆中的內存地址的值是不能夠改變的,因為StringBuffer可以在原來字符串的基礎上面動態的修改。所以上面是沒問題的
但是如果把StringBuffef換成為String的話,那樣的話就不行了(String一旦創建后是不能夠修改的哦)。
/** * 測試類 * @author 小浩 * @創建日期 2015-3-2 */ public class Test2{ public static void main(String[] args) { final String VALUE=new String("我考試好看100分,厲害不?"); System.out.println(VALUE); //下面是會報錯的哦... VALUE=VALUE+"不好意思,滿分150分哦~~SB"; System.out.println(VALUE); } }
2.finally
finally關鍵字一般也用在處理try{}catch{}finally{}的異常中,finally里面的內容一定會執行。
一般用在異常處理中資源的釋放。對於try{}catch{}finally{}的講解可以參考:
http://www.cnblogs.com/xiohao/p/4278405.html
3.finalize
finalize在垃圾回收中會使用。finalize是Object類中的方法。在垃圾回收器執行的時候會調用被回收對象的此方法。
用戶可以重寫此方法,已完成對其它資源的回收。如關閉文件等。JVM不保證此方法一定會執行哦~~~~
好吧,今天就先到這里吧~~