posts - 24,  comments - 29,  trackbacks - 0

                  要想正確地理解控制的作用,我們必須首先理解一下作用域的概念。對于程序控制,你應該首先理解不同的控制在什么樣的范圍內起作用,這就是我們所說的作用域。
                  對于作用域中所定義的各種變量,作用域限定了這些變量的可被訪問范圍,也就是說“變量的可見性”及“存在時間”。
                  所謂變量的可見性:是指只有在規定的作用域范圍內,變量是可以被訪問及操縱控制的。
                  所謂變量的存在時間:是指只有在規定作用域范圍內,變量是存活的,一旦超出了變量的存活范圍,變量就不存在了,對于這種不存在的理解應該有兩種情況:
                  1)內存立即被回收,變量在內存中不存在了,這種情況主要針對于基本類型。
                  2)對象句柄不存在了,對象不再被操縱,對象的內容還存在,這種情況主要針對對象類型。

          一、塊作用域
                  一個塊或復合語句是用一對花括號“{}”括起來的任意數量的簡單Java語句。塊定義了變量的作用范圍。對于塊我們主要理解以下兩方面就可以了:
                  1)塊是可以被嵌套的
                  2)嵌套塊內不可以聲明相同名字的變量

          /*塊的嵌套*/

          public class PartArea
          {
             public static void main(String[] args)
             {   //main方法開始
               int a = 15;
               int b = 2;
               if (a == 15)
                {   //條件塊開始
                  double c = 2;   //c是可用的
                  System.out.println(a + "/" + c + "=" + (a / c));
                  System.out.println("the value a is" + a);   //a是可用的
                 }   //條件塊結束
                 //System.out.println("the value c is" + c);   //在這里c已經不再可用
               System.out.println(a + "/" + b + "=" + (a / b));
               System.out.println(a + "%" + b + "=" + (a % b));
             }   //main方法結束
          }

          輸出結果:
                            15 / 2.0 = 7.5
                             the value a is 15
                            15 / 2 = 7
                            15 % 2 = 1

          分析:
                   在這個程序中,我們在main方法中嵌套了一個條件判斷塊,也就是說在main方法中包含了另一個塊。
                   變量a在main方法是可見的,也就是說只有在main方法結束處,變量a才失去它存活的空間,由于條件塊是包含在main方法塊中的,所以在條件塊中我們依然可以操縱或訪問到變量a。對于變量c ,由于它只是在條件塊中定義,同樣的理論變量c也是在條件塊結束處的花括號處結束它的“可見性”。

          /*塊的嵌套*/

          public class PartArea2
          {
             int a = 10
             public static void main(String[] args)
             {   //main方法開始
               int a = 15;
               int b = 2;
               if (a == 15)
                {   //條件塊開始
                  double c = 2;   //c是可用的
                  System.out.println(a + "/" + c + "=" + (a / c));
                  System.out.println("the value a is" + a);   //a是可用的
                 }   //條件塊結束
                  // System.out.println("the value c is" + c);   //在這里c已經不再可用
               System.out.println(a + "/" + b + "=" + (a / b));
               System.out.println(a + "%" + b + "=" + (a % b));
             }   //main方法結束
          }
          輸出結果:
                            15 / 2.0 = 7.5
                             the value a is 15
                            15 / 2 = 7
                            15 % 2 = 1
          分析:
                   為什么能正確的執行了呢?不是說嵌套塊不能重復定義嗎?這里我就向讀者解釋這個讓很多程序員容易混淆的問題:
                   1)所謂嵌套塊,是方法內的嵌套,不包括類的花括號。
                   2)換個角度理解,不允許重復定義的是局部變量,對于成員變量或類變量是可以被重復定義的,局部變量的值覆蓋全局變量的值。

          二、對象的存活時間
                  Java中的對象,只有在存活時間上與主類型(基本類型)不一致,在變量的作用域的其它方面是一致的。
                  在Java中用new關鍵字創建一個對象的時候,它在內存堆中生成了一個對象的實例,我們要想操縱這個對象,要給這個對象賦與一個句柄,例如:
                                              String   s   =   new   String(" 這是一個字符串對象")
                 “s”也就是我們所說的主類型的變量名,也被稱為句柄。句柄s在作用域結束時,句柄s消失,但對于對象本身依然存在于內存中。由于句柄的消失,我們已經無法再去操縱對象了,所以從表面上來看,對象也就不存在了。
                 
          posted on 2007-05-15 14:36 心隨Wǒ動 閱讀(348) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          QQ群:9028409
          QQ:29850994
          點擊這里給我發消息

          留言簿(2)

          隨筆檔案

          積分與排名

          • 積分 - 31472
          • 排名 - 1347

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 秀山| 锦州市| 北海市| 房产| 修文县| 松溪县| 金塔县| 清水河县| 武功县| 昌吉市| 吉林市| 普陀区| 昆山市| 扎赉特旗| 柘荣县| 巴彦县| 宁安市| 南昌市| 梨树县| 洛川县| 胶南市| 蛟河市| 芜湖市| 岫岩| 阿拉善左旗| 得荣县| 张家口市| 鹿泉市| 海盐县| 改则县| 凉城县| 贺州市| 苏尼特右旗| 东兰县| 木里| 斗六市| 东乌珠穆沁旗| 洛扎县| 大关县| 堆龙德庆县| 阿图什市|