程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java final 潤飾符常識點總結(必看篇)

Java final 潤飾符常識點總結(必看篇)

編輯:關於JAVA

Java final 潤飾符常識點總結(必看篇)。本站提示廣大學習愛好者:(Java final 潤飾符常識點總結(必看篇))文章只能為提供參考,不一定能成為您想要的結果。以下是Java final 潤飾符常識點總結(必看篇)正文


final從字面上懂得寄義為“最初的,終究的”。在Java中也異樣表現出此種寄義。

final可以用來潤飾變量(包含類屬性、對象屬性、部分變量和形參)、辦法(包含類辦法和對象辦法)和類。

1. final潤飾類:

final潤飾類即表現此類曾經是“最初的、終究的”寄義。是以,用final潤飾的類不克不及被繼續,即不克不及具有本身的子類。

假如視圖對一個曾經用final潤飾的類停止繼續,在編譯時代或產生毛病。

2. final潤飾辦法:

final潤飾的辦法表現此辦法曾經是“最初的、終究的”寄義,亦即此辦法不克不及被重寫(可以重載多個final潤飾的辦法)。

此處須要留意的一點是:由於重寫的條件是子類可以從父類中繼續此辦法,假如父類中final潤飾的辦法同時拜訪掌握權限為private,

將會招致子類中不克不及直接繼續到此辦法,是以,此時可以在子類中界說雷同的辦法名和參數,此時不再發生重寫與final的抵觸,而是

在子類中從新界說了新的辦法。

public class B extends A {

  public static void main(String[] args) {

  }

  public void getName() {
    
  }
}

class A {

  /**
   * 由於private潤飾,子類中不克不及繼續到此辦法,是以,子類中的getName辦法是從新界說的、
   * 屬於子類自己的辦法,編譯正常
   */
  private final void getName() {
    
  }

  /* 由於pblic潤飾,子類可以繼續到此辦法,招致重寫了父類的final辦法,編譯失足
  public final void getName() {
  
  }
  */
}

3. final 潤飾變量:

final潤飾的變量表現此變量是“最初的、終究的”寄義。一旦界說了final變量並在初次為其顯示初始化後,final潤飾的變量值弗成被轉變。

這裡須要留意以下幾個成績:

1. final潤飾的變量,不管是類屬性、對象屬性、形參照樣部分變量,這些變量都是須要停止顯示初始化(即為其顯示指定初始值)。

關於final潤飾的形參,因為是實參傳遞過去的,很好懂得。

關於final潤飾的部分變量,與未用final潤飾的變量一樣,都是須要顯示初始化。即部分變量都是須要顯示初始化的。

關於普通的類屬性和對象屬性,由類和對象的初始化進程中可以看出,起首都停止了默許初始化。然後對有顯示賦值的變量才再停止顯示初始化。

但對final潤飾的類屬性和對象屬性而言,假如不顯示初始化,其默許將是停止默許初始化後的值,這與final自己動身點抵觸,是以,Java語律例定:

final潤飾的類屬性和變量屬性必需要停止顯示初始化賦值。

別的,不管關於根本數據類型照樣援用數據類型,final潤飾的變量都是初次顯示初始化後值都不克不及修正。關於根本數據類型,很好懂得。關於援用

數據類型,援用變量指向的是現實的對象,但其存儲的是所指向對象的地址,是以,其值不克不及修正其實不意味著其所指向的對象不克不及修正。

4. final潤飾變量後招致的“宏調換”/"宏變量"成績

Java 中宏變量/宏調換指的是在java代碼中在編譯期某些變量可以或許直接被其自己的值所調換,編譯到.class文件中。是以,編譯後的.class文件中曾經不存在此變了。

在String類型的變量中,有時刻常常碰到以下情形:

 

public class Test {

  public static void main(String[] args) {

    String country = "China";
    String name = "qqyumidi";

    String userInfo = country + name; //編譯後此處仍然是country和name變量
    String user = "China" + "qqyumidi"; //編譯後此處直接釀成Chinaqqyumidi

  }
}

 在上述代碼中的第9行,編譯後的變量成果直接為Chinaqqyumidi。而第8行代碼中,因為country和name都是通俗的變量,編譯器沒法在編譯時直接肯定userInfo的值,是以

此處編譯後成果不直接是Chinaqqyumidi。

然則,假如願望第8行中的代碼在編譯期直接就可以表現為Chinaqqyumidi,就須要用到final潤飾符對country和name變量停止潤飾。

緣由:final潤飾符潤飾的變量在因為其自己的特征,在編譯期就可以直接肯定其值,且此值弗成變。在編譯進程中,可以直接將其變量直接轉換成其值自己去表現。

public class Test {

  public static void main(String[] args) {

    final String country = "China";
    final String name = "qqyumidi";

    String userInfo = country + name; //編譯後此處直接是Chianqqyumidi

  }
}

以上就是小編為年夜家帶來的Java final 潤飾符常識點總結(必看篇)的全體內容了,願望對年夜家有所贊助,多多支撐~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved