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

Java中final關鍵字的使用與注意總結

 更新時間:2020年08月19日 16:30:30   作者:IBLiplus  
這篇文章主要給大家介紹了關于Java中final關鍵字的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

在java中可以將實例域定義為final。在構建對象是必須初始化這樣的值。必須確保在每個構造器執(zhí)行之后,這個域的值被設置,并且在后面的操作中不再對其修改。使用final聲明變量之后,這個值就不能修改,一般final類型的變量都被聲明為靜態(tài)變量,而且是公有類型的,它在內存中被放在一個特有的公共區(qū)域。

也就是說,在Java語法中規(guī)定,final修飾的成員變量必須有程序員顯式地指定初始值。

定義格式為: public  static  final  double pi = 3.1415926;

final修飾符大多應用于基本類型域,或不可變類的域(如果類中的每個方法都不會改變其對象,這種類成為不可變類。比如說Java中的String類就是一個不可變類。)

如果定義了兩個相同的變量,都是final類型的,這兩個相同的變量名有著不同的值,其實在內存中是開辟了兩個內存空間,之前定義的變量的值會被后來定義的變量的值覆蓋掉。原理是變量名指向后來定義的變量值的內存空間,之前定義的變量值會被Java虛擬機根據(jù)某種特定的算法在特定的時間處理掉。

在下面的代碼中詳細的介紹了final類型的變量如何進行定義和初始化:

public class FinalVariableText {
 //定義成員變量是指定默認值,合法
 final int a = 6;
 //下面變量將在構造器或初始化塊中分配初始值
 final String str;
 final int c ;
 final static double d;
 //既沒有指定默認值,也沒有在初始化塊、構造器中指定初始值
 //下面定義的ch實例變量是不合法的
 //final char ch;
 
 {
 //在初始化塊中只懂初始值,合法
 str ="hello" ;
 //定義a實例變量已經有初始值了,不能為a重新賦值。下面的語句是不正確的
 //a = 9;
 }
 
 //靜態(tài)初始化塊
 static {
 // d是靜態(tài)成員變量,必須在靜態(tài)初始化塊中為其指定初始值
 d = 5.6;
 
 }
 //構造器,可對 沒有設置初始值的成員變量設置初始值
 //構造器必須與類名相同,這一點注意!
 public FinalVariableText(){
 //如果在初始化塊中對str賦初值,在構造器中在為str重新賦值,是不合法的,程序會拋出錯誤。
 c = 5;
 }
 
 public void changeFinal() {
 //普通方法不能為final修飾的成員變量賦值
 //d = 1.3;
 //也不能在普通方法中為沒有設置初始值的final類型的變量賦初值
 //ch = 'ch';
 
 }
 
 public static void main(String[] args) {
  
 FinalVariableText ff = new FinalVariableText();
 System.out.println(ff.a);
 System.out.println(ff.c);
 System.out.println(ff.str);
 System.out.println(ff.d); 
 }

結果:
6
5
hello
5.6

注意:

如果打算在構造器、初始化塊中對final類型的成員變量進行初始化,則不要在初始化之前訪問成員變量的值,否則會引發(fā)程序報錯。

final也存在局部變量的情況

系統(tǒng)不會對局部變量進行初始化,局部變量必須由程序員顯式的進行初始化,因此使用final修飾局部變量的時候,既可以在定義是設定默認值,也可以不指定默認值。如果在定義是沒有進行設定默認值,則可以在后面的代碼中對該final變量賦初值,但只能一次,不可以重復賦值。當然如果在定義變量的時候就已經指定默認值,在后面的代碼中就沒有必要也不允許對該變量在進行賦值操作。

 public void text(final int a) {
 //不能對fianl修飾的形參進行賦值操作
 //a = 5; 該語句是不合法的
 }
 public static void main(String[] args) {
  //定義final局部變量時,指定初始值,則該變量再無法進行賦值了
 final String str = "str";
 //下面的語句會報錯,不合法
 //str = "Java";
 //定義final變量沒有指定默認值,則可以被賦值一次
 final int d;
 d = 5;
 //再對d進行新的賦值,不合法
 // d = 8;
 
 }

Final修飾基本類型變量和引用類型的變量的區(qū)別

Final修飾基本類型變量上面已經講述的很清楚了,那引用類型的變量會有什么不同呢?對于引用類型的變量而言,它僅僅是保存了一個引用關系,final只保證這個引用類型變量所引用的地址不會改變,即一直引用同一個對象,但這個對象完全可以發(fā)生改變。下面通過代碼來驗證一下:

class Person1{
 
 private int age;
 //有一個參數(shù)的構造函數(shù)
 public Person1(int age) {
 this.age = age; 
 }
 public int getAge() {
 return age;
 }
 public void setAge(int age) {
 this.age = age;
 }
}
 
public class FinalReferenceText {
 
 public static void main(String[] args) {
  
  final int [] arr = {5,6,12,9};
  System.out.println(Arrays.toString(arr));
  Arrays.sort(arr);
  System.out.println(Arrays.toString(arr));
  arr[2] = -8;
  System.out.println(Arrays.toString(arr));
  //下面對arr重新賦值,非法
  //arr = null;
  //final 修飾Person變量,p是一個引用變量
  final Person1 p = new Person1(45);
  //改變Person對象的實例變量,合法
  p.setAge(55);
  System.out.println(p.getAge());
  //下面對p重新賦值,非法
  //p = null;
 }
 
}

結果:
[5, 6, 12, 9]
[5, 6, 9, 12]
[5, 6, -8, 12]
55

final方法

Final修飾的方法不可被重寫,如果處于某種原因,不希望子類重寫父類的某個方法,則可以使用final關鍵字修飾該方法。

如果父類中的方法的是公有的,則子類中不能有一個一樣方法名,一樣參數(shù)的方法,但如果父類中的方法是私有的,那么子類中完全可以寫一個一樣的方法。

對于private類型的方法,由于其只能在當前類中可見,其子類無法訪問到該方法,所以子類無法重寫該方法,那么,如果子類中存在一個與父類private方法有相同方法名,一樣的參數(shù)列表,相同的返回值的方法,也不是方法的重寫,只是重新定義了一個新的方法。因此,final修飾一個private方法,依然可以在其子類中定義和父類private類型一樣的方法,不會有程序錯誤。

public class PrivateFinalText{
 
 //如果將訪問修飾符改成public,則其子類中的方法定義在程序編譯時會報錯
 private final void text();
 
}
 
class Sub extends PrivateFinalText{
 //下面的方法完全沒有問題
 public void text();
}

以上是我目前對Java中final關鍵字的總結,稍后會有補充?。?!

總結

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

相關文章

  • Java日常練習題,每天進步一點點(17)

    Java日常練習題,每天進步一點點(17)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Java 判斷數(shù)組是否相等的方法示例

    Java 判斷數(shù)組是否相等的方法示例

    這篇文章主要介紹了Java 判斷數(shù)組是否相等的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • IDEA實現(xiàn)JDBC的操作步驟

    IDEA實現(xiàn)JDBC的操作步驟

    JDBC提供了一種基準,據(jù)此可以構建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應用程序,本文給大家介紹IDEA實現(xiàn)JDBC的操作步驟,感興趣的朋友一起看看吧
    2022-01-01
  • Java反射技術詳解及實例解析

    Java反射技術詳解及實例解析

    這篇文章主要介紹了Java反射技術詳解及實例解析,反射可以說是Java中最強大的技術了,它可以做的事情太多太多,很多優(yōu)秀的開源框架都是通過反射完成的。如果對JAVA感興趣來可以學習一下
    2020-07-07
  • SpringMVC自定義攔截器登錄檢測功能的實現(xiàn)代碼

    SpringMVC自定義攔截器登錄檢測功能的實現(xiàn)代碼

    這篇文章主要介紹了SpringMVC自定義攔截器登錄檢測功能的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Spring Boot整合SSE實時通信的問題小結

    Spring Boot整合SSE實時通信的問題小結

    本文介紹了服務器發(fā)送事件(Server-Sent Events,SSE)技術,其主要特點包括單向數(shù)據(jù)流、自動重連、自定義事件類型等,SSE適用于實時更新場景,如新聞推送、評論系統(tǒng)等,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • springboot向elk寫日志實現(xiàn)過程

    springboot向elk寫日志實現(xiàn)過程

    這篇文章主要介紹了springboot向elk寫日志實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java設計模式之單件模式深入講解

    Java設計模式之單件模式深入講解

    有人說單件模式是最簡單的模式,因為它只有一個類,但其實它還有一些值得注意的地方,就如:出現(xiàn)并發(fā)性時,單件可能已經不是單件了
    2021-11-11
  • java實現(xiàn)簡單貪吃蛇小游戲

    java實現(xiàn)簡單貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 必知必會的SpringBoot實現(xiàn)熱部署兩種方式

    必知必會的SpringBoot實現(xiàn)熱部署兩種方式

    這篇文章主要為大家介紹了必知必會的SpringBoot實現(xiàn)熱部署兩種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論

昌乐县| 凤庆县| 吉林省| 永顺县| 游戏| 通州市| 延长县| 桦南县| 合川市| 库车县| 宝应县| 临夏县| 杭锦旗| 昌邑市| 芦溪县| 和静县| 阳城县| 淳安县| 额尔古纳市| 五寨县| 黎城县| 抚松县| 集贤县| 黄浦区| 霞浦县| 寿宁县| 视频| 大姚县| 兰州市| 临洮县| 宜宾市| 长泰县| 临泉县| 多伦县| 绿春县| 山东省| 灌云县| 叙永县| 葫芦岛市| 岐山县| 凯里市|