posts - 89,  comments - 98,  trackbacks - 0

          對與java中的final變量,java編譯器是進(jìn)行了優(yōu)化的。每個使用了final類型變量的地方都不會通過連接而進(jìn)行訪問。比如說Test類中使用了Data類中一個final的int數(shù)字fNumber=77,這時候,java編譯器會將77這個常數(shù)編譯到Test類的指令碼或者常量池中。這樣,每次Test類用到fNumber的時候,不會通過引用連接到Data類中進(jìn)行讀取,而是直接使用自己保存在類文件中的副本。


          對與java中的final變量,java編譯器是進(jìn)行了優(yōu)化的。每個使用了final類型變量的地方都不會通過連接而進(jìn)行訪問。比如說Test類中使用了Data類中一個final的int數(shù)字fNumber=77,這時候,java編譯器會將77這個常數(shù)編譯到Test類的指令碼或者常量池中。這樣,每次Test類用到fNumber的時候,不會通過引用連接到Data類中進(jìn)行讀取,而是直接使用自己保存在類文件中的副本。
          用程序說話:
          Test.java:

          public class Test{
          ?public static void main(String[] args){
          ??System.out.println(Data.fNumber);
          ?}
          }


          Data.java:

          public class Data{
          ?public static final int fNumber=77;?
          }

          執(zhí)行命令和結(jié)果:

          Microsoft Windows XP [版本 5.1.2600]
          (C) 版權(quán)所有 1985-2001 Microsoft Corp.

          C:\Documents and Settings\zangmeng>cd ..

          C:\Documents and Settings>cd ..

          C:\>javac Test.java

          C:\>java Test
          77

          C:\>


          這時候,我們更改Data.java的內(nèi)容:
          public class Data{
          ?public static final int fNumber=777;?
          }

          然后執(zhí)行如下命令:

          C:\>javac Data.java

          C:\>java Test
          77

          C:\>

          這里我們看到,雖然Data.java中的fNumber已經(jīng)更改為777,而且已經(jīng)重新編譯了,但是因為編譯器把fNumber的副本保存Test類中,所以在重新編譯Test類的前,Test類一直把fNumber認(rèn)為是77而不是777。下面我們變異Test.java,再執(zhí)行,看看結(jié)果。

          C:\>javac Test.java

          C:\>java Test
          777

          C:\>
          這時候,我們看到,重新編譯的Test類將新的777數(shù)值封裝到了自己類中。

          整個過程如下:
          Microsoft Windows XP [版本 5.1.2600]
          (C) 版權(quán)所有 1985-2001 Microsoft Corp.

          C:\Documents and Settings\zangmeng>cd ..

          C:\Documents and Settings>cd ..

          C:\>javac Test.java

          C:\>java Test
          77
          //在這里改變了Data.java的內(nèi)容
          C:\>javac Data.java

          C:\>java Test
          77

          C:\>javac Test.java

          C:\>java Test
          777

          C:\>

          posted on 2006-07-28 09:36 水煮三國 閱讀(286) 評論(1)  編輯  收藏 所屬分類: J2SE

          FeedBack:
          # re: 轉(zhuǎn):使用Java中的final變量需要注意的地方
          2006-07-28 09:38 | 水煮三國
          這里要注意的一點:就是前提是test在未編譯前  回復(fù)  更多評論
            
          <2006年7月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(4)

          隨筆分類(85)

          隨筆檔案(89)

          文章分類(14)

          文章檔案(42)

          收藏夾(37)

          java

          oracle

          Sybase

          搜索

          •  

          積分與排名

          • 積分 - 211137
          • 排名 - 265

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 崇阳县| 阿拉善右旗| 张家港市| 辉县市| 法库县| 萨嘎县| 镇原县| 庆阳市| 精河县| 防城港市| 临桂县| 商城县| 泗水县| 饶阳县| 垫江县| 丘北县| 颍上县| 阿鲁科尔沁旗| 南城县| 尉犁县| 金山区| 哈巴河县| 新泰市| 自治县| 长垣县| 新津县| 福泉市| 白朗县| 台中县| 浦东新区| 平和县| 上饶县| 松阳县| 赤水市| 达孜县| 禄丰县| 松潘县| 和平县| 庆元县| 大同县| 丰原市|