亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 開發(fā) > Java > 正文

Java中final關(guān)鍵字詳解及實(shí)例

2024-07-14 08:43:53
字體:
供稿:網(wǎng)友

 final在Java中可以聲明成員變量、方法、類以及本地變量。一旦你將引用聲明作final,你將不能改變這個(gè)引用了,如果你試圖將變量再次初始化的話,編譯器會(huì)報(bào)編譯錯(cuò)誤。
 final的含義在不同的場(chǎng)景下有細(xì)微的差別,但總體來說,它指的是“不可變”。

1. final變量

凡是對(duì)成員變量或者本地變量(在方法中的或者代碼塊中的變量稱為本地變量)聲明為final的都叫作final變量。final變量經(jīng)常和static關(guān)鍵字一起使用,作為常量。用final關(guān)鍵字修飾的變量,只能進(jìn)行一次賦值操作,并且在生存期內(nèi)不可以改變它的值。
不過在針對(duì)基本類型和引用類型時(shí),final關(guān)鍵字的效果存在細(xì)微差別。例如:

class Value {  int v;  public Value(int v) {    this.v = v;  }}public class FinalTest {  final int f1 = 1;  final int f2;  public FinalTest() {    f2 = 2;  }  public static void main(String[] args) {    final int value1 = 1;    // value1 = 4;    final double value2;    value2 = 2.0;    final Value value3 = new Value(1);    value3.v = 4;  }}

上面的例子中,main方法中被final修飾的數(shù)據(jù),在給value1賦初始值之后,我們無法再對(duì)value1的值進(jìn)行修改,final關(guān)鍵字起到了常量的作用。從value2我們可以看到,final修飾的變量可以不在聲明時(shí)賦值,即可以先聲明,后賦值。value3時(shí)一個(gè)引用變量,這里我們可以看到final修飾引用變量時(shí),只是限定了引用變量的引用不可改變,即不能將value3再次引用另一個(gè)Value對(duì)象,但是引用的對(duì)象的值是可以改變的。
另一方面,我們看到了用final修飾成員變量時(shí)的細(xì)微差別,因?yàn)閒inal修飾的數(shù)據(jù)的值是不可改變的,所以我們必須確保在使用前就已經(jīng)對(duì)成員變量賦值了。因此對(duì)于final修飾的成員變量,我們有且只有兩個(gè)地方可以給它賦值,一個(gè)是聲明該成員時(shí)賦值,另一個(gè)是在構(gòu)造方法中賦值,在這兩個(gè)地方我們必須給它們賦初始值。
最后我們需要注意的一點(diǎn)是,同時(shí)使用static和final修飾的成員在內(nèi)存中只占據(jù)一段不能改變的存儲(chǔ)空間。

2. final方法參數(shù)

前面我們可以看到,如果變量是我們自己創(chuàng)建的,那么使用final修飾表示我們只會(huì)給它賦值一次且不會(huì)改變變量的值。那么如果變量是作為參數(shù)傳入的,我們?cè)趺幢WC它的值不會(huì)改變呢?這就用到了final的第二種用法,即在我們編寫方法時(shí),可以在參數(shù)前面添加final關(guān)鍵字,它表示在整個(gè)方法中,我們不會(huì)(實(shí)際上是不能)改變參數(shù)的值:

public class FinalTest {  /* ... */  public void finalFunc(final int i, final Value value) {    // i = 5; 不能改變i的值    // v = new Value(); 不能改變v的值    value.v = 5; // 可以改變引用對(duì)象的值  }}

3. final方法

 final也可以聲明方法。方法前面加上final關(guān)鍵字,代表這個(gè)方法不可以被子類的方法重寫。如果你認(rèn)為一個(gè)方法的功能已經(jīng)足夠完整了,子類中不需要改變的話,你可以聲明此方法為final。final方法比非final方法要快,因?yàn)樵诰幾g的時(shí)候已經(jīng)靜態(tài)綁定了,不需要在運(yùn)行時(shí)再動(dòng)態(tài)綁定。關(guān)于private和final關(guān)鍵字還有一點(diǎn)聯(lián)系,這就是類中所有的private方法都隱式地指定為是final的,由于無法在類外使用private方法,所以也就無法覆蓋它。下面是final方法的例子:

class PersonalLoan{  public final String getName(){    return "personal loan";  }}class CheapPersonalLoan extends PersonalLoan{  @Override  public final String getName(){    return "cheap personal loan"; //compilation error: overridden method is final  }}

4. final類

 使用final來修飾的類叫作final類。final類通常功能是完整的,它們不能被繼承。Java中有許多類是final的,譬如String, Interger以及其他包裝類。下面是final類的實(shí)例:

 final class PersonalLoan{  }  class CheapPersonalLoan extends PersonalLoan{ //compilation error: cannot inherit from final class

5. final關(guān)鍵字的好處

下面總結(jié)了一些使用final關(guān)鍵字的好處

  1. final關(guān)鍵字提高了性能。JVM和Java應(yīng)用都會(huì)緩存final變量。
  2. final變量可以安全的在多線程環(huán)境下進(jìn)行共享,而不需要額外的同步開銷。
  3. 使用final關(guān)鍵字,JVM會(huì)對(duì)方法、變量及類進(jìn)行優(yōu)化。

       創(chuàng)建不可變類要使用final關(guān)鍵字。不可變類是指它的對(duì)象一旦被創(chuàng)建了就不能被更改了。String是不可變類的代表。不可變類有很多好處,譬如它們的對(duì)象是只讀的,可以在多線程環(huán)境下安全的共享,不用額外的同步開銷等等。

6. 幾個(gè)易混點(diǎn)

(1)類的final變量和普通變量有什么區(qū)別?

當(dāng)用final作用于類的成員變量時(shí),成員變量(注意是類的成員變量,局部變量只需要保證在使用之前被初始化賦值即可)必須在定義時(shí)或者構(gòu)造器中進(jìn)行初始化賦值,而且final變量一旦被初始化賦值之后,就不能再被賦值了。
那么final變量和普通變量到底有何區(qū)別呢?下面請(qǐng)看一個(gè)例子:

public class Test {  public static void main(String[] args) {    String a = "hello2";     final String b = "hello";    String d = "hello";    String c = b + 2;     String e = d + 2;    System.out.println((a == c));    System.out.println((a == e));  }}

輸出結(jié)果:

true
false

 大家可以先想一下這道題的輸出結(jié)果。為什么第一個(gè)比較結(jié)果為true,而第二個(gè)比較結(jié)果為fasle。這里面就是final變量和普通變量的區(qū)別了,當(dāng)final變量是基本數(shù)據(jù)類型以及String類型時(shí),如果在編譯期間能知道它的確切值,則編譯器會(huì)把它當(dāng)做編譯期常量使用。也就是說在用到該final變量的地方,相當(dāng)于直接訪問的這個(gè)常量,不需要在運(yùn)行時(shí)確定。這種和C語(yǔ)言中的宏替換有點(diǎn)像。因此在上面的一段代碼中,由于變量b被final修飾,因此會(huì)被當(dāng)做編譯器常量,所以在使用到b的地方會(huì)直接將變量b 替換為它的 值。而對(duì)于變量d的訪問卻需要在運(yùn)行時(shí)通過鏈接來進(jìn)行。想必其中的區(qū)別大家應(yīng)該明白了,不過要注意,只有在編譯期間能確切知道final變量值的情況下,編譯器才會(huì)進(jìn)行這樣的優(yōu)化,比如下面的這段代碼就不會(huì)進(jìn)行優(yōu)化:

public class Test {  public static void main(String[] args) {    String a = "hello2";     final String b = getHello();    String c = b + 2;     System.out.println((a == c));  }  public static String getHello() {    return "hello";  }}

這段代碼的輸出結(jié)果為false。

(2) 被final修飾的引用變量指向的對(duì)象內(nèi)容可變嗎?

 在上面提到被final修飾的引用變量一旦初始化賦值之后就不能再指向其他的對(duì)象,那么該引用變量指向的對(duì)象的內(nèi)容可變嗎?看下面這個(gè)例子:

public class Test {  public static void main(String[] args) {    final MyClass myClass = new MyClass();    System.out.println(++myClass.i);  }}class MyClass {  public int i = 0;}

這段代碼可以順利編譯通過并且有輸出結(jié)果,輸出結(jié)果為1。這說明引用變量被final修飾之后,雖然不能再指向其他對(duì)象,但是它指向的對(duì)象的內(nèi)容是可變的。

(3) final和static

很多時(shí)候會(huì)容易把static和final關(guān)鍵字混淆,static作用于成員變量用來表示只保存一份副本,而final的作用是用來保證變量不可變??聪旅孢@個(gè)例子:

public class Test {  public static void main(String[] args) {    MyClass myClass1 = new MyClass();    MyClass myClass2 = new MyClass();    System.out.println(myClass1.i);    System.out.println(myClass1.j);    System.out.println(myClass2.i);    System.out.println(myClass2.j);  }}class MyClass {  public final double i = Math.random();  public static double j = Math.random();}

 運(yùn)行這段代碼就會(huì)發(fā)現(xiàn),每次打印的兩個(gè)j值都是一樣的,而i的值卻是不同的。從這里就可以知道final和static變量的區(qū)別了。

7.總結(jié)

關(guān)于final的重要知識(shí)點(diǎn)有:

final關(guān)鍵字可以用于成員變量、本地變量、方法以及類。
final成員變量必須在聲明的時(shí)候初始化或者在構(gòu)造器中初始化,否則就會(huì)報(bào)編譯錯(cuò)誤。
你不能夠?qū)inal變量再次賦值。
本地變量必須在聲明時(shí)賦值。
在匿名類中所有變量都必須是final變量。
final方法不能被重寫。
final類不能被繼承。
final關(guān)鍵字不同于finally關(guān)鍵字,后者用于異常處理。
final關(guān)鍵字容易與finalize()方法搞混,后者是在Object類中定義的方法,是在垃圾回收之前被JVM調(diào)用的方法。
接口中聲明的所有變量本身是final的。
final和abstract這兩個(gè)關(guān)鍵字是反相關(guān)的,final類就不可能是abstract的。
final方法在編譯階段綁定,稱為靜態(tài)綁定(static binding)。
沒有在聲明時(shí)初始化final變量的稱為空白final變量(blank final variable),它們必須在構(gòu)造器中初始化,或者調(diào)用this()初始化。不這么做的話,編譯器會(huì)報(bào)錯(cuò)“final變量(變量名)需要進(jìn)行初始化”。
將類、方法、變量聲明為final能夠提高性能,這樣JVM就有機(jī)會(huì)進(jìn)行估計(jì),然后優(yōu)化。
按照J(rèn)ava代碼慣例,final變量就是常量,而且通常常量名要大寫:

private final int COUNT = 10;

對(duì)于集合對(duì)象聲明為final指的是引用不能被更改,但是你可以向其中增加,刪除或者改變內(nèi)容。譬如:

private final List Loans = new ArrayList();list.add(“home loan”); //validlist.add("personal loan"); //validloans = new Vector(); //not valid

以上所述是小編給大家介紹的Java中final關(guān)鍵字詳解及實(shí)例整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
性国产高清在线观看| 99国产精品国产精品毛片| 青草青青在线视频| 日本女优一区| 97香蕉碰碰人妻国产欧美| 91pony九色| 欧美电影免费观看高清| 午夜在线观看91| 91久久久免费一区二区| 日韩精品一区二区三区丰满| 不卡高清视频专区| 国产综合图区| 五月天激情国产综合婷婷婷| 成人免费视频网站入口::| 国产精品扒开腿做爽爽爽视频| 国产精品久久精品| 四虎影视免费永久在线| 日韩免费在线电影| 午夜精品一区二区三区av| 91欧美极品| 精精国产xxxx视频在线播放| 国产又粗又硬视频| 私人高清影院 强乱中文字| 国产精品91视频| 中文在线资源天堂| 91精品国产综合久久久久久丝袜| 亚洲欧洲日韩| 新天天拍日日拍狠狠拍| 成人精品国产一区二区4080| 日韩精品亚洲元码| 97视频在线免费| h视频网站在线观看| 妺妺窝人体色www聚色窝仙踪| 在线视频自拍| 免费做暖暖免费观看日本| 中文字幕2022永久在线| 午夜av免费观看| 亚洲国产美国国产综合一区二区| 国产女主播在线| 精品国产91乱码一区二区三区| 免费永久网站黄欧美| 国产人妖乱国产精品人妖| 午夜免费一区| 国产精品久久久久久久蜜臀| 在线观看毛片网站| 国产欧美一区二区精品久久久| 国产伦精品一区二区三区视频痴汉| 国产视频久久久久| 久久亚洲精品一区二区| 欧美一级二级三级乱码| 久久av老司机精品网站导航| 亚洲熟妇无码一区二区三区| www中文字幕在线观看| 91综合在线| 色青青草原桃花久久综合| 午夜精品一区二区三区在线| 国产精品扒开腿做爽爽爽软件| 国产一区久久| 蜜桃视频第一区免费观看| 精品久久久久99| 高清国语自产拍免费一区二区三区| 人人艹在线视频| www.国产在线播放| 一二三四社区在线视频| 中文字幕视频在线| 在线不卡日本v二区707| 亚洲一区免费看| 午夜电影久久久| 午夜dv内射一区二区| 国产日韩欧美三区| 日本sm极度另类视频| 久久久999视频| 一级黄色香蕉视频| 亚洲午夜女主播在线直播| 福利视频网址导航| 精品在线观看一区| 欧美独立站高清久久| 日本国产中文字幕| 国产成人免费高清视频| 一广人看www在线观看免费视频| 2024短剧网剧在线观看| 欧美变态tickle挠乳网站| 日韩一区二区视频在线| 97免费高清电视剧观看| 亚洲美女喷白浆| 特级xxxxx欧美| xvideos入口| 激情五月婷婷基地| 色一色在线观看视频网站| 佐佐木明希电影| 91高清免费视频| 中文字幕桃花岛| 日本中文字幕一区二区视频| 日韩三级电影网站| 亚洲国产精久久久久久| 91精彩在线视频| 91视频在线网站| 欧美另类视频在线观看| 亚洲mv在线| 五月天婷婷在线视频| 久久久久一区二区三区四区| 午夜精品免费观看| 亚洲精品mv在线观看| 欧美亚洲成人网| 欧美黑人疯狂性受xxxxx野外| 欧美日韩视频第一区| 熟女丰满老熟女熟妇| 模特精品在线| 国产精品网友自拍| 天堂在线一二区| 亚洲婷婷综合色高清在线| 欧美精品1区2区3区| 蜜芽视频在线观看| 色豆豆成人网| 亚洲精品无码久久久久久久| 国产真实乱人偷精品视频| 一区二区中文字| 国产精品综合一区二区| 精品久久久久久亚洲精品| 中文欧美日本在线资源| 日韩免费在线免费观看| 亚洲尤物视频在线| 国产亚洲精品熟女国产成人| 国产又粗又猛又黄又爽| 欧美日韩久久中文字幕| 精品人妻无码一区二区色欲产成人| 国产丝袜一区视频在线观看| 欧美日韩精品免费在线观看视频| 综合国产视频| 日韩欧美一级片| 国产精品素人视频| 久久激情综合| 免费污片软件| 欧美黄色性视频| 99久在线精品99re8热| 一区二区三区视频免费看| 黄网站在线观看永久免费| 先锋影音av资源网| 欧美日韩成人综合天天影院| 国产永久免费高清在线观看| 国产91av视频在线观看| 欧美最近摘花xxxx摘花| 免费h在线看| 色婷婷综合网站| 国产精品啪啪啪视频| 黄黄视频在线观看| 国产精品久久久一区二区| 一区高清视频| 99riav国产精品| 亚洲热线99精品视频| 欧美日韩不卡合集视频| 欧美精品电影在线播放| 亚洲国产成人不卡| 欧美日韩在线播放三区| 欧美在线高清| 久久精品视频6| 中文字幕一区三区久久女搜查官| 成人免费视频视频在线观看免费| 精品久久人人做人人爰| 9191成人精品久久| 一区二区三区国产在线| 蜜桃av免费看| 麻豆中文字幕在线观看| 5278欧美一区二区三区| www.日本xxxx| 欧州一区二区三区| 欧美日韩亚洲国内综合网俺| 国产精品欧美一区二区| 精品视频在线一区二区| 亚洲精品日韩综合观看成人91| 欧美影院视频| 欧美熟女一区二区| 午夜小视频在线观看| av免费在线一区二区三区| 乱亲女h秽乱长久久久| 亚洲精品人成电影网| 97精品久久久午夜一区二区三区| 久久免费99精品久久久久久| 国产精品a成v人在线播放| 午夜伦理一区二区| 在线观看亚洲一区| 丝袜情趣国产精品| 被弄出白浆喷水了视频| 日韩av手机版| 国产免费网址| 在线观看区一区二| 亚洲精品电影久久久| 男女猛烈无遮挡午夜视频| 69av亚洲| 午夜影院在线视频| 亚洲美女视频一区| 国内精品露脸在线视频播放| 香蕉久久久久久久av网站| 亚洲欧洲韩国日本视频| 我不卡手机影院| 亚洲成人av福利| 少妇欧美激情一区二区三区| 国产精品呻吟久久| 97在线视频观看| sqte在线播放| 精品偷拍各种wc美女嘘嘘| а√天堂资源地址在线下载| 精精国产xxxx视频在线| 国产99久久精品一区二区300| 欧美系列一区二区| 欧美精品一卡| 99re91这里只有精品| 第一站视频久草网| 国产精品美女久久久久av爽李琼| 中文字幕日产av| 日本 欧美 国产| 老司机午夜av| 国产欧美日韩视频在线观看| 在线日韩av| 国产精品国产三级国产aⅴ中文| www.国产欧美| 韩国av免费观看| 刘亦菲毛片一区二区三区| 欧美国产视频日韩| 日本成人在线不卡视频| 欧美激情自拍| 牛牛视频精品一区二区不卡| 亚洲国产欧美日韩另类综合| 国产麻豆精品一区二区三区v视界| 日本大香伊一区二区三区| 亚洲精品人妻无码| 色94色欧美sute亚洲线路一ni| 日本二区视频| 26uuu另类欧美亚洲曰本| 欧美日韩国产精品成人| 这里只有精品999| 免费观看亚洲视频| 国产区卡一卡二卡三乱码免费| 日韩电影在线免费观看| 日韩一二三区不卡| 美女一级全黄| 91麻豆精品国产91久久久使用方法| www.国产精品一二区| 一区二区三区网址| 成人中文字幕在线播放| 少妇饥渴放荡91麻豆| 免费视频最近日韩| 国产精品国产三级国产aⅴ中文| 日本不卡一区| 国产三级精品三级观看| 欧美电影完整版在线观看| 亚洲精品视频免费在线观看| 正在播放精油久久| 欧美乱妇视频| 亚洲日韩中文字幕一区| 欧美手机在线视频| 麻豆一区二区三区视频| 穿情趣内衣被c到高潮视频| 亚洲欧美激情一区二区三区| 中文字幕乱视频| 久久国产88| 青春娱乐分类视频精品2动漫| 国产农村老头老太视频| 99re在线视频| 97免费在线观看视频| 97超碰国产精品| 日本激情视频网| 青青青在线视频| 欧美在线影院一区二区| 一区二区三区www| 欧美激情2020午夜免费观看| 黄色成人在线视频| 日韩有码免费视频| 成人黄色av网站在线| 欧美xxxxxxxx| 欧美在线|欧美| www欧美激情| 中文字幕福利片| 亚洲精品成人天堂一二三| 久久成人免费视频| 国产香蕉尹人视频在线| 美女禁区视频免费观看精选| 伊人久久亚洲综合| 在线看的av网站| 国产精品麻豆久久久| 欧美在线免费观看亚洲| 亚洲韩国日本中文字幕| 久中文字幕一区| 精品久久香蕉国产线看观看gif| 少妇一区二区三区四区| 在线播放一区| 亚洲欧洲动漫| 成年网站视频| 久久er精品视频| 精品高清一区二区三区| 伊人久久大香线蕉综合网蜜芽| 亚洲日韩第一页| 久久综合久久综合九色| 日本在线视频中文有码| 亚洲国产精品一区二区久久hs| 爽好久久久欧美精品| av在线亚洲天堂| 国产视频二区三区| 欧美人与性动交xxⅹxx| 日韩色视频在线观看| 偷拍日韩校园综合在线| 免费在线视频一区二区| 99精品视频网站| 狠狠艹夜夜干| 9l视频自拍9l视频自拍| 国产中文在线观看| 精品国产一二区| 中文字幕永久在线观看| 欧美极度另类videos高清| www.亚洲人.com| 美女一区2区| 国产精品久久久久一区| 91在线国产电影| 国产精品视频免费在线| 亚洲国产精品二十页| 91国产成人在线| 亚洲黄页网在线观看| 婷婷久久青草热一区二区| 久久久精品国产sm调教网站| 欧美性色欧美a在线播放| 欧美视频在线观看一区二区三区| 成人一区二区三区视频| 老司机99精品99| 国产黄大片在线观看| 欧美美女bb生活片| a天堂中文在线官网在线| 国产免费成人av| 美国做受三级的视频播放|