【內(nèi)存訪問】【基礎】【基本類型】對象、引用、指針、句柄、值、值對象、量
量:
人們在實踐活動中,為了從量的方面研究事物運動、變化的規(guī)律性,或者事物之間的數(shù)量關系,必須舍棄事物的具體內(nèi)容,而從事物的量的規(guī)律性中抽象出數(shù)的概念。這種抽象最初是通過把握事物運動的聯(lián)系的靜態(tài)過程所達到的,這種考察事物的方式反映在數(shù)學上就產(chǎn)生常量的概念。
數(shù)與量:數(shù)是值,量是量度,數(shù)量是某種抽象緯度作為量度的時候,某個時刻的值是多少。
常量和變量:數(shù)學中表征事物量的一對概念。在事物的特定運動過程中,某量若保持不變,則稱之為常量;反之,則稱之為變量。變量也分為自變量和因變量。
編程:在編程中,量會存在于對象中,也會存在于函數(shù)中。
對象:
編程:對象是指一塊能存儲數(shù)據(jù)并具有某種類型的內(nèi)存空間 一個對象a,它有值和地址&a。
對象和基本類型:對象具有類型,有基本類型和自定義的類型,自定義類型由基本類型構成。
自定義類型的對象:因為自定義類型的對象存在值的部分,而且值基本由編程語言的基本類型組成,讓這些基本類型的值來描述抽象對象的某個維度的量度,所以對象的成員中會有常量(const)和變量之分,常量是對象中不能改變的值,變量是對象中可以改變的值。
封裝基本類型:在編程中,如果因為基本類型賦予了意義,所以可以單獨封裝基本類型,達到可以賦予方法、封裝邏輯的效果。
指針:
指針本身是一個對象(一種基本類型對象),它的特殊功能是賦予了如訪問地址等各種方法,它同樣有地址&p和存儲的值p,&p的位置可以在堆中,也可以在棧中。
指針本身占用了一小塊內(nèi)存空間(它本身不是地址,地址就是一串數(shù)字),而這塊內(nèi)存空間是用來寫入一個地址數(shù)據(jù)的。從對象角度看以下兩點:
指針的值:內(nèi)存地址
指針的類型:指向int的類型,指向char的類型。如下:
int* p; char* p;
如果我們要以p中存儲的數(shù)據(jù)為地址,來訪問對象的值,則要在p前加解引用操作符"*",即*p(這是指針對象的特殊能力),因為指針是對象,具有一個量度,所以這個量度看,就有指針常量和指針變量,指針常量是指指針內(nèi)的地址p不能被修改,反之指針變量是可以改變的。而常量指針(指向常量的指針)是指,p指向的對象a是常量,a不能被修改的。
常量指針:pointer to const,指向常量的指針;
指針常量:const point,指針值是常量;在C++中,引用就是指針常量,所以引入是不能變的
指針變量:var point,可以改變的常量;
引用:
指針常量,在Java中也是如此,所以只能值復制,值傳遞。而Java中的 a==null,是指引用還不存在。引用一旦存在,即不為空。
句柄:
句柄屬于對象定位技術之一,句柄也是一種特殊的對象,通常放在句柄池中。
一個句柄包含的內(nèi)容有:
- 指向對象實例指針數(shù)據(jù)
- 指向對象類型的指針數(shù)據(jù)
所以句柄的好處是,對象被移動(例如GC)后只需要修改一次句柄中的地址,但如果reference直接引用對象,那么就需要修改多個reference。句柄壞處就是需要兩次尋址。
值:
值一般是常量,也是很多語言中的基本數(shù)據(jù)類型,通常值不理解為對象。所以理解int i = 10,其中的i是值,所以棧中要訪問對象中的int i,則需要做值傳遞,把堆中的值復制到棧中,然后做計算,并把計算出來的新值復制到堆中。
值對象:
一個屬于常量的對象,DDD中常提及,特指改對象不可變,但一般要應用實現(xiàn)這種限制,也有例外,如Java有一種特殊的值對象,就是String,是JVM層面的限制。
類文件:
我們通常在類文件中定義一個成員變量,類文件其實是在描述實例化的對象。
變量名:方便給人閱讀的,機器不閱讀,Java角度看,不管這個命名多長,都只會放在方法區(qū)中,存在常量池中。這個聲明變量在編譯實例化之后只是一個類型信息,結構信息。
類對象:如果把編譯后的類文件也抽象為一個對象,就是類對象。類對象可以有狀態(tài),基本是靜態(tài)成員變量的狀態(tài)。

浙公網(wǎng)安備 33010602011771號