亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學習啦 > 知識大全 > 知識百科 > 百科知識 > 變量和對象的區(qū)別是什么意思

      變量和對象的區(qū)別是什么意思

      時間: 肖陽1034 分享

      變量和對象的區(qū)別是什么意思

        對象和變量這兩個概念莫要搞亂,頸是頸,椎是椎,雖然兩者都對應著一塊內(nèi)存,但是從不同的角度去理解內(nèi)存就會產(chǎn)生不同的意義。下面就讓學習啦小編來為大家介紹一下吧,希望大家喜歡。

        變量與對象

        變量:所謂變量就是一種定義,通過定義編譯器將會開辟一段空間,并將這段內(nèi)存空間和這個變量的名字捆綁在一起。從這個意思去理解,其實說白了:變量名就是內(nèi)存在代碼中可視化的一個符號。也就是說,如int a,a只是內(nèi)存中某段地址在代碼中可視化的一個符號,a本身作為符號并不占用空間,占用空間的是a所對應著的那個變量,通過a這個符號我們可以引用到該變量在內(nèi)存中的位置。就好比是人和名字的關(guān)系,人作為一個真真正正的實體,是占用地球的物理空間的,是一個真實的存在,而這個人的名字只是代表了這個人的一個符號,本身并沒有占用地球的物理空間,只是在他媽把他生下來的時候,把人這個實體和名字捆綁在了一起,因此,我們引用這個人的名字的時候,就等于我們找到了這個人。

        對象:對象就是內(nèi)存中一段有類型的區(qū)域。從這句話的描述上來看,對象至于變量,似乎更關(guān)注的是這對內(nèi)存的類型,而不是名字。不能說變量就是對象,或者對象就是變量,嚴格來說,對象就是用來描述變量的。一點佐證是,C++中的臨時變量的概念,如傳參時生成的臨時變量,該變量在內(nèi)存中存在,但是是沒有名字的,因此在代碼中無法可視化,我們就無法通過名字去引用這個臨時變量。

        兩者的區(qū)別與聯(lián)系

        從上面的兩個描述中我們可以看到,兩者都是用來描述一段內(nèi)存的,但是是從不同的角度去描述:

        變量更強調(diào)的是變量名這個符號的含義,更強調(diào)名字與內(nèi)存的聯(lián)系,而不必關(guān)注這段內(nèi)存是什么類型,有多少字節(jié)長度,只關(guān)注這個變量名a對應著某段內(nèi)存。

        而對象的描述更強調(diào)的是內(nèi)存的類型而不在乎名字,也就是說,從對象的角度去看內(nèi)存,就需要清楚這段內(nèi)存的字節(jié)長度等信息,而不關(guān)注這個對象在代

        舉例:

        int a;

        如果我們說a是個變量,那我們關(guān)注的只是a這個名字對應著一塊內(nèi)存,當我們引用a時,我們能明確的知道我們引用的是a這個名字所對應的內(nèi)存空間,而不是別的,也不去關(guān)注這個a的內(nèi)存是個int啊char啊之類的什么類型。如果我們說a是個對象,則我們需要知道這個對象具體是什么類型,當我們引用并操作a的時候,就能根據(jù)類型信息做一些符合類型語義的操作,而不是暴力訪問內(nèi)存,任意解析內(nèi)存中的數(shù)據(jù)碼中是否有一個變量名來引用到這段內(nèi)存。

        對象與對象變量

        要想使用對象,就必須首先構(gòu)造對象,并指定其初始狀態(tài)。然后,對對象施加方法。

        在Java程序設(shè)計語言中,使用構(gòu)造器(constructor)構(gòu)造新實例。構(gòu)造器是一種特殊的方法,用來構(gòu)造并初始化對象。下面看一個例子。在標準Java類庫中包含一個Data類。它的對象將描述一個時間點,例如"December 31,1999,23:59:59 GMT".

        構(gòu)造器的名字應該與類名相同,因此Data類的構(gòu)造器名為Data。要想構(gòu)造一個Data對象,需要在構(gòu)造器前面加上new操作符,如下所示:

        new Data()

        這個表達式構(gòu)造了一個新對象。這個對象被初始化為當前的日期和時間。

        如果需要的話,也可以將這個對象傳遞給一個方法:

        System.out.println(new Data());

        相反,也可以將一個方法應用于剛剛構(gòu)造的對象上。Data類中有一個toString方法。這個方法將返回日期的字符串描述。下面的語句可以說明如何將toString方法應用于新構(gòu)造的Data對象上。

        String s=new Data().toString();

        在這兩個例子中,構(gòu)造的對象僅使用了一次。通常,希望構(gòu)造的對象可以被多次使用,因此,需要將對象存放在一個變量中;

        Data birthday=new Data();

        在對象與對象變量之間存在著一個重要的區(qū)別。例如,語句

        Data deadline;//deadline doesn't refer to any object

        定義了一個對象變量deadline,它可以引用Data類型的對象。但是,一定要認識到:變量deadline不是一個對象,實際上也沒有引用對象。此時,不能將任何Data方法應用于這個變量上。語句

        s=deadline.toString();

        將產(chǎn)生編譯錯誤。。

        必須首先初始化變量deadlin.這里有兩個選擇。當然可以用新構(gòu)造的對象初始化這個變量:

        deadline=new Data();

        或者讓這個變量引用一個已存在的對象:

        deadline=birthday;

        選擇,這個兩個變量引用同一個對象

        一定要認識到:一個對象變量并沒有實際包含一個對象,而僅僅引用一個對象。

        在Java中,任何對象變量的值都是對存儲在另外一處的一個對象的引用。new操作符的返回值夜是一個引用。下列語句:

        Data deadline=new Data();

        有兩個部分。表達式new Data()構(gòu)造了一個Data類型的對象,并且它的值是對新創(chuàng)建對象的引用。這個引用被存儲在變量deadli中。

        可以顯式地將對象變量設(shè)置為空(null),表明和這個對象變量目前并沒有引用任何對象。

        deadline=null;

        ...

        if(deadline!=null)

        System.out.println(deadline);

        如果將一個方法應用于一個值為null的對象上,就會產(chǎn)生運行錯誤。

        birthday=null;

        String s=birthday.toString();//runtime error!

        變量不會自動地初始化為null,而必須對他們進行初始化,調(diào)用new或?qū)⑺鼈冊O(shè)置為null。
      猜你喜歡

      1.值類型和引用類型的區(qū)別

      2.Java中變量和常量之間的區(qū)別

      3.什么是對象數(shù)組

      4.類方法和實例方法的區(qū)別

      5.什么是面向?qū)ο?/a>

      2908547