C 中new乙個物件的過程說明

2021-07-27 03:31:15 字數 1678 閱讀 2058

在**中我們經常能看到下面這樣的語句。

[csharp]

view plain

copy

a a = 

newa();(1)  

b b = null

;(2)  

c c;(3)  

**(1

)建立a

的物件並對其進行初始化。

a:類;

new a():建立

a的物件並對其初始化;

a:引用,指向

new a()

這個物件的引用。

注意:a不是a

的物件,

new a()才是a

的物件。

**(2

)宣告引用

b,並指向

null。

b:類;

b:引用,指向的物件為

null

(空)。

**(3

)與**(2

)一樣,宣告乙個引用。

與**(2

)的區別是:**(3)中

宣告的引用

c不指向任何物件。 。

由上面的分析可以了解到,在c#

中例項化乙個物件時,需要經歷下面這幾步:

若沒有使用new關鍵字

建立類的例項,則僅僅建立引用,指向的物件為

null。

例項說明

[csharp]

view plain

copy

public

class

examplemodel  

public

string

c2   

}  examplemodel e1 = new

examplemodel();  

examplemodel e2 = null

;  examplemodel e3;  

if(e1 == 

null

)    

else

");  

}  if

(e2 == 

null

)    

else

");  

}  if

(e3 == 

null

)    

else

");  

}  

編譯**,會出現編譯錯誤,提示「使用了未賦值的區域性變數

e3」,原因是並未對

e3進行初始化,但是使用

e2變數時並不會產生編譯錯誤,因為

e2已經被初始化了,只是初始化的值為

null

而已,這並不影響編譯的通過。

注釋掉e3 部分的**,執行程式得到下圖所示的結果。

在開發過程中,我們還是盡量不要讓乙個引用指向null

,否則在執行過程中很容易出現空引用的異常。 修改

e2部分的**,去掉e2是否為空引用的條件判斷,並執行程式。

執行中,會產生「未將物件引用設定到物件的例項。」的異常。(原因***。)

同樣去掉e1

部分中是否為空引用的條件判斷語句,再次執行程式,一切正常。(因為e1指向了不為null的物件)

此文章源自於【

關於new乙個物件的過程說明

關於new乙個物件的過程說明 a a new b 的意義 前提 a是b的父類 1 建立乙個類a的引用a 2 建立乙個類b的例項 3 把類b的引用賦值給a a a new a 建立a的物件並對其進行初始化。a 類new a 建立a的物件並對其初始化。類似構造乙個函式,分配記憶體空間 a 引用,指向ne...

new乙個物件的過程

class a public void a string name,int age class b 執行順序 1 因為new用到了 a.class,所以會先找到a.class檔案並載入到記憶體中 2 執行該類中的static 塊,如果有的話,給a.class類進行初始化。3 在堆記憶體中開闢空間,分...

new乙個物件的過程

1.靜態 塊 2.預設初始化 3.構造 塊 4.構造方法 靜態 塊先執行,構造 塊執行,物件內執行 class person static public class persondemo2 執行結果 列印 靜態 塊1 構造 塊2 建構函式3 class a public void a string ...