<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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

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

    二、變量的含義

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

    三、變量的分類

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

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

    /*測(cè)試全局變量的操作*/

    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)部訪問到并對(duì)a的值進(jìn)行了修改,在main方法內(nèi)部我們也可以訪問到a的值。
            所謂全局變量就是在程序運(yùn)行的全過程中,由程序自動(dòng)向內(nèi)存申請(qǐng)的內(nèi)存空間,空間的內(nèi)容可以在程序全過程中進(jìn)行操縱或修改。

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

    /*測(cè)試局部變量的操作*/

    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)才能被操作。這是很重要的,在寫程序時(shí)一定要清楚知道自己所定義的變量的訪問范圍是多大,不要試圖在范圍以外訪問變量。

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

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

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

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

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

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

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

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

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

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

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

    /*傳值引用的實(shí)質(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的值。這就是傳值引用的實(shí)質(zhì),傳遞過去的是值的一個(gè)拷貝。

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

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

    public class Student
    {
       String strName;
    public static void main(String[] args)
       {
        Student aStudent = new Student();
    //得到對(duì)象Student類的一個(gè)句柄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 唐僧
    分析:
              對(duì)象傳遞是傳址引用。對(duì)于對(duì)象,它傳遞的是一個(gè)句柄的拷貝,不同的句柄操縱是一個(gè)對(duì)象,也稱按址傳遞。
              
    posted on 2007-04-28 11:04 心隨Wǒ動(dòng) 閱讀(819) 評(píng)論(2)  編輯  收藏

    FeedBack:
    # re: 變量
    2007-08-17 15:37 | paul
    今天遇到一個(gè)基礎(chǔ)的問題,如果全局變量和局部變量同名的話,且在局部變量作用域內(nèi)該變量值已經(jīng)改變,那在局部變量作用于外該變量的值是否會(huì)被改變那?我的測(cè)試的代碼
    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ù)  更多評(píng)論
      
    # re: 變量[未登錄]
    2007-08-28 15:55 | 我心依舊
    全局和局部變量名字一樣也沒有沖突,正如你的測(cè)試代碼er.t(); 調(diào)用t方法當(dāng)然是打印局部的s變量。而下邊是直接用類名引用的全局變量s。

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

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

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


    網(wǎng)站導(dǎo)航:
     
    <2007年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

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

    留言簿(2)

    隨筆檔案

    積分與排名

    • 積分 - 31334
    • 排名 - 1348

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲AⅤ永久无码精品AA| 在线观看免费大黄网站| 国产V亚洲V天堂无码久久久| 免费人人潮人人爽一区二区| 亚洲国产婷婷香蕉久久久久久| 美女羞羞免费视频网站| jlzzjlzz亚洲乱熟在线播放| 国产精品99爱免费视频| 久久久久亚洲AV无码专区桃色| 成全在线观看免费观看大全| 亚洲国产AV无码专区亚洲AV | 666精品国产精品亚洲 | 国产成人久久精品亚洲小说| 免费一级特黄特色大片在线观看| 少妇亚洲免费精品| 丁香五月亚洲综合深深爱| 无码国产精品一区二区免费16| 亚洲无人区视频大全| 好男人视频社区精品免费| 日韩精品无码永久免费网站| 亚洲精品夜夜夜妓女网| 88av免费观看入口在线| 亚洲精品蜜夜内射| 亚洲日本在线观看视频| 日韩免费在线视频| 亚洲AV成人影视在线观看 | 亚洲成网777777国产精品| 免费无码一区二区三区蜜桃| 亚洲国产精品张柏芝在线观看| 天天看免费高清影视| 久久99久久成人免费播放| 亚洲综合一区二区| 亚洲成av人在片观看| 亚洲国产精品免费在线观看| 亚洲精品无码久久久久YW| 在线观看亚洲成人| 青苹果乐园免费高清在线| 无套内射无矿码免费看黄| 99亚洲精品高清一二区| 免费在线观看的黄色网址| 亚洲精品视频免费看|