日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

淺析Java中的final關鍵字

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

淺析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" 生活不易,碼農辛苦
    如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
    程序員人生
    ------分隔線----------------------------
    分享到:
    ------分隔線----------------------------
    關閉
    程序員人生
    主站蜘蛛池模板: 日韩在线免费观看视频 | 久久久国产精品入口麻豆 | 国产二区精品 | 亚洲一级免费视频 | 中文字幕 欧美 日韩 | 久久国产成人精品av | 欧美成人免费网站 | 久久婷婷色综合 | 九九精品视频在线 | 欧美日韩三区 | 国产日韩欧美视频 | 久久久久久久久一区二区 | 99麻豆久久久国产精品免费 | 精品一区二区三区国产 | 国产小视频在线观看 | 91久久精品国产91久久 | 伊人久久视频 | www.av在线 | 一区二区三区在线播放 | 超碰三级电影 | 国产一区二区三区视频在线 | 精品一区二区电影 | 欧美a在线| 在线观看视频一区 | 99re99热| 国产精彩视频 | 欧美日韩国内 | 看中国毛片 | 午夜精品 | 中文字幕精品久久 | 黄色片视频在线观看 | 99精品热 | 一区在线免费观看 | 不卡中文一二三区 | 日韩美女毛片 | 色网影院| 黄色日b| 久久久久一区二区 | 日韩欧美不卡视频 | 久久久69| 国产一区二区三区手机在线 |