av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

java語言

Java final 修飾符

時間:2025-03-18 20:21:05 java語言 我要投稿

Java final 修飾符

  導(dǎo)語:final從字面上理解含義為“最后的,最終的”。在Java中也同樣表示出此種含義。下面是相關(guān)知識,歡迎參考!

  final可以用來修飾變量(包括類屬性、對象屬性、局部變量和形參)、方法(包括類方法和對象方法)和類。

  1. final修飾類:

  final修飾類即表示此類已經(jīng)是“最后的、最終的”含義。因此,用final修飾的類不能被繼承,即不能擁有自己的子類。

  如果視圖對一個已經(jīng)用final修飾的類進行繼承,在編譯期間或發(fā)生錯誤。

  2. final修飾方法:

  final修飾的方法表示此方法已經(jīng)是“最后的、最終的”含義,亦即此方法不能被重寫(可以重載多個final修飾的方法)。

  此處需要注意的一點是:因為重寫的前提是子類可以從父類中繼承此方法,如果父類中final修飾的方法同時訪問控制權(quán)限為private,

  將會導(dǎo)致子類中不能直接繼承到此方法,因此,此時可以在子類中定義相同的方法名和參數(shù),此時不再產(chǎn)生重寫與final的矛盾,而是

  在子類中重新定義了新的方法。

  1 public class B extends A {

  2

  3   public static void main(String[] args) {

  4

  5   }

  6

  7   public void getName() {

  8

  9   }

  10 }

  11

  12 class A {

  13

  14   /**

  15   * 因為private修飾,子類中不能繼承到此方法,因此,子類中的getName方法是重新定義的、

  16   * 屬于子類本身的方法,編譯正常

  17   */

  18   private final void getName() {

  19

  20   }

  21

  22   /* 因為pblic修飾,子類可以繼承到此方法,導(dǎo)致重寫了父類的final方法,編譯出錯

  23   public final void getName() {

  24

  25   }

  26   */

  27 }

  3. final 修飾變量:

  final修飾的變量表示此變量是“最后的、最終的”含義。一旦定義了final變量并在首次為其顯示初始化后,final修飾的變量值不可被改變。

  這里需要注意以下幾個問題:

  1. final修飾的變量,無論是類屬性、對象屬性、形參還是局部變量,這些變量都是需要進行顯示初始化(即為其顯示指定初始值)。

  對于final修飾的形參,由于是實參傳遞過來的,很好理解。

  對于final修飾的局部變量,與未用final修飾的變量一樣,都是需要顯示初始化。即局部變量都是需要顯示初始化的。

  對于一般的類屬性和對象屬性,由類和對象的初始化過程中可以看出,首先都進行了默認初始化。然后對有顯示賦值的變量才再進行顯示初始化。

  但對final修飾的類屬性和對象屬性而言,如果不顯示初始化,其默認將是進行默認初始化后的值,這與final本身出發(fā)點矛盾,因此,Java語法規(guī)定:

  final修飾的類屬性和變量屬性必須要進行顯示初始化賦值。

  另外,無論對于基本數(shù)據(jù)類型還是引用數(shù)據(jù)類型,final修飾的變量都是首次顯示初始化后值都不能修改。對于基本數(shù)據(jù)類型,很好理解。對于引用

  數(shù)據(jù)類型,引用變量指向的是實際的對象,但其存儲的是所指向?qū)ο蟮牡刂,因此,其值不能修改并不意味著其所指向的對象不能修改?/p>

  4. final修飾變量后導(dǎo)致的“宏替換”/"宏變量"問題

  Java 中宏變量/宏替換指的是在java代碼中在編譯期某些變量能夠直接被其本身的值所替換,編譯到.class文件中。因此,編譯后的.class文件中已經(jīng)不存在此變了。

  在String類型的變量中,有時候經(jīng)常遇到如下情況:

  1 public class Test {

  2

  3   public static void main(String[] args) {

  4

  5     String country = "China";

  6     String name = "qqyumidi";

  7

  8     String userInfo = country + name; //編譯后此處依然是country和name變量

  9     String user = "China" + "qqyumidi"; //編譯后此處直接變成Chinaqqyumidi

  10

  11   }

  12 }

  在上述代碼中的第9行,編譯后的變量結(jié)果直接為Chinaqqyumidi。而第8行代碼中,由于country和name都是普通的變量,編譯器無法在編譯時直接確定userInfo的值,因此

  此處編譯后結(jié)果不直接是Chinaqqyumidi。

  但是,如果希望第8行中的代碼在編譯期直接就能表示為Chinaqqyumidi,就需要用到final修飾符對country和name變量進行修飾。

  原因:final修飾符修飾的變量在由于其本身的特性,在編譯期就能直接確定其值,且此值不可變。在編譯過程中,可以直接將其變量直接轉(zhuǎn)換成其值本身去表示。

  1 public class Test {

  2

  3   public static void main(String[] args) {

  4

  5     final String country = "China";

  6     final String name = "qqyumidi";

  7

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

  9

  10   }

  11 }

【Java final 修飾符】相關(guān)文章:

Java final 修飾符知識點總結(jié)范例09-28

關(guān)于Java 的修飾符09-06

Java的訪問修飾符與變量的作用08-20

Java中final關(guān)鍵字用法的講解10-13

java基礎(chǔ)之final、finally和finalize的區(qū)別08-17

Java語言中修飾符的基礎(chǔ)知識10-10

淺析php變量修飾符static的使用07-06

用C#語言中的修飾符07-22