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

Java基礎教程之final關鍵字淺析

 更新時間:2019年06月30日 10:07:11   作者:工匠初心  
這篇文章主要給大家介紹了關于Java基礎教程之final關鍵字的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

前面在講解String時提到了final關鍵字,本文將對final關鍵字進行解析。

static和final是兩個我們必須掌握的關鍵字。不同于其他關鍵字,他們都有多種用法,而且在一定環(huán)境下使用,可以提高程序的運行性能,優(yōu)化程序的結構。下面我們來了解一下final關鍵字及其用法。

final從總體上來說是“不可變的”,可用于修改類、方法、變量。

一. final類

final修飾的類,該類不能被繼承。當你確認一個類永遠不會被繼承或不想被繼承,那么就可以用final修飾。

同樣,對于接口(interface)和抽象類(abstract Class),其本就是為了“多態(tài)”而設計,自然無法用final關鍵字修飾

final類中的成員方法默認也被隱式指定為final方法。

二. final方法

final修飾的方法不可被重寫。

例子:

/**
 * 父類
 * @author LH
 */
public class FinalDemo1 {
 public final void test() {
  
 }
}

三. final變量

final變量包括成員變量和局部變量。變量類型包括基本數據類型、對象。

通過final修飾局部基本類型變量(及其包裝類),數值一經初始化(可以定義時初始化,也可以在使用前初始化)不可改變。如:

final int a = 0;
a = 1;//報錯
final int b;
b = 1;//編譯通過

通過final修飾局部引用類型變量時,其引用的對象(內存地址)(可以定義時初始化,也可以在使用前初始化)不可改變,但對象中存放的數據可以改變

public static void main(String[] args) {
 final String str1 = "helloWorld";
 str1 = "helloChina";//編譯出錯,String的不可變性,此處返回的是新的對象引用。

 final StringBuilder sb = new StringBuilder("hello");
 sb.append("world");//編譯通過

 sb = new StringBuilder("China");//編譯出錯
}

final修飾的成員變量必須在定義的時候直接初始化,否則會編譯出錯

public class FinalDemo1 {
 public final int age;//final修飾的基本類型,編譯出錯
 public final int age1 = 20;//final修飾的基本類型,編譯通過
 public final StringBuilder address;// final修飾的引用類型,編譯出錯
 public final StringBuilder address1 = new StringBuilder("中國");//final修飾的引用類型,編譯通過
}

那么final變量與普通變量之間到底有何區(qū)別,看下面的例子

public static void main(String[] args) {
 String str0 = "helloWorldChina";
 String str1 = "helloWorld";
 String str3 = str1 + "China";
 System.out.println(str0 == str3);//false
 
 final String str2 = "helloWorld";
 String str4 = str2 + "China";
 System.out.println(str0 == str4);//true
 
 final String str5;
 str5 = "helloWorld";
 String str6 = str5 + "China";
 System.out.println(str0 == str6);//false
}

str0 == str3運行結果為false,這是因為通過“+”生成了一個新的字符串對象,返回的引用地址和str0不再一樣,這在《Java基礎(三) String深度解析》中有講解。

那么str0 == str4的執(zhí)行結果為什么是true?

通過final修飾的變量,如果在編譯期都可以知道確切值(定義變量的時候就初始化),那么在編譯器會將其當做常量使用,所有用到該變量的地方就相當于直接使用該常量,String str4 = str2 + "China" 在編譯期間都已經合并處理成String str4 = "helloWorldChina",因此str0與str4引用了常量池中同一個字符串字面量的地址,故而結果為true。

而str0 == str6的執(zhí)行結果為false也很好理解

str5在編譯期并不知道確切值,而是在使用之前才進行初始化,因此編譯器無法事先進行合并處理,str6通過“+”生成了一個新的字符串對象,返回的引用地址和str0也不再一樣。

而針對基本數據類型來說定義為final變量與普通變量,比較結果來說并無差異

public static void testint(){
 int int0 = 8; 
 final int int1; 
 int1 = 4; 
 int int2 = int1 + 4; 
 System.out.println(int2 == int0);//true
}

因為基本數據類型并不存在引用傳遞的概念,基本類型變量也是字面常量,所以對基本類型的操作都是直接對值的操作,和引用不一樣,比較的并非地址。

四. 總結

本文主要對final關鍵字的原理進行了講解,同時對其基本用法進行了說明,包括final修飾的類,final修飾的方法和final修飾的變量,另外文中String變量通過==比較只是為了更加清晰的說明final原理,實際應用場景比較的時候還是用equals()方法,final也經常和static配合使用作為“全局常量”,若有不對之處,請批評指正,望共同進步,謝謝!

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • 使用Java實現壓縮文件夾并打包下載

    使用Java實現壓縮文件夾并打包下載

    這篇文章主要為大家詳細介紹了如何使用Java實現壓縮文件夾并打包下載,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • Spring中的JdbcTemplate詳細解析

    Spring中的JdbcTemplate詳細解析

    這篇文章主要介紹了Spring中的JdbcTemplate詳細解析,JdbcTemplate是Spring框架中提供的一個對象,是對原始繁瑣的Jdbc API對象的簡單封裝,Spring框架為我們提供了很多的操作模板類,需要的朋友可以參考下
    2024-01-01
  • maven pom中內置變量及引用的實現

    maven pom中內置變量及引用的實現

    maven其實有很多內置變量供開發(fā)著在開發(fā)中使用,本文主要介紹了maven pom中內置變量及引用的實現,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • JVM系列之String.intern的性能解析

    JVM系列之String.intern的性能解析

    這篇文章主要介紹了JVM系列之String.intern的性能解析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • kotlin快速入門之標準函數與靜態(tài)方法

    kotlin快速入門之標準函數與靜態(tài)方法

    學完了Kotlin的基礎知識,是時候來來學習 Kotlin的標準函數和靜態(tài)方法了,下面這篇文章主要給大家介紹了關于kotlin快速入門之標準函數與靜態(tài)方法的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • SpringBoot項目中jar發(fā)布獲取jar包所在目錄路徑的最佳方法

    SpringBoot項目中jar發(fā)布獲取jar包所在目錄路徑的最佳方法

    在開發(fā)過程中,我們經常要遇到上傳圖片、word、pdf等功能,但是當我們把項目打包發(fā)布到服務器上時,對應的很多存儲路徑的方法就會失效,下面這篇文章主要給大家介紹了關于SpringBoot項目中jar發(fā)布獲取jar包所在目錄路徑的相關資料
    2022-07-07
  • SpringBoot無法識別bootstrap.yml小綠葉問題的解決辦法

    SpringBoot無法識別bootstrap.yml小綠葉問題的解決辦法

    一般單獨使用?Spring?Boot?時,bootstrap.yml?文件一般是不會生效的,也就是沒有小綠葉圖標,本文給大家介紹了SpringBoot無法識別bootstrap.yml小綠葉問題的解決辦法,文中給出了兩種解決方案,需要的朋友可以參考下
    2024-07-07
  • 深度源碼解析Java 線程池的實現原理

    深度源碼解析Java 線程池的實現原理

    如何高效的使用這些資源就是程序員在平時寫代碼時候的一個努力的方向。本文要說的線程池就是一種對 CPU 利用的優(yōu)化手段。對Java 線程池的實現原理相關知識感興趣的朋友一起看看吧
    2021-05-05
  • java?引用傳遞的三種類型小結

    java?引用傳遞的三種類型小結

    這篇文章主要介紹了java?引用傳遞的三種類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 使用mongoTemplate實現多條件加分組查詢方式

    使用mongoTemplate實現多條件加分組查詢方式

    這篇文章主要介紹了使用mongoTemplate實現多條件加分組查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

鸡西市| 上饶市| 泊头市| 潼南县| 新津县| 开化县| 临夏县| 河津市| 廉江市| 屏东县| 周口市| 富平县| 武邑县| 莒南县| 古交市| 交城县| 常宁市| 左贡县| 望谟县| 萨迦县| 繁峙县| 包头市| 呼伦贝尔市| 顺昌县| 赣州市| 阿巴嘎旗| 象山县| 长岭县| 曲周县| 石景山区| 通州市| 江西省| 兴和县| 胶南市| 无极县| 伊通| 云霄县| 陵水| 泗水县| 南靖县| 四会市|