final關鍵字有什么作用

final關鍵字在Java中用于聲明變量、方法和類,表示它們的值或行為不能被修改。

  • 被 final 修飾的類不可以被繼承

  • 被 final 修飾的方法不可以被重寫

  • 被 final 修飾的變量不可變,被 final 修飾的變量必須被顯式第指定初始值,還得注意的是,這里的不可變指的是變量的引用不可變,不是引用指向的內容的不可變。

修飾變量時:當一個變量被聲明為final時,它就變成了常量,其值一旦被初始化后就不能被改變。這對于創建不可變的類屬性或局部變量非常有用,可以確保變量的值在整個程序運行期間保持不變。這個的不可變指的是變量的引用不可變,不是引用的內容不可變

final StringBuilder sb = new StringBuilder("abc");
sb.append("d");
System.out.pirntln(sb); //abcd


修飾方法時:當一個方法被聲明為final時,它不能被子類覆蓋(重寫)。這意味著父類的final方法會阻止子類改變該方法的行為。通常,這是為了確保某些關鍵的方法在所有子類中保持一致性。


修飾類時:當一個類被聲明為final時,它不能被繼承。這是為了防止其他類通過繼承來修改這個類的行為。例如,Java中的String類就是一個final類,這保證了字符串的不可變性。


final、finally、finalize的區別


final、finally和finalize在Java中有著各自獨特的用途和含義。具體如下:

final:
修飾變量:當用于變量時,final關鍵字表明該變量是不可變的,即一旦賦值后,其值就不能被更改。
修飾方法:當用于方法時,final關鍵字表示該方法不能被子類覆蓋(重寫),確保了方法的行為在繼承結構中保持一致。
修飾類:當用于類時,final關鍵字意味著這個類不能被其他類繼承,例如String類就是一個final類,這有助于保證其不可變性。


finally:
異常處理:finally是異常處理結構的一部分,它屬于try-catch語句的補充。無論try塊中是否拋出異常,finally塊中的代碼都會被執行。這對于資源的清理工作非常重要,如關閉文件流或釋放網絡連接等。


finalize:
垃圾收集:finalize是Object類的一個方法,它在垃圾收集器準備回收對象所占用的內存之前被調用。這個方法允許進行一些清理工作,如釋放非內存資源。然而,由于依賴于垃圾收集器的不確定性,不推薦依賴finalize方法進行資源清理。


綜上所述,final關鍵字主要用于限制修改,finally用于確保代碼執行,而finalize與垃圾收集相關。它們在Java編程中扮演著不同的角色,對于理解Java語言的內存管理、繼承和異常處理機制至關重要。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715495.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715495.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715495.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習助手:借助AI大模型,學習更高效!

在當今的數字時代,人工智能(AI)的崛起已經徹底改變了我們獲取信息、處理數據以及學習新知識的方式。AI大模型,特別是如OpenAI開發的GPT-4這類先進的技術,已成為學習和教育領域的一大助力。本文旨在探索如何借助AI大模型…

了解 SYN Flood 攻擊

文章目錄: 什么是 SYN Flood 攻擊?對網絡的影響SYN Flood 發生的跡象如何解決? 什么是 SYN Flood 攻擊? SYN Flood(SYN 洪水攻擊)是一種常見的分布式拒絕服務(DDoS - Distributed Denial of Se…

購買騰訊云服務器請先領取代金券,2024騰訊云優惠

騰訊云優惠代金券領取入口共三個渠道,騰訊云新用戶和老用戶均可領取8888元代金券,可用于云服務器等產品購買、續費和升級使用,阿騰云atengyun.com整理騰訊云優惠券(代金券)領取入口、代金券查詢、優惠券兌換碼使用方法…

FL Studio選購指南:新手小白應該選擇哪個版本FL Studio?

很多打算入手正版FL Studio的新手朋友都會糾結一個問題:哪個版本的FL Studio更適合我,到底應該入手哪一款FL Studio?本文會介紹每個版本之間的差異點,并帶大家選擇適合自己的FL Sudio版本。 FL Studio全版本 在選購前有一些小知識…

UE5常見問題處理筆記

一、C工程中的文件出現很多頭文件找不到,比如:#include CoreMinimal.h文件提示找不到。 解決方法:在UE編輯器中選擇菜單Tools -> Refresh Visual Studio Project。 二、莫名其妙的編譯錯誤。 解決方法,找到工程根目錄下的Bi…

GO流程控制

1. if else 在Go語言中,關鍵字if是用于測試某個條件(布爾型或邏輯型)的語句,如果該條件成立,則會執行 if 后由大括號{}括起來的代碼塊,否則就忽略該代碼塊繼續執行后續的代碼。 if condition {// 條件為真…

qwen.cpp

1、Release模式 git clone --recursive https://github.com/QwenLM/qwen.cpp && cd qwen.cpp git submodule update --init --recursive python3 qwen_cpp/convert.py -i /mnt/workspace/qwen.cpp/Qianwen/qwen/Qwen-7B-Chat -t q4_0 -o qwen7b-ggml.bincmake -B buil…

什么是MAC地址? win10電腦查看MAC地址的多種方法

您是否知道連接到家庭網絡的每件硬件都有自己的身份?正如每個設備都分配有自己的 IP 地址一樣,每個硬件都有一個唯一的網絡標識符。 該標識符稱為MAC 地址。MAC 代表媒體訪問控制。您可能需要 MAC 地址來解決網絡問題或配置新設備。在 Windows 中查找您…

three.js 點乘判斷平行向量方向異同

效果&#xff1a; 代碼&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div><div>判斷的前提是兩個向量平行<el-button click"judge"…

一文掌握大模型提示詞技巧:從戰略到戰術

作者&#xff1a;明明如月學長&#xff0c; CSDN 博客專家&#xff0c;大廠高級 Java 工程師&#xff0c;《性能優化方法論》作者、《解鎖大廠思維&#xff1a;剖析《阿里巴巴Java開發手冊》》、《再學經典&#xff1a;《Effective Java》獨家解析》專欄作者。 熱門文章推薦&am…

pytest 的 request fixture:實現個性化測試需求

在前文章中&#xff0c;我們看到pytest_repeat源碼中有這樣一段 pytest.fixture def __pytest_repeat_step_number(request):marker request.node.get_closest_marker("repeat")count marker and marker.args[0] or request.config.option.count......看到參數為r…

Stable Cascade又升級了,現在只需要兩個模型

Stable Cascade這個模型&#xff0c;大家如果還有印象的話&#xff0c;是需要下載三個模型的&#xff0c;分別是Stage_a,Stage_b和Stage_c,如果全都下載下來&#xff0c;需要20多個G&#xff0c;但是最近使用ComfyUI做嘗試的時候&#xff0c;發現官方的案例中已經沒有用到單獨的…

手擼AI-2: 設置腳本參數與設置隨機種子

一.設置腳本參數 1. 代碼示例 在完整的模型訓練代碼中,我們時常能看到通過python train.py --params 來訓練模型,這也是在無UI界面的服務器上訓練模型最主要的方法,因此使用腳本并設置腳本參數尤為重要. 我們通常會將腳本設置的代碼寫在config,py中,再用訓練主函數main.py進行…

P4715 【深基16.例1】淘汰賽題解

題目 有&#xff08;n≤7&#xff09;個國家參加世界杯決賽圈且進入淘汰賽環節。已經知道各個國家的能力值&#xff0c;且都不相等。能力值高的國家和能力值低的國家踢比賽時高者獲勝。1號國家和2號國家踢一場比賽&#xff0c;勝者晉級。3號國家和4號國家也踢一場&#xff0c;…

C++用臨時對象構造新對象

C用臨時對象構造新對象 //用臨時對象構造同類型的新對象&#xff0c;該臨時對象不產生&#xff1b; // 直接用生成臨時對象的方法構造新對象&#xff0c;這是編譯器對代碼的優化&#xff0c;效率更高 #include<iostream> using namespace std; class MyClass { public:…

Golang 調度器 GPM模型

Golang 調度器 GPM模型 1 多進程/線程時代有了調度器需求 在多進程/多線程的操作系統中&#xff0c;就解決了阻塞的問題&#xff0c;因為一個進程阻塞cpu可以立刻切換到其他進程中去執行&#xff0c;而且調度cpu的算法可以保證在運行的進程都可以被分配到cpu的運行時間片。這…

chatgpt:還有哪些人工智能和科技值得關注?

今天&#xff0c;很多人的目光都被ChatGPT吸引&#xff0c;其實&#xff0c;人工智能的范圍很大&#xff0c;遠不止ChatGPT或者其他自然語言的處理工具。所以說不管ChatGPT的結果如何&#xff0c;人工智能依然是未來。 那么在ChatGPT之外&#xff0c;還有沒有什么值得關注的人…

在網頁上踢球:打造我自己的python(Django)足球網站

足球不僅僅是球場上的90分鐘。它是一個不斷發展的故事&#xff0c;一個全球球迷社群的粘合劑&#xff0c;一個數據和熱情交織的世界。作為一名開發者和球迷&#xff0c;我決定將這兩大愛好結合起來&#xff0c;用 Django 打造一個足球網站&#xff0c;讓球迷們能夠追蹤他們最愛…

Unity AI生成全景圖制作天空盒

現在的AI很強大。 其中&#xff0c;有這樣一個網站&#xff0c;通過輸入提示詞&#xff0c;選擇某種風格就可以為你生成360全景圖。 網頁鏈接 一、生成全景圖 打開網頁后&#xff0c;如圖&#xff1a; 勾選&#xff0c;點擊CONFIRM。 點擊GET STARTED&#xff0c;進入主頁。…

機器人定位——里程計Odom

根據兩個車輪的輪速去估計當前的車的定位 我將提供一個更詳細完整的模型來描述兩輪差速機器人的里程計數。 我們假設機器人的兩個輪子的半徑分別為r1和r2&#xff0c;兩個輪子的轉速分別為ω1和ω2。機器人的輪距為L&#xff0c;指的是兩個輪子中心之間的距離。 首先&#x…