中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中final修飾符怎么用

發布時間:2022-03-03 10:55:24 來源:億速云 閱讀:169 作者:小新 欄目:web開發

小編給大家分享一下java中final修飾符怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

  一、final修飾符定義:

  final關鍵字可用于修飾類、變量和方法

  final修飾變量時,表示該變量一旦獲得了初始值就不可被改變(嚴格來說:final修飾得變量不可被改變,一旦獲得初始值,該final變量得值就不能被重新賦值)

  final既可以修飾成員變量(類變量和實例變量),也可以修飾局部變量和形參

  相關視頻學習教程:java在線學習

  二、final成員變量語法規定:

  final修飾的成員變量必須由程序員顯式地指定初始值,系統不會對final成員進行隱式處初始化。

  1、final修飾的類變量、實例變量能制定初始值的地方如下:

  類變量:必須在靜態初始化塊中指定初始值或聲明該類變量時指定初始值,而且只能在兩個地方的其中之一指定

  實例變量:必須在非靜態初始化塊、聲明該實例變量或構造器中指定初始值,而且只能在三個地方的其中之一指定

  注意:如果普通初始化塊已經為某個實例變量指定了初始值,則不能再在構造器中為該實例變量制定初始值

  下面程序演示了final修飾成員變量的效果:

  packagelextends;

  publicclassFinalVariableTest{

  //定義成員變量時指定默認值,合法

  finalinta=6;

  //下面變量將在構造器或初始化塊中分配初始值

  finalStringstr;

  finalintc;

  finalstaticdoubled;

  //既沒有指定默認值,又沒有在初始化塊、構造器中指定初始值

  //下面定義的ch實例是不合法的

  //finalcharch;

  //初始化塊,可對沒有指定默認值的實例變量指定初始值

  {

  //在初始化塊中為實例變量指定初始值,合法

  str="Hello";

  //定義a實例變量時已經指定了默認值

  //不能為a重新賦值,因此下面賦值語句非法

  //a=9;

  }

  //靜態初始化塊,可對沒有指定默認值的類變量指定初始值

  static{

  //在靜態初始化塊中為類變量指定初始值,合法

  d=5.6;

  }

  //構造器,可以對既沒有指定默認值,又沒有在初始化塊中,指定初始值的實例變量指定初始值

  publicFinalVariableTest(){

  //如果在初始化塊中已經對str指定了初始值

  //那么在構造器中不能對final變量重新賦值,下面賦值語句非法

  //str="java"

  c=5;

  }

  publicvoidchangeFinal(){

  //普通方法不能為final修飾的成員變量賦值

  //d=1.2

  //不能在普通方法中為final成員變量指定初始值

  //ch='a';

  }

  publicstaticvoidmian(String[]args){

  FinalVariableTestft=newFinalVariableTest();

  System.out.println(ft.a);

  System.out.println(ft.c);

  System.out.println(ft.d);}

  }

  2、如果打算在構造器、初始化塊對final成員變量進行初始化,則不要在初始化之前就訪問成員變量的值。

  packagelextends;

  publicclassFinalErrorTest{

  //定義一個final修飾的實例變量

  //系統不會對final成員變量進行默認初始化

  finalintage;

  {

  //age沒有初始化,所以此處代碼將引起錯誤,因為它試圖訪問一個未初始化的變量

  //只要把定義age時的final修飾符去掉,程序就正確了

  System.out.println(age);

  age=6;

  System.out.println(age);

  }

  publicstaticvoidmain(String[]args){

  newFinalErrorTest();

  }

  }

  三、final局部變量

  1、定義:系統不會對局部變量進行初始化,局部變量必須由程序員顯示初始化。因此使用final修飾局部變量時,既可以在定義時指定默認值,也可以不指定默認值。

  下面程序示范了final修飾局部變量、形參:

  (final修飾形參的情形,因為在調用該方法時,由系統根據傳入的參數來完成初始化,因此使用final修飾符不能被賦值。)

  packagelextends;

  publicclassFinalLocalVariable{

  publicvoidtest(finalinta){

  //不能對final修飾的形參賦值,下面語句非法

  //a=5;

  }

  publicstaticvoidmian(String[]args){

  //定義final局部變量時指定默認值,則str變量無法重新賦值

  finalStringstr="hello";

  //下面賦值語句非法

  //str="Java";

  //定義final局部變量時沒有指定默認值,則d變量可被賦值一次

  finaldoubled;

  d=5.6;

  //對final變量重新賦值,下面語句非法

  //d=6.4;

  }

  }

  四、final修飾基本類型變量和引用類型變量的區別

  使用final修飾的引用類型變量不能被重新賦值,但可以改變引用類型變量所引用對象的內容

  例如下面的iArr變量所引用的數組對象,final修飾后的iArr變量不能被重新賦值,但iArr所引用數組的數組元素可以被改變

  eg.

  //final修飾數組元素,iArr是一個引用變量

  finalint[]iArr={5,6,12,9};

  System.out.println(Arrays.toString(iArr));

  //對數組元素進行排序,合法

  Arrays.sort(iArr);

  System.out.println(Arrays.toString(iArr));

  //對數組進行元素賦值,合法

  iArr[2]=-8;

  System.out.println(Arrays.toString(iArr));

  //下面語句對iArr重新賦值,非法

  //iArr=null;

  五、可執行”宏替換“的final變量

  1、對于一個final變量來說,不管它是類變量、實例變量,還是局部變量,只要該變量滿足三個條件,這個final變量就不再是一個變量,而是相當于一個直接量。

  (1)使用final修飾符修飾

  (2)在定義該final變量時指定了初始值

  (3)該初始值可以在編譯時就被確定下來

  2、final修飾符有一個重要用途就是定義”宏變量“。當定義final變量時就為該變量指定了初始值,而且該變量可以在變量時就確定下來,那么這個final變量本質上就是一個”宏變量“,編譯器會把程序中所有用到該變量的地方直接替換成該變量的值。

  3、

  eg.

  Strings1="瘋狂Java";

  //s2變量引用的字符串可以在編譯時就確定下來

  //因此s2直接引用變量池中已有的"瘋狂Java"字符串

  Strings2="瘋狂"+"Java";

  System.out.println(s1==s2);//true

  //定義兩個字符串直接量

  Stringstr1="瘋狂";

  Stringstr2="Java";

  Strings3=str1+str2;

  System.out.println(s1==s3);//false

  對于s3而言,它的值由str1和str2進行連接運算得到的,由于str1、str2只是兩個普通變量,編譯器不會執行”宏替換“,因此編譯器無法確定s3的值,也就無法讓s3指向字符串池中緩存的"瘋狂Java"。

以上是“java中final修飾符怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海南省| 开化县| 鹤庆县| 德化县| 肇州县| 虎林市| 樟树市| 锦州市| 兴海县| 红河县| 射洪县| 庆云县| 朝阳区| 胶州市| 渭源县| 庆元县| 惠来县| 大荔县| 金华市| 宾阳县| 青海省| 榆社县| 太谷县| 嘉兴市| 兰溪市| 建瓯市| 尤溪县| 桦川县| 阜平县| 历史| 布尔津县| 铅山县| 新泰市| 兴山县| 镇平县| 翁牛特旗| 通州市| 图们市| 常熟市| 崇信县| 沾化县|