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

