最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java關鍵字final的實現原理分析

 更新時間:2024年01月16日 10:25:44   作者:user2025  
這篇文章主要介紹了Java關鍵字final的實現原理分析,在JDK8之前,如果在匿名內部類中需要訪問局部變量,那么這個局部變量一定是final修飾的,但final關鍵字可以省略,需要的朋友可以參考下

final的作用

靜態(tài)方法可以修飾類、靜態(tài)成員變量、普通成員變量、普通方法、局部變量

(1)final修飾類的作用:阻止當前類被繼承

(2)final修飾的方法的作用:阻止子類繼承和重寫【注意:子類可以重載該方法】

(3)final修飾的成員變量初始化后便不可用修改,基本數據類型不能修改值,引用數據類型實際是引用不能修改修改,但引用指向存儲對象空間中的內存可以被修改

final不能修飾抽象類

抽象類是用于被子類繼承的,和final修飾類的作用沖突

靜態(tài)方法沒有必要修飾靜態(tài)方法

靜態(tài)方法可以修飾靜態(tài)方法,但沒有必要,因為final也無法阻止子類申明相同簽名的的靜態(tài)方法。父類的靜態(tài)方法可以被子類繼承,不能被子類重寫,但子類可以申明相同同名的方法,父類的靜態(tài)方法只是被隱藏了而不是被重寫了。

匿名內部類訪問方法中的局部變量為什么必須被final修飾

  • 在JDK8之前,如果在匿名內部類中需要訪問局部變量,那么這個局部變量必須用final修飾符顯示修飾;
  • 在JDK8之前,如果在匿名內部類中需要訪問局部變量,那么這個局部變量一定是final修飾的,但final關鍵字可以省略

分析final修飾的變量如何傳入匿名內部類

public class Demo {
    public static void main(String[] args) {
        int a = 10;
        String b = "abc";
        Thread thread = new Thread(() -> {
            System.out.println(a + b);
        });
        thread.start();
    }
}

反編譯后的關鍵代碼如下:

在這里插入圖片描述

發(fā)現方法中的兩個局部變量,作為參數傳入了內部類中,事實上最符合反編譯代碼表述的是:

public class Demo.lambda$main$0 extends Thread {
	private int a;
	private String b;
	Demo.lambda$main$0(int a,String b) {
		this.a=a;
		this.b=b;
	}
	public void run() {
		System.out.println( a + b );
	}
}

final修飾的局部變量是作為匿名內部類構造器的參數傳入匿名內部類內部的

為啥需要final修飾局部變量

final修飾局部變量還是防止數據被修改,保證數據的一致性,對引用變量來說是引用地址的一致性,對基本類型來說就是值的一致性。

  • 局部變量通過匿名內部類的構造器的參數參入匿名類中,如果是基本數據,實際傳遞的是值,如果是引用數據類型,實際傳遞的是引用,匿名內部類中實際是存了局部變量的副本。
  • 匿名內部類中和方法中任意一處修改了,另一方都不受影響,這樣就會導致數據不一致,從而影響運行結果,所以需要final修飾?!咀⒁猓喝绻且脭祿愋停@里修改是指的引用,如果是修改引用數據類型的成員變量,實際上雙方是一致的,修改的是堆內存中的數據,而不是虛擬機棧中的】

在這里插入圖片描述

到此這篇關于Java關鍵字final的實現原理分析的文章就介紹到這了,更多相關final的實現原理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Boot與Kotlin處理Web表單提交的方法

    Spring Boot與Kotlin處理Web表單提交的方法

    本篇文章主要介紹了Spring Boot 與 Kotlin 處理Web表單提交的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • SpringBoot 集成 Jasypt 對數據庫加密以及踩坑的記錄分享

    SpringBoot 集成 Jasypt 對數據庫加密以及踩坑的記錄分享

    這篇文章主要介紹了SpringBoot 集成 Jasypt 對數據庫加密以及踩坑,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Spring簡明分析Bean作用域

    Spring簡明分析Bean作用域

    scope用來聲明容器中的對象所應該處的限定場景或者說該對象的存活時間,即容器在對象進入其 相應的scope之前,生成并裝配這些對象,在該對象不再處于這些scope的限定之后,容器通常會銷毀這些對象,這篇文章主要介紹了Spring中的Bean作用域,需要的朋友可以參考下
    2022-07-07
  • java連接SQL Server數據庫的方法

    java連接SQL Server數據庫的方法

    這篇文章主要為大家詳細介紹了java連接SQL Server數據庫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java9垃圾回收方法finalize() 原理解析

    Java9垃圾回收方法finalize() 原理解析

    這篇文章主要介紹了Java9垃圾回收方法finalize() 原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • java中a=a+1和a+=1的區(qū)別介紹

    java中a=a+1和a+=1的區(qū)別介紹

    這篇文章主要介紹了java中a=a+1和a+=1的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java開發(fā)技巧代碼寫的快且bug少的原因分析

    java開發(fā)技巧代碼寫的快且bug少的原因分析

    這篇文章主要為大家介紹了java開發(fā)中代碼寫的快且bug少的原因分析及技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • redis統(tǒng)計APP在線人數的實例

    redis統(tǒng)計APP在線人數的實例

    這篇文章主要介紹了redis統(tǒng)計APP在線人數的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Javaweb實現郵件發(fā)送

    Javaweb實現郵件發(fā)送

    這篇文章主要為大家詳細介紹了Javaweb實現郵件發(fā)送,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java開發(fā)者推薦的10種常用工具

    Java開發(fā)者推薦的10種常用工具

    這篇文章主要為大家詳細介紹了Java開發(fā)者推薦的10種常用工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評論

花垣县| 信丰县| 丰原市| 维西| 会同县| 蕲春县| 西藏| 郴州市| 乡城县| 罗定市| 阳春市| 怀远县| 微博| 建宁县| 西安市| 满城县| 满城县| 界首市| 清水河县| 塘沽区| 鲁甸县| 荣成市| 庆城县| 闽清县| 河池市| 前郭尔| 灌云县| 青神县| 滨州市| 威信县| 若羌县| 岳阳县| 根河市| 富宁县| 灯塔市| 克东县| 南安市| 房产| 体育| 阿克陶县| 嘉义县|