在**中我們經常能看到下面這樣的語句。
[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 ...