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)說(shuō),如果一個(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)說(shuō),如果一個(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)文章
提升網(wǎng)絡(luò)請(qǐng)求穩(wěn)定性HttpClient的重試機(jī)制深入理解
這篇文章主要為大家介紹了提升網(wǎng)絡(luò)請(qǐng)求穩(wěn)定性HttpClient的重試機(jī)制深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
SpringMVC請(qǐng)求參數(shù)別名設(shè)置方式
文章介紹了SpringMVC中請(qǐng)求參數(shù)的別名設(shè)置方法,通常,接收參數(shù)時(shí)要求參數(shù)名一致,通過(guò)@RequestParam注解的value屬性,可以為參數(shù)設(shè)置別名,實(shí)現(xiàn)參數(shù)名不一致時(shí)的準(zhǔn)確接收2025-10-10
Java獲取當(dāng)前時(shí)間的時(shí)間戳(13位和10位)
本文主要介紹了Java獲取當(dāng)前時(shí)間的時(shí)間戳(13位和10位),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
SpringBoot之ApplicationRunner解析(spring容器啟動(dòng)完成執(zhí)行的類)
這篇文章主要介紹了SpringBoot之ApplicationRunner解析(spring容器啟動(dòng)完成執(zhí)行的類),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
解決tomcat啟動(dòng)時(shí)報(bào)Junit相關(guān)錯(cuò)誤java.lang.ClassNotFoundException:
這篇文章主要介紹了解決tomcat啟動(dòng)時(shí)報(bào)Junit相關(guān)錯(cuò)誤java.lang.ClassNotFoundException: org.junit.Test問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
Springboot源碼 AbstractAdvisorAutoProxyCreator解析
這篇文章主要介紹了Springboot源碼 AbstractAdvisorAutoProxyCreator解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

