一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - JAVA教程 - 簡單談談java中final,finally,finalize的區別

簡單談談java中final,finally,finalize的區別

2020-04-27 12:20hebedich JAVA教程

Java中final、finally、finalize的區別與用法,困擾了不少學習者,下面我們就這個問題進行一些探討,希望對大家的學習有所幫助。

(1) final:修飾符(關鍵字),如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載

(2) finally:在異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally塊(如果有的話)。

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

上面也許有點含糊不清,我們更加深入的來探討下

一、性質不同

(1)final為關鍵字;

(2)finalize()為方法;

(3)finally為為區塊標志,用于try語句中;

二、作用

(1)final為用于標識常量的關鍵字,final標識的關鍵字存儲在常量池中(在這里final常量的具體用法將在下面進行介紹);

(2)finalize()方法在Object中進行了定義,用于在對象“消失”時,由JVM進行調用用于對對象進行垃圾回收,類似于C++中的析構函數;用戶自定義時,用于釋放對象占用的資源(比如進行I/0操作);

(3)finally{}用于標識代碼塊,與try{}進行配合,不論try中的代碼執行完或沒有執行完(這里指有異常),該代碼塊之中的程序必定會進行;

三、final詳解

1定義變量

1.1  final定義基本類型變量時,要求變量初始化必須在聲明時或者構造函數中,不能用于其它地方。該關鍵字定義的常量,除了初始化階段,不能更改常量的值。

1.2  final定義對象的引用,該引用的初始化與定義常量時的要求一致;該關鍵字定義的對象內容可以改變,但是引用指向的地址不能改變;

2定義參數

如果傳入該參數定義的變量時,方法不能對該參數內容進行修改(錯誤),與定義變量的修改規則相同;java方法中傳遞基本類型時是傳值的,java方法對于對象的傳遞是傳參的;<歸根結底,java中方法的傳遞是依靠傳遞“副本”:對于基本類型,首先建立一個Copy,并將傳入的值賦值給Copy,然后對Copy進行操作;對于對象類型,首先建立一個引用Copy,并將傳入的對象引用賦值給Copy>

比如:method(final int test);

有些書上說,這里final定義參數,尤其是對象的參數很有作用,不能在方法內對于對象的內容進行改變,這樣的說法是錯誤的!原來我也認為這樣有些函數式編程的特點,不能對于對象的內容進行修改該,這里依舊可以對對象的內容進行修改。

??定義該參數有什么用??

String天生就是final類型的!

3定義方法

(1)使用final關鍵字定義的方法,不能被子類繼承;

(2)允許編譯器將所有對此方法的調用轉化為inline(行內)行為,即可以將此方法直接復制在調用處,而不是進行例行的方法調用(保存斷點、壓棧),這樣會使程序的效率升高。但是---------如果過多的話,這樣會造成代碼膨脹,反而會影響效率,所以該方法要慎用。。

4定義類

一個任何final類無法被任何人繼承,這也就意味著此類在一個繼承樹中是一個葉子類,并且此類被認為是很完美的,不需要進行任何修改(總之是不推薦使用)

延伸 · 閱讀

精彩推薦
  • JAVA教程Java開發者結合Node.js編程入門教程

    Java開發者結合Node.js編程入門教程

    這篇文章主要介紹了Java開發者結合Node.js編程入門教程,我將先向您展示如何使用Java EE創建一個簡單的Rest服務來讀取 MongoDB數據庫。然后我會用node.js來實現...

    java教程網4922019-11-28
  • JAVA教程Java數據導入功能之讀取Excel文件實例

    Java數據導入功能之讀取Excel文件實例

    這篇文章主要介紹了Java數據導入功能之讀取Excel文件實例,本文給出了jar包的下載地址以及讀取Excel文件的代碼實例,需要的朋友可以參考下 ...

    junjie1662019-12-24
  • JAVA教程java解析xml之sax解析xml示例分享

    java解析xml之sax解析xml示例分享

    SAX基于事件的解析,解析器在一次讀取XML文件中根據讀取的數據產生相應的事件,由應用程序實現相應的事件處理邏輯,即它是一種“推”的解析方式;這...

    java技術網1932019-10-27
  • JAVA教程Java線程的控制詳解

    Java線程的控制詳解

    這篇文章主要介紹了Java中的join線程、后臺線程、線程睡眠、線程讓步以及線程的優先級,非常的詳細,希望能對大家有所幫助 ...

    hebedich3582019-12-04
  • JAVA教程java利用htmlparser獲取html中想要的代碼具體實現

    java利用htmlparser獲取html中想要的代碼具體實現

    這篇文章主要介紹了java利用htmlparser獲取html中想要的代碼具體實現,需要的朋友可以參考下 ...

    java教程網4402019-11-06
  • JAVA教程淺談Java方法的重載

    淺談Java方法的重載

    方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。調用重載方法時,Java編譯器能通過檢查調用的方法的...

    hebedich3702020-04-17
  • JAVA教程java利用冒泡排序對數組進行排序

    java利用冒泡排序對數組進行排序

    這篇文章主要介紹了java利用冒泡排序對數組進行排序的方法,實例分析了冒泡排序的概念與java實現方法,以及java操作數組的相關技巧,需要的朋友可以參考下...

    一羽清寧4462019-12-18
  • JAVA教程將Java程序與數據庫進行連接的操作方法

    將Java程序與數據庫進行連接的操作方法

    這篇文章主要介紹了將Java程序與數據庫進行連接的操作方法,是Java入門學習中的基礎知識,需要的朋友可以參考下 ...

    goldensun2602020-01-09
主站蜘蛛池模板: 奇米影视777最新在线 | 日韩欧美一级大片 | 交换性关系中文字幕6 | 午夜dj免费视频观看社区 | 四虎精品成人免费影视 | 精品欧美一区二区在线观看欧美熟 | 女子张腿让男人桶免费 | 久久成人a毛片免费观看网站 | 美女和男人差差 | 国产思妍小仙女一二区 | 午夜熟女插插XX免费视频 | 亚洲天堂视频在线观看 | 精东影业传媒全部作品 | 日本高清在线看 | 国产午夜精品福利久久 | 免费国产在线视频 | 日本网络视频www色高清免费 | 免费aⅴ片 | 久久视频这有精品63在线国产 | 色综合久久丁香婷婷 | 午夜伦理电影在线观免费 | 国产成人啪精品午夜在线播放 | 古装一级毛片 | 亚洲精品色婷婷在线影院麻豆 | 成人免费一区二区三区在线观看 | 含羞草传媒网站免费进入欢迎 | 99国产高清久久久久久网站 | 99re视频精品全部免费 | tube性睡觉hd| 草草免费观看视频在线 | 国产免费精彩视频 | 激情艳妇之性事高h | 第一国内永久免费福利视频 | 精品国产线拍大陆久久尤物 | 欧美成人tv在线观看免费 | 欧美xxxxx九色视频免费观看 | 狠狠色婷婷狠狠狠亚洲综合 | 午夜AV亚洲一码二中文字幕青青 | 国产成人精品日本亚洲网站 | 俄罗斯大白屁股 | 欧美久在线观看在线观看 |