final-finally-finalize有什麼區別

 

1、final

1.final用於聲明屬性、方法和類,分別表示屬性不可變,方法不可覆蓋類和類不可能被繼承(不可能再派生出新的子類)。java

final屬性:被final修飾的變量不可變。程序員

1).引用不可變sql

2).對象不可變app

1.final在定義的時候初始化。socket

2.final成員變量能夠再初始化塊中初始化,不能在靜態初始化塊中初始化。函數

3.靜態final成員變量能夠在靜態初始化中初始化但不能夠在初始化塊中初始化。url

4.類的構造器中初始化,但靜態final成員變量不能夠在構造函數中初始化spa

public class finaltest {
public static void main(String[] args) {
final StringBuffer stringBuffer=new StringBuffer("hello");
   stringBuffer.append(" word");
   System.out.println(stringBuffer);
}

}

運行結果:hello word對象

public class finaltest {
public static void main(String[] args) {
final StringBuffer stringBuffer=new StringBuffer("hello");
       stringBuffer =new StringBuffer("hello word");
   System.out.println(stringBuffer);
}

}

編譯期間報錯。繼承

final方法:當一個方法聲明爲final時,該方法不容許任何子類重寫這個方法,但子類仍然可使用這個方法。

final參數:用來表示這個參數在函數內部不容許修改。

final類:當一個類被聲明爲final時,此類不能被繼承,全部方法都不能被重寫。

一個類既不能被聲明爲abstract,又被聲明爲final。

2、finally

finally做爲異常處理的一部分,他只能使用於try/catch語句中,而且附帶一個語句塊,表示這個語句塊最終必定被執行,常常使用與須要釋放資源的狀況下。

Connection conn;
Statement stmt;
try{
   conn=DriverMannager.getConnection(url,username,password);
   stmt=conn.createStatement();
   stmt.executeUpdate(sql);
   stmt.close();
   conn.close();
catch (Exception e) {
// TODO: handle exception
System.out.println(e);
}fianlly{
if(stmt!=NUll)
stmt.close();
if(conn!=NUll)
   conn.close();
}
}

3、finalize  

  finalize()是在java.lang.Object裏定義的,也就是說每個對象都有這麼個方法。這個方法在gc啓動,該對象被回收的時候被調用。其實gc能夠回收大部分的對象(凡是new出來的對象,gc都能搞定,通常狀況下咱們又不會用new之外的方式去建立對象),因此通常是不須要程序員去實現finalize的。 特殊狀況下,須要程序員實現finalize,當對象被回收的時候釋放一些資源,好比:一個socket連接,在對象初始化時建立,整個生命週期內有效,那麼就須要實現finalize,關閉這個連接。   使用finalize還須要注意一個事,調用super.finalize();

  一個對象的finalize()方法只會被調用一次,並且finalize()被調用不意味着gc會當即回收該對象,因此有可能調用finalize()後,該對象又不須要被回收了,而後到了真正要被回收的時候,由於前面調用過一次,因此不會調用finalize(),產生問題。 因此,推薦不要使用finalize()方法,它跟析構函數不同。

相關文章
相關標籤/搜索