變量、引用、引用數組和引用對象(1)

爲了更好的理解這些基本概念,在這裏把基本類型變量和引用類型變量做一個比較, 按慣例前者簡稱爲引用,後者簡稱爲變量;數組

我相信這裏面的邏輯是一致的,所以假使站在引用的角度看待變量會是個什麼感受?對象

int a;編譯

int a = 10;class

聲明一個整型變量a;容器

給a初始化爲10;變量

這裏實際上已經默認建立了一個類 叫作引用

public class Int{集合

};錯誤

這樣 上面就能夠陳述爲 建立一個int類的對象a,把這個對象a初始化爲10;由於它是Java自帶的,所以不須要new,也就是新建的意思。new

新建一個類,新建一個包,實質上都是在new一個還沒有存在的事物;

話說回來,當咱們新建一個非自帶的類時,好比

 

public class Student{

 };

這時,想建立一個Student類的對象,則須要new

 

Student a   = new    Student( );

此時默認調了一個無參構造

public class Student{

Student( ){

}

 };

後面那個括號是參數列表容器嗎(這個是我爲了好理解本身捏造的概念)?說白了參數列表就是一個變量集合,也就是一個屬性集,用來表徵引用對象。

咱們不可能建立一個不傳參的引用對象,那沒有實際意義,即不實例化的建立一個對象自己是不符合邏輯的。

所以抽象類才變的有了實用的邏輯意義。

反過來再來看int,假設它也有默認無參構造也須要new

public class Int{

int(){

}

};

 

 

int a;

int a = new int( );

一對比就知道這個是沒有意義的,由於int已是基本類型變量,你傳參沒有意義。

10 就是 10,這個整型對象10是一個基本元素。

一個Student類的對象a,不能說是a 就是10,你能說一個整數是10,但你不能說一個學生a是10;

你能夠說a的年齡是10,由此我彷佛明白了引用的深層意味;

引用對象a(注意相對於基本對象 10)的屬性參數並無存在棧中,棧中只是存了它,和它的地址;

它的地址就像一個路徑指向堆中的變量 

咱們說a的年齡是10,名字張三,十、張三都保存在堆中。這個地址其實也是咱們本身創建的:

 

public class Student{

Student( ){

}

 };

Student a = new Student( );

 

此時僅僅是建立了一個對象a,並無初始化(沒有實例化)的狀態;

我認爲地址就是經過兩段代碼創建的對應的一個路徑。

即Student這個關鍵字,它就是一個地址關鍵因素,由於假使

public class Student{

Student( ){

}

 };

Teacher a = new Student( ); // 這個是要報編譯錯誤,也就是典型的牛頭對馬嘴

Teacher a = new Teacher( ); /這個就跟Student無關,即創建關聯路徑(地址),就是風馬牛不相及;

那接下來說數組。

數組也是引用,咱們知道int[ ]  a = new int[ 4 ];

是聲明(建立了)一個整型數組對象a,這時 a ( a 也是一個變量)的類型就會是一個整型數組,這個數組裏麪包含着一些整型變量;

重點來了,當咱們給a裏面的元素初始化時,咱們是這麼幹的,以給a的第1個元素初始化來講!

a [ 0 ] = 10;   

注意這裏不須要new,爲何?由於前面已經說了,int是基本類型變量,所以不要要new;

可是!你給引用數組(int[ ]算是基本數組)初始化你就得new了並且傳參,由於引用數組裏面的成員是引用;

建立一個Student類的對象,則須要new

Student  a   = new    Student( );

傳參了就是初始化這個a

這兩步合在一塊兒即聲明並初始化(實例化)1個引用對象a;

聲明並初始化1個基本對象就不須要new了 好比 int a = 10;

注意區分辨析概念

建立引用數組對象 和爲引用數組對象中的元素賦值  都須要new  前者new個引用數組對象,後者new個引用類型的引用數組的元素;

相關文章
相關標籤/搜索