final,finally和finalize三者的區別和聯系


    對於初學者而言(當然也包括我)對於這三者真的不是很陌生,經常會看到它們。但對於三者之間的區別和聯系一直是懵懵懂~~

今天心情不錯,那就簡單總結一下它們幾個的區別和聯系吧。如果又不對的地方歡迎批評指正~~

    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不保證此方法一定會執行哦~~~~

     

      好吧,今天就先到這里吧~~

  

 

  

 

               

 

      

 

 

 

 

 

 

                   

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM