posts - 24,  comments - 29,  trackbacks - 0
          一、變量的聲明

                  變量是程序中最重要的內(nèi)容之一,在Java中聲明的任何一個變量必須分配一個類型,聲明一個變量時,應(yīng)該先寫上所聲明變量的類型,隨后再寫上變量的名字,而且名字的后面要加上一個西文狀態(tài)下的“;”。
                  這個分號是必須寫的,這是Java語句結(jié)束符號。

                  變量命名的規(guī)則重點強調(diào)以下幾點:
                  1)變量名中不能有空格;
                  2)變量名大小寫很重要;
                  3)變量名是不限長度的;
                  4)保留字及關(guān)鍵字不能作變量名。

                  同一類型的不同變量,可以聲明在一行,也可以聲明在不同的行。如果聲明在同一行,不同的變量之間要用逗號分隔。

          二、變量的含義

                  所謂變量就是“在變量的有效作用范圍內(nèi),向物理內(nèi)存申請的一段內(nèi)存空間,在程序運行過程中,空間內(nèi)的值是變化的“。為了程序操作的方便,我們對內(nèi)存空間起了個名字,這個名字就是變量名,內(nèi)存空間內(nèi)的值就是變量值。由此我們可以得出這樣一個結(jié)論:申請了內(nèi)存空間,并不意味著空間內(nèi)就要有值,要想使空間內(nèi)有值,必須要放入值。例如:我們聲明某個變量,可以這么來表示:“int a;”,其中a就是變量名,但現(xiàn)在沒有相應(yīng)的值,也就是說在內(nèi)存空間內(nèi)沒有值,如果令“int a = 3;”,現(xiàn)在我們不但申請了內(nèi)存空間,并且把3放入了內(nèi)存空間,a是變量名,3是變量值。

          三、變量的分類

                  根據(jù)不同的分類方法,變量有不同的名稱。

                  1)根據(jù)作用范圍
                   根據(jù)作用范圍,變量可分為全局變量局部變量
                   全局變量:是在類的整個范圍內(nèi),都起作用的變量。它的影響范圍也是在整個類之內(nèi),在類的任何位置都可以對該變量進行操作。例如:

          /*測試全局變量的操作*/

          public class GlobalVar
          {
            int a = 10;
            double b = 20;
            public static void main(String[] args)
            {
              GlobalVar globalVar = new GlobalVar();
              System.out.println("the value a = " + globalVar.a);
              globalVar.print();
              System.out.println("after changed the value a = " + globalVar.a)
             }
          public void print()
           {
              System.out.println("the global variable a = " + a + ",b = " + b);
              a = 30;
              System.out.println("the global variable a = " + a + ",b = " + b);
           } 
          }
          輸出結(jié)果:
                            before changed value a = 10
                            the global variable a = 10 ,b = 20.0
                            the globa variable a  = 30 ,b = 20.0
                            after changed the value a =30
                  分析:
                  a與b是在print方法外面定義的,但可以在方法內(nèi)部訪問到并對a的值進行了修改,在main方法內(nèi)部我們也可以訪問到a的值。
                  所謂全局變量就是在程序運行的全過程中,由程序自動向內(nèi)存申請的內(nèi)存空間,空間的內(nèi)容可以在程序全過程中進行操縱或修改。

                  局部變量:局部變量是針對于全局變量的,在程序運行的局部過程中,由程序自動向內(nèi)存申請的內(nèi)存空間,空間的內(nèi)容在程序的局部范圍內(nèi)可以被操縱或修改。例如:

          /*測試局部變量的操作*/

          public class LocalVar
          {
            public static void main(String[] args)
             {
              LocalVar localVar = new LocalVar();
              localVar.print();
             }
           public void print()
            {
             int a = 10;
             double b = 20;
             System.out,println("the local variable a = " + a + ",b = " + b);
             a = 30;
             System.out.println("the local variable a = " + a + ",b = " + b);
             }
          }

          輸出結(jié)果:
                            the local variable a = 10,b = 20.0
                            the local variable a = 30,b = 20.0
                       分析:
                       局部變量只能在它的定義范圍內(nèi)才能被操作。這是很重要的,在寫程序時一定要清楚知道自己所定義的變量的訪問范圍是多大,不要試圖在范圍以外訪問變量。

                    2)按照類型分 
                    按照類型分,可以將變量分為基本類型變量和對象類型變量。
                    所謂基本類型變量,就是指我們前面講述的八種基本類型,除了基本類型變量以外的其它變量,都看成是對象變量。對象類型變量又可稱為實例變量。

                    3)按照所屬范圍分
                    按照所屬范圍分,可以將變量分為類變量、成員變量。
                    所謂類變量,就是用關(guān)鍵字static聲明的全局變量,它是屬于類本身的,不代表任何對象的狀態(tài)。
                    所謂成員變量,就是與類變量相對的,沒有用static聲明的其它的實例變量,它是與具體對象相關(guān)的,保持對象的狀態(tài)。
                   
          四、變量的引用

                   在java中變量的引用主要有兩種方式:傳值引用與值址引用。

                   1、內(nèi)存的分配
                    java中變量主要保存在六個地方:

                   1)寄存器
                    對于java來講,這是最快的保存區(qū)域。位于計算機CPU的內(nèi)部,因為寄存器的數(shù)量十分有限,所以寄存器是很據(jù)需要由編譯器自主分配的,寄存器沒有任何控制權(quán),在程序中也找不到任何寄存器的操作蹤跡。

                   2)棧
                   它是僅次于寄存器的保存區(qū)域,又被稱為隨機訪問存儲區(qū)域。它是通過棧指針來進行操作的,基本類型的變量就是放在這里。但這并不是惟一放到這里的內(nèi)容,還要有一個概念,那就是對象句柄,對象句柄也是放在這里的。

                   3)堆
                   這是一種常規(guī)用途的內(nèi)存池,也就是RAM區(qū)域。在Java中我們的任務(wù)基本上都是在堆中進行,一直所說的對象就位于堆中。

                   4)靜態(tài)存儲
                   這里所說的靜態(tài)是的“位于固定位置”。程序在運行期間,靜態(tài)的數(shù)據(jù)將隨時等候調(diào)用,它也是位于RAM中。在Java中可用static關(guān)鍵字指出一個對象的特定元素是靜態(tài)的,但Java對象本身永遠不可能置于靜態(tài)存儲空間。

                   5)常量存儲
                   常最存儲通常直接寫在程序代碼中,在Java中我們通常是用final來聲明的,這樣做的目的可以保證它們的值永遠不被改變。

                   6)非RAM存儲
                   這主要是針對程序外部的資源而言的。也就是說數(shù)據(jù)完全獨立于程序之外,程序不運行時仍然可以存在,并在程序的控制范圍之外。

                   2、傳值引用
                    傳值引用:主要是針對基本類型而言。所謂傳值引用就是在進行變量的傳遞過程中,傳遞變量實際的值,是一個新的拷貝,一個變量值的改變不會影響另一個變量的改變。例如:

          /*傳值引用的實質(zhì)*/

          public class ValueReference
          {
             int a = 10;
          public static void main(String[] args)
             {
             ValueReference aValue = new ValueReference();
             aValue.print();
             }
          public void print()
             {
             int b = a; //我們將a的值傳給了b
             System.out.println("before changed value a = " + a + ",b = " + b);
             a = 30;  //現(xiàn)在將a的值改變,按照傳值引用的理論,b的值應(yīng)該是a的原來的值
             System.out.println("after changed value a = " + a + ",b = " + b);
             }
          }

          輸出結(jié)果:
                           before changed value a = 10, b = 10
                           after changed value a = 30 , b = 10
          分析:
                   變量a的值傳給了變量b,變量a值的改變并沒有影響到變量b的值。這就是傳值引用的實質(zhì),傳遞過去的是值的一個拷貝。

                   3、傳址引用
                   傳址引用:主要是針對對象操作的。也就是形成了多個變量操縱一個對象的狀態(tài),這種現(xiàn)象的結(jié)果就是任何一個對于句柄操作的變量,都會影響到其它的變量。例如:

          /*傳址引用的實質(zhì)*/

          public class Student
          {
             String strName;
          public static void main(String[] args)
             {
              Student aStudent = new Student();
          //得到對象Student類的一個句柄aStudent
              aStudent.setStudentName("張楠");
              System.out.println("aStudent name is " + aStudent.getStudentName());
              Student bStudent = aStudent;  //將aStudent句柄復(fù)制給nextStudent
              bStudent.setStudentName("唐僧");
              System.out.println("bStudent name is " + bStudent.getStudentName());
              String name = aStudent.getStudentName();
          //再看一下句柄aStudent的內(nèi)容是否改變
              System.out.println("after bStudent the aStudent name is" + name);
             }
          public String getStudentName()
             {
              return strName;
             }
          public void setStudentName(String name)
             {
              strName = name;
              }
          }

          輸出結(jié)果:
                           aStudent name is 張楠
                           bStudent name is 唐僧
                           after bStudent the aStudent name is 唐僧
          分析:
                    對象傳遞是傳址引用。對于對象,它傳遞的是一個句柄的拷貝,不同的句柄操縱是一個對象,也稱按址傳遞。
                    
          posted on 2007-04-28 11:04 心隨Wǒ動 閱讀(822) 評論(2)  編輯  收藏

          FeedBack:
          # re: 變量
          2007-08-17 15:37 | paul
          今天遇到一個基礎(chǔ)的問題,如果全局變量和局部變量同名的話,且在局部變量作用域內(nèi)該變量值已經(jīng)改變,那在局部變量作用于外該變量的值是否會被改變那?我的測試的代碼
          class ter
          {
          public String s="c";
          public static void main(String[] args)
          {
          ter er = new ter();
          er.t();
          System.out.println("the global s value="+er.s);
          }

          public void t()
          {
          String s="b";
          System.out.println("the local s value="+s);
          }
          }
            回復(fù)  更多評論
            
          # re: 變量[未登錄]
          2007-08-28 15:55 | 我心依舊
          全局和局部變量名字一樣也沒有沖突,正如你的測試代碼er.t(); 調(diào)用t方法當(dāng)然是打印局部的s變量。而下邊是直接用類名引用的全局變量s。

          你在方法里直接使用變量s默認順序是先找局部的,局部的找不到在去找全局的。

          你用(類名.變量),當(dāng)然就是直接調(diào)用全局的了。  回復(fù)  更多評論
            

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


          網(wǎng)站導(dǎo)航:
           
          <2007年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          QQ群:9028409
          QQ:29850994
          點擊這里給我發(fā)消息

          留言簿(2)

          隨筆檔案

          積分與排名

          • 積分 - 31456
          • 排名 - 1347

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 怀集县| 赞皇县| 柘城县| 隆安县| 望城县| 长治市| 鲁甸县| 聊城市| 福贡县| 屏东市| 丹东市| 长治市| 任丘市| 安新县| 乌兰浩特市| 隆化县| 宁城县| 扶余县| 新宾| 理塘县| 偃师市| 灌云县| 尉氏县| 安泽县| 鲜城| 祥云县| 寻乌县| 库尔勒市| 梁河县| 五大连池市| 当阳市| 天气| 蒙阴县| 南和县| 方城县| 郁南县| 志丹县| 芷江| 杭锦后旗| 巴南区| 六枝特区|