国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - 詳解Java編程中final,finalize,finally的區別

詳解Java編程中final,finalize,finally的區別

2020-01-20 11:17注子 JAVA教程

這篇文章主要介紹了詳解Java編程中final,finalize,finally的區別,這個在Java面試題中簡直是太常見了...需要的朋友可以參考下

final:
final可以讓你控制你的成員、方法或者是一個類是否可被覆寫或繼承等功能,這些特點使final在Java中擁有了一個不可或缺的地位,也是學習Java時必須要知道和掌握的關鍵字之一。
final成員
當你在類中定義變量時,在其前面加上final關鍵字,那便是說,這個變量一旦被初始化便不可改變,這里不可改變的意思對基本類型來說是其值不可變,而對于對象變量來說其引用不可再變。其初始化可以在兩個地方,一是其定義處,二是在構造函數中,兩者只能選其一。
下面程序很簡單的演示了final的常規用法:

?
1
2
3
4
5
6
7
8
public class Test{
 final int t = 1; // 在定義時給值
 // 或者(兩者只能選其一)
 final int t;
 public Test(){
  t = 3; // 構造時給值
}
}

還有一種用法是定義方法中的參數為final,對于基本類型的變量,這樣做并沒有什么實際意義,因為基本類型的變量在調用方法時是傳值的,也就是說你可以在方法中更改這個參數變量而不會影響到調用語句,然而對于對象變量,卻顯得很實用,因為對象變量在傳遞時是傳遞其引用,這樣你在方法中對對象變量的修改也會影響到調用語句中的對象變量,當你在方法中不需要改變作為參數的對象變量時,明確使用final進行聲明,會防止你無意的修改而影響到調用方法。
另外方法中的內部類在用到方法中的參變量時,此參變也必須聲明為final才可使用,如下代碼所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test{
 void print(final String str){
  class InnerTest{
   InnerTest (){
    System.out.println(str);
   }
  }
  InnerTest it=new InnerTest ();
 }
 public static void main(String[] args){
  Test test=new Test();
  test.print("Hello word!!!");
 }
}

final方法
將方法聲明為final那有兩個原因,第一就是說明你已經知道這個方法提供的功能已經滿足你要求,不需要進行擴展,并且也不允許任何從此類繼承的類來覆寫這個方法,但是繼承仍然可以繼承這個方法,也就是說可以直接使用。第二就是允許編譯器將所有對此方法的調用轉化為inline(行內)調用的機制,它會使你在調用final方法時,直接將方法主體插入到調用處,而不是進行例行的方法調用,例如保存斷點,壓棧等,這樣可能會使你的程序效率有所提高,然而當你的方法主體非常龐大時,或你在多處調用此方法,那么你的調用主體代碼便會迅速膨脹,可能反而會影響效率,所以你要慎用final進行方法定義。
final類
當你將final用于類身上時,你就需要仔細考慮,因為一個final類是無法被任何人繼承的,那也就意味著此類在一個繼承樹中是一個葉子類,并且此類的設計已被認為很完美而不需要進行修改或擴展。對于final類中的成員,你可以定義其為final,也可以不是final。而對于方法,由于所屬類為final的關系,自然也就成了final型的。你也可以明確的給final類中的方法加上一個final,但這顯然沒有意義。

finally:
finally 關鍵字是對 Java 異常處理模型的最佳補充。 finally 結構使代碼總會執行,而不管有無異常發生。使用 finally 可以維護對象的內部狀態,并可以清理非內存資源。如果沒有 finally,您的代碼就會很費解。例如,下面的代碼說明,在不使用 finally 的情況下您如何編寫代碼來釋放非內存資源:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void writeFile(String filePath, String fileName, String args)
   throws IOException
 
 {
 
  FileWriter fw = new FileWriter(filePath + fileName);
  try {
 
   fw.write(args);
  } catch (IOException e) {
   //1
   fw.close();
   throw e;
  }
//2
  fw.close();
 }

這段代碼創建了一個FileWriter object,并調用 write 方法。在退出該方法之前,您必須關閉FileWriter object,以避免資源漏洞。為了完成這一任務,我們在 //2 處調用 close,它是該方法的最后一條語句。但是,如果 try 塊中發生一個異常會怎么樣呢?在這種情況下,//2 處的 close 調用永遠不會發生。因此,您必須捕獲這個異常,并在重新發出這個異常之前在 //1 處插入對 close 的另一個調用。這樣就可以確保在退出該方法之前關閉FileWriter object。這樣編寫代碼既麻煩又易于出錯,但在沒有 finally 的情況下這是必不可少的。有了 finally,前面的代碼就可以重寫為以下的形式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void writeFile(String filePath, String fileName, String args)
   throws IOException
 
 {
 
  FileWriter fw = new FileWriter(filePath + fileName);
  try {
 
   fw.write(args);
  } catch (IOException e) {
   throw e;
  } finally {
 
   fw.close();
  }
 }

finally 塊確保 close 方法總被執行,而不管 try 塊內是否發出異常。因此,可以確保在退出該方法之前總會調用 close 方法。這樣您就可以確信FileWriter object被關閉并且您沒有泄漏資源。

finalize:

  根據Java語言規范,JVM保證調用finalize函數之前,這個對象是不可達的,但是JVM不保證這個函數一定會被調用。另外,規范還保證finalize函數最多運行一次。

  通常,finalize用于一些不容易控制、并且非常重要資源的釋放,例如一些I/O的操作,數據的連接。這些資源的釋放對整個應用程序是非常關鍵的。在這種情況下,程序員應該以通過程序本身管理(包括釋放)這些資源為主,以finalize函數釋放資源方式為輔,形成一種雙保險的管理機制,而不應該僅僅依靠finalize來釋放資源。

 

總結

final— 修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
 
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(如果有的話)。 

 

finalize— 方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。

延伸 · 閱讀

精彩推薦
320
主站蜘蛛池模板: 成人a视频 | 一级片在线观看 | 天天爽夜夜爽夜夜爽精品视频 | 精精国产xxxx视频在线播放7 | 中文字幕高清 | 日韩一区二区在线播放 | 久久9999| 久久机热| 国产高清av在线一区二区三区 | 国产精品自拍系列 | 美女网站黄视频 | 亚洲第一av网站 | 国产婷婷精品av在线 | 国产福利电影 | 成人刺激视频在线 | 成人精品一区 | 日韩免费电影 | 欧美在线视频网站 | www.av在线.com | 久久久久国产精品免费免费搜索 | 日韩成人一区 | 国产欧美精品区一区二区三区 | 成年网站| 少妇精品久久久久久久久久 | 精品国产一区二区三区小蝌蚪 | 欧美人成在线观看 | 全毛片 | 日韩在线一区二区 | 日本精品免费 | 欧美一级在线观看 | 色综合网在线 | 日本 欧美 国产 | 亚洲成人一区二区三区在线观看 | 黄色裸体网站 | 午夜小视频在线观看 | 欧美综合一区二区三区 | 黄色一级片免费 | 亚洲高清视频在线 | 日韩精品dvd | 香蕉久久一区二区不卡无毒影院 | 91在线高清观看 |