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

首頁 > 編程 > Java > 正文

Java中final關鍵字詳解

2020-03-22 20:26:50
字體:
來源:轉載
供稿:網友
談到final關鍵字,想必很多人都不陌生,在使用匿名內部類的時候可能會經常用到final關鍵字。另外,Java中的String類就是一個final類,那么今天我們就來了解final這個關鍵字的用法。
主要介紹:一.final關鍵字的基本用法。二.深入理解final關鍵字一.final關鍵字的基本用法 在Java中,final關鍵字可以用來修飾類、方法和變量(包括成員變量和局部變量)。下面就從這三個方面來了解一下final關鍵字的基本用法。 1.修飾類 當用final修飾一個類時,表明這個類不能被繼承。也就是說,如果一個類你永遠不會讓他被繼承,就可以用final進行修飾。final類中的成員變量可以根據需要設為final,但是要注意final類中的所有成員方法都會被隱式地指定為final方法。 在使用final修飾類的時候,要注意謹慎選擇,除非這個類真的在以后不會用來繼承或者出于安全的考慮,盡量不要將類設計為final類。 2.修飾方法 下面這段話摘自《Java編程思想》第四版第143頁: “使用final方法的原因有兩個。第一個原因是把方法鎖定,以防任何繼承類修改它的含義;第二個原因是效率。在早期的Java實現版本中,會將final方法轉為內嵌調用。但是如果方法過于龐大,可能看不到內嵌調用帶來的任何性能提升。在最近的Java版本中,不需要使用final方法進行這些優化了?!?因此,如果只有在想明確禁止 該方法在子類中被覆蓋的情況下才將方法設置為final的。 注:類的private方法會隱式地被指定為final方法。 3.修飾變量 修飾變量是final用得最多的地方,也是本文接下來要重點闡述的內容。首先了解一下final變量的基本語法: 對于一個final變量,如果是基本數據類型的變量,則其數值一旦在初始化之后便不能更改;如果是引用類型的變量,則在對其初始化之后便不能再讓其指向另一個對象。 舉個例子: 上面的一段代碼中,對變量i和obj的重新賦值都報錯了。二.深入理解final關鍵字 在了解了final關鍵字的基本用法之后,這一節我們來看一下final關鍵字容易混淆的地方。1.類的final變量和普通變量有什么區別? 當用final作用于類的成員變量時,成員變量(注意是類的成員變量,局部變量只需要保證在使用之前被初始化賦值即可)必須在定義時或者構造器中進行初始化賦值,而且final變量一旦被初始化賦值之后,就不能再被賦值了。 那么final變量和普通變量到底有何區別呢?下面請看一個例子:html' target='_blank'>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));} true
false 大家可以先想一下這道題的輸出結果。為什么第一個比較結果為true,而第二個比較結果為fasle。這里面就是final變量和普通變量的區別了,當final變量是基本數據類型以及String類型時,如果在編譯期間能知道它的確切值,則編譯器會把它當做編譯期常量使用。也就是說在用到該final變量的地方,相當于直接訪問的這個常量,不需要在運行時確定。這種和C語言中的宏替換有點像。因此在上面的一段代碼中,由于變量b被final修飾,因此會被當做編譯器常量,所以在使用到b的地方會直接將變量b 替換為它的 值。而對于變量d的訪問卻需要在運行時通過鏈接來進行。想必其中的區別大家應該明白了,不過要注意,只有在編譯期間能確切知道final變量值的情況下,編譯器才會進行這樣的優化,比如下面的這段代碼就不會進行優化: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";} 這段代碼的輸出結果為false。2.被final修飾的引用變量指向的對象內容可變嗎? 在上面提到被final修飾的引用變量一旦初始化賦值之后就不能再指向其他的對象,那么該引用變量指向的對象的內容可變嗎?看下面這個例子: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;} 這段代碼可以順利編譯通過并且有輸出結果,輸出結果為1。這說明引用變量被final修飾之后,雖然不能再指向其他對象,但是它指向的對象的內容是可變的。3.final和static 很多時候會容易把static和final關鍵字混淆,static作用于成員變量用來表示只保存一份副本,而final的作用是用來保證變量不可變??聪旅孢@個例子: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();} 運行這段代碼就會發現,每次打印的兩個j值都是一樣的,而i的值卻是不同的。從這里就可以知道final和static變量的區別了。4.匿名內部類中使用的外部局部變量為什么只能是final變量? 這個問題請參見上一篇博文中《Java內部類詳解》中的解釋,在此處不再贅述。5.關于final參數的問題 關于網上流傳的”當你在方法中不需要改變作為參數的對象變量時,明確使用final進行聲明,會防止你無意的修改而影響到調用方法外的變量“這句話,我個人理解這樣說是不恰當的。 因為無論參數是基本數據類型的變量還是引用類型的變量,使用final聲明都不會達到上面所說的效果。 看這個例子就清楚了: 上面這段代碼好像讓人覺得用final修飾之后,就不能在方法中更改變量i的值了。殊不知,方法changeValue和main方法中的變量i根本就不是一個變量,因為java參數傳遞采用的是值傳遞,對于基本類型的變量,相當于直接將變量進行了拷貝。所以即使沒有final修飾的情況下,在方法內部改變了變量i的值也不會影響方法外的i。 再看下面這段代碼:public class Test { public static void main(String[] args) { MyClass myClass = new MyClass(); StringBuffer buffer = new StringBuffer("hello"); myClass.changeValue(buffer); System.out.println(buffer.toString());class MyClass { void changeValue(final StringBuffer buffer) { buffer.append("world");} 運行這段代碼就會發現輸出結果為 helloworld。很顯然,用final進行修飾并沒有阻止在changeValue中改變buffer指向的對象的內容。有人說假如把final去掉了,萬一在changeValue中讓buffer指向了其他對象怎么辦。有這種想法的朋友可以自己動手寫代碼試一下這樣的結果是什么,如果把final去掉了,然后在changeValue中讓buffer指向了其他對象,也不會影響到main方法中的buffer,原因在于java采用的是值傳遞,對于引用變量,傳遞的是引用的值,也就是說讓實參和形參同時指向了同一個對象,因此讓形參重新指向另一個對象對實參并沒有任何影響。以上內容就是Java中final關鍵字詳解,希望對大家有所幫助。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美最猛性xxxxx免费| 久久久99久久精品女同性| 国产精品国语对白| 91丝袜美腿美女视频网站| 欧美性生交xxxxxdddd| 亚洲经典中文字幕| 久久亚洲一区二区三区四区五区高| 日韩欧美亚洲范冰冰与中字| 国产综合在线视频| 91影视免费在线观看| 成人免费xxxxx在线观看| 26uuu亚洲国产精品| 亚洲欧美国内爽妇网| 亚洲在线免费看| 丝袜情趣国产精品| 日韩免费在线看| 国产精品wwwwww| 91中文在线观看| 亚洲精品免费一区二区三区| 91久久国产精品91久久性色| 日本免费一区二区三区视频观看| 91精品久久久久久久| 日韩中文字幕在线| 亚洲国产第一页| 日韩免费视频在线观看| 亚洲专区在线视频| 欧美最猛性xxxx| 亚洲综合精品一区二区| 国产99久久精品一区二区 夜夜躁日日躁| 国产美女扒开尿口久久久| 国产精品极品在线| 欧美疯狂xxxx大交乱88av| 日韩中文第一页| 韩国视频理论视频久久| 中文字幕欧美视频在线| 日韩精品免费看| 亚洲国产一区二区三区四区| 国产精自产拍久久久久久蜜| 国产精品久久久久av免费| 青草热久免费精品视频| 欧美精品一本久久男人的天堂| 亚洲在线www| 中文字幕日韩av电影| 欧美性少妇18aaaa视频| 日韩美女中文字幕| 91成人在线视频| 欧美亚洲免费电影| 国产主播在线一区| 亚洲免费视频在线观看| 亚洲欧美国产日韩天堂区| 91av在线免费观看视频| 国产精品96久久久久久又黄又硬| 91大神在线播放精品| 久久亚洲成人精品| 欧美视频在线观看免费网址| 国产精品一香蕉国产线看观看| 日韩成人在线视频观看| 欧美区在线播放| 欧美在线视频播放| 91精品在线观| 亚洲黄色在线观看| 亚洲天堂影视av| 亚洲女成人图区| 日韩精品中文字幕在线播放| 精品自拍视频在线观看| 国产一区二区三区免费视频| 欧美在线视频一二三| 日韩欧美国产高清91| 亚洲一区av在线播放| 中文字幕亚洲在线| 色无极亚洲影院| 亚洲三级免费看| 日韩av色在线| 91在线视频九色| 色综合久久88| 91麻豆国产精品| 欧美精品videofree1080p| 欧美性猛交xxxx免费看漫画| 欧美三级xxx| 欧美性猛交xxxx乱大交极品| 精品日韩视频在线观看| 91精品久久久久久久久久入口| 欧美精品在线看| 国产精品久久久久久久久久免费| xxxxx成人.com| 久久不射电影网| 国产精品视频内| 亚洲精品不卡在线| 欧美大片免费看| 欧美成人第一页| 日韩一区二区在线视频| 欧美成人激情视频| 欧美疯狂做受xxxx高潮| 国产欧美在线播放| 欧美孕妇毛茸茸xxxx| 日韩在线一区二区三区免费视频| 亚洲一区二区免费| 97在线视频免费观看| 久久精品国产一区| 中文字幕9999| 在线播放日韩av| 国产91精品久久久久久| 国产97在线播放| 欧美日韩福利电影| 久久亚洲影音av资源网| 51视频国产精品一区二区| 亚洲国产精品一区二区久| 精品久久久久久中文字幕一区奶水| 欧美最猛黑人xxxx黑人猛叫黄| 一区二区三区国产视频| 奇米成人av国产一区二区三区| 亚洲欧美在线一区二区| 国产999精品久久久影片官网| 夜夜嗨av色综合久久久综合网| 精品毛片三在线观看| 欧美精品国产精品日韩精品| 成人性生交大片免费看小说| 亚洲黄页网在线观看| 在线观看亚洲区| 亚洲欧美在线免费观看| 中文字幕免费精品一区高清| 丝袜一区二区三区| 亚洲日本aⅴ片在线观看香蕉| 欧洲精品毛片网站| 91亚洲国产精品| 欧美激情亚洲国产| 国产精品久久久久久婷婷天堂| 亚洲天堂男人天堂| 亚洲国产女人aaa毛片在线| 亚洲色图欧美制服丝袜另类第一页| 久久99精品久久久久久琪琪| 国产中文字幕91| 欧美亚洲激情视频| 日韩av片电影专区| 日韩av在线天堂网| 欧美黑人一区二区三区| 欧美激情在线有限公司| 亚洲一区二区三区在线免费观看| www.精品av.com| 激情成人在线视频| 97国产精品人人爽人人做| 国产精品久久二区| 97久久精品在线| 国产精品国产亚洲伊人久久| 国产欧美日韩91| 成人a在线观看| 欧美午夜激情视频| 欧美国产日韩二区| 久久久国产一区| 国产精品久久久久久亚洲影视| 午夜精品久久久久久99热软件| 日韩一区av在线| 日韩精品一区二区三区第95| 日韩黄色高清视频| 久久九九全国免费精品观看| 亚洲精品永久免费精品| 欧美插天视频在线播放| 国产精品久久久久久久久久免费| 亚洲国产91色在线| 亚洲精品小视频在线观看| 大胆人体色综合| 久久国产精品久久久久久久久久| 国产精品白嫩美女在线观看| 日韩精品久久久久|