Java面向?qū)ο笾甪inal關(guān)鍵字詳細(xì)解讀
一、基本介紹
final可以修飾類、屬性、方法
有以下需求可使用final:
①當(dāng)不希望類被繼承的時(shí)候,可以用final修飾
②當(dāng)不希望父類的某個(gè)方法被子類重寫時(shí),可以用final修飾
③當(dāng)不希望類的某個(gè)屬性的值被修改時(shí),可以使用final修飾
④當(dāng)不希望某個(gè)局部變量屬性被修改時(shí),可以使用final修飾
二、final使用注意事項(xiàng)和細(xì)節(jié)
1.final修飾的屬性又叫常量,一般用 XX_XX_XX來(lái)命名
2.final修飾的屬性在定義時(shí)必須賦初始值,并且以后不能再修改,賦值可以在以下位置之一:
①在定義時(shí)直接賦值
②在構(gòu)造器中
③在代碼塊中
3.如果final修飾的屬性是靜態(tài)的,則初始化的位置只能是:①在定義時(shí)直接賦值 ②在靜態(tài)代碼塊中,不能在構(gòu)造器中賦值
4.final類不能繼承,但是可以實(shí)例化對(duì)象
5.如果類不是final類,但是含有final方法,則該方法不能被重寫,但是可以被繼承
6.一般來(lái)說,如果一個(gè)類已經(jīng)是final類了,就沒有必要再將方法修飾成final方法
7.final 和 static 往往搭配使用,效率更高,搭配使用不會(huì)導(dǎo)致類加載,底層編譯器做了優(yōu)化處理
8.包裝類(Integer,Double,F(xiàn)loat,Boolean等都是final),String也是final
示例
public class FinalDetail01 { public static void main(String[] args) { CC cc = new CC(); new EE().cal(); } } class AA{ /* 1. 在定義時(shí)直接賦值 2. 在構(gòu)造器中 3. 在代碼塊中 */ public final double TAX_RATE1 = 0.08; //在定義時(shí)直接賦值 public final double TAX_RATE2; public final double TAX_RATE3; public AA() { //在構(gòu)造器中賦值 TAX_RATE2 = 1.1; } { //在代碼塊中賦值 TAX_RATE3 = 8.8; } } class BB { /* 如果final修飾的屬性是靜態(tài)的,則初始化的位置只能是 1.在定義時(shí) 2.在靜態(tài)代碼塊中 不能再構(gòu)造器中賦值 */ public static final double TAX_RATE1 = 99.9; public static final double TAX_RATE2; static { TAX_RATE2 = 88.8; } } //final類不能繼承,但是可以實(shí)例化對(duì)象 final class CC { } //如果類不是final類,但是含有final類方法,則該方法不能重寫,但是可以被繼承 //即仍然遵守繼承機(jī)制 class DD { public final void cal(){ System.out.println("cal() 方法..."); } } class EE extends DD{ }
public class FinalDetail02 { public static void main(String[] args) { System.out.println(BBB.num); //包裝類,String,是final類,不能被繼承 //Double } } final class AAA { //一般來(lái)說,如果一個(gè)類已經(jīng)是final類了,就沒必要再將方法修飾成final方法 //public final static void cry(){ } } //final 和 static 往往搭配使用,效率更高 class BBB{ public final static int num = 1000; static { System.out.println("BBB靜態(tài)代碼塊被執(zhí)行"); } }
到此這篇關(guān)于Java面向?qū)ο笾甪inal關(guān)鍵字詳細(xì)解讀的文章就介紹到這了,更多相關(guān)Java的final關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java.net.http.HttpClient使用示例解析
這篇文章主要為大家介紹了java.net.http.HttpClient使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Java字符串處理全解析(String、StringBuilder與StringBuffer)
這篇文章主要介紹了Java字符串處理全解析(String、StringBuilder與StringBuffer),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-04-04一文帶你學(xué)會(huì)Java中ScheduledThreadPoolExecutor使用
ScheduledThreadPoolExecutor是Java并發(fā)包中的一個(gè)類,同時(shí)也是?ThreadPoolExecutor的一個(gè)子類,本文主要為大家介紹一下ScheduledThreadPoolExecutor使用,需要的可以參考下2024-12-12Spring Boot 整合mybatis 與 swagger2
之前使用springMVC+spring+mybatis,總是被一些繁瑣的xml配置,還經(jīng)常出錯(cuò),下面把以前的一些ssm項(xiàng)目改成了spring boot + mybatis,相對(duì)于來(lái)說優(yōu)點(diǎn)太明顯了,具體內(nèi)容詳情大家通過本文學(xué)習(xí)吧2017-08-08response.sendRedirect()實(shí)現(xiàn)重定向(頁(yè)面跳轉(zhuǎn))
在Java web開發(fā)中,使用response.sendRedirect()可實(shí)現(xiàn)重定向功能。本文將介紹如何使用該方法進(jìn)行頁(yè)面跳轉(zhuǎn),以及該方法的使用場(chǎng)景和注意事項(xiàng),感興趣的可以了解一下2023-04-04JDBC+GUI實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了JDBC+GUI實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02如何使用Spring?integration在Springboot中集成Mqtt詳解
MQTT是多個(gè)客戶端通過一個(gè)中央服務(wù)器傳遞信息的多對(duì)多協(xié)議,能高效地將信息分發(fā)給一個(gè)或多個(gè)訂閱者,下面這篇文章主要給大家介紹了關(guān)于如何使用Spring?integration在Springboot中集成Mqtt的相關(guān)資料,需要的朋友可以參考下2023-02-02