多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 淺析Java中的final關鍵字

淺析Java中的final關鍵字

來源:程序員人生   發布時間:2015-07-06 10:33:24 閱讀次數:2800次

淺析Java中的final關鍵字

  談到final關鍵字,想必很多人都不陌生,在使用匿名內部類的時候可能會常常用到final關鍵字。另外,Java中的String類就是1個final類,那末今天我們就來了解final這個關鍵字的用法。下面是本文的目錄大綱:

  1.final關鍵字的基本用法

  2.深入理解final關鍵字

  若有不正的地方,請多多體諒并歡迎指正。

  請尊重作者勞動成果,轉載請標明原文鏈接:

  http://www.cnblogs.com/dolphin0520/p/3736238.html

1.final關鍵字的基本用法

  在Java中,final關鍵字可以用來修飾類、方法和變量(包括成員變量和局部變量)。下面就從這3個方面來了解1下final關鍵字的基本用法。

  1.修飾類

  當用final修飾1個類時,表明這個類不能被繼承。也就是說,如果1個類你永久不會讓他被繼承,就能夠用final進行修飾。final類中的成員變量可以根據需要設為final,但是要注意final類中的所有成員方法都會被隱式地指定為final方法。

  在使用final修飾類的時候,要注意謹慎選擇,除非這個類真的在以后不會用來繼承或出于安全的斟酌,盡可能不要將類設計為final類。

  2.修飾方法

  下面這段話摘自《Java編程思想》第4版第143頁:

  “使用final方法的緣由有兩個。第1個緣由是把方法鎖定,以防任何繼承類修改它的含義;第2個緣由是效力。在初期的Java實現版本中,會將final方法轉為內嵌調用。但是如果方法過于龐大,可能看不到內嵌調用帶來的任何性能提升。在最近的Java版本中,不需要使用final方法進行這些優化了。“

  因此,如果只有在想明確制止 該方法在子類中被覆蓋的情況下才將方法設置為final的。

  注:類的private方法會隱式地被指定為final方法。

  3.修飾變量

  修飾變量是final用得最多的地方,也是本文接下來要重點論述的內容。首先了解1下final變量的基本語法:

  對1個final變量,如果是基本數據類型的變量,則其數值1旦在初始化以后便不能更改;如果是援用類型的變量,則在對其初始化以后便不能再讓其指向另外一個對象。

  舉個例子:

  

  上面的1段代碼中,對變量i和obj的重新賦值都報錯了。

2.深入理解final關鍵字

  在了解了final關鍵字的基本用法以后,這1節我們來看1下final關鍵字容易混淆的地方。

1.類的final變量和普通變量有甚么區分?

  當用final作用于類的成員變量時,成員變量(注意是類的成員變量,局部變量只需要保證在使用之前被初始化賦值便可)必須在定義時或構造器中進行初始化賦值,而且final變量1旦被初始化賦值以后,就不能再被賦值了。

  那末final變量和普通變量到底有何區分呢?下面請看1個例子:

1
2
3
4
5
6
7
8
9
10
11
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));
    }
}

  

 View Code

  大家可以先想1下這道題的輸出結果。為何第1個比較結果為true,而第2個比較結果為fasle。這里面就是final變量和普通變量的區分了,當final變量是基本數據類型和String類型時,如果在編譯期間能知道它的確切值,則編譯器會把它當作編譯期常量使用。也就是說在用到該final變量的地方,相當于直接訪問的這個常量,不需要在運行時肯定。這類和C語言中的宏替換有點像。因此在上面的1段代碼中,由于變量b被final修飾,因此會被當作編譯器常量,所以在使用到b的地方會直接將變量b 替換為它的  值。而對變量d的訪問卻需要在運行時通過鏈接來進行。想必其中的區分大家應當明白了,不過要注意,只有在編譯期間能確切知道final變量值的情況下,編譯器才會進行這樣的優化,比以下面的這段代碼就不會進行優化:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {
    public static void main(String[] args)  {
        String a = "hello2" 生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲第一视频网 | 老牛影视在线一区二观看 | 亚洲欧洲精品国产二码 | 最近的中文字幕手机在线看免费 | 国产一级一片免费播放视频 | 欧美操片 | 久久久亚洲欧洲日产国码606 | 碰碰久久 | 国产免费不卡 | 国产精品久久久久久久hd | 国产精品久久久久久久久久久久 | 久久亚洲国产成人影院 | 91精品乱码一区二区三区 | 成人影院www在线观看 | 成 人 a v免费视频 | 欧美高清免费精品国产自 | 性欧美18-19sex性高清播放 | 青青草久热精品视频在线观看 | 国产精品第一区第27页 | 日本不卡免费在线 | 91九色精品国产 | 亚洲天天网综合自拍图片专区 | 亚洲精品乱码久久久久久蜜桃 | 日本在线视频不卡 | 麻豆影视大全 | 91麻豆精品国产91久久久久久 | 亚洲国产成a人v在线 | 日韩欧美~中文字幕 | 国产高清一区 | 久久国产精品免费一区二区三区 | www精品| 武则天全黄肉体毛片免费看 | 羞羞色院91蜜桃在线观看 | 美美女高清毛片视频免费观看 | 亚洲欧洲高清有无 | 亚洲视频在线一区二区 | 国产精品久久久久久久成人午夜 | 日韩一区二区三区四区 | 国产欧美成人免费观看视频 | 久久国产免费 | 欧美日本不卡 |
<label id="r0okb"></label>
<ruby id="r0okb"></ruby>
<span id="r0okb"></span>
<rp id="r0okb"><abbr id="r0okb"></abbr></rp>
  • <ins id="r0okb"><cite id="r0okb"></cite></ins>