你們好,我叫李京陽,,很高興認識你們,之因此我想開一個本身的博客,就是來把本身所瞭解的知識點經過本身的話寫一下,但願被博客園的朋友們點評和一塊兒討論一下,也但願從博客園中多認識一些軟件開發人員!如今我開始講一下面向對象的一點知識,請大家多多點評和討論!!程序員
1. 內存中開闢的空間是必定要回收的.
2. 棧空間: 存儲是局部變量.
當執行完1個做用域的時候. 定義在這個做用域中的局部變量就會被系統當即回收.
因此定義在1個做用域中的變量 不能在另外的1個做用域中訪問.
3. 堆空間: 用來存儲對象
堆空間中的對象若是沒有任何變量指向它的時候,這個對象就被標記爲"垃圾對象",等待垃圾回收器(GC)的回收.
GC回收的頻率是由CLR自行決定的,程序員沒法手動干預.
4. GC類
GC.Collect(). 強制的讓GC來回收堆內存中的垃圾對象函數
1 Person p1 = new Person(); 2 p1.Name = "小明"; 3 p1 = null; 4 GC.Collect(); 5 //暫停程序的執行,直到將全部的垃圾對象回收完畢再繼續 。 6 GC.WaitForPendingFinalizers();
5. 析構函數.
a. 語法
~類名()
{
}
不能有訪問修飾符 不能帶參數.
b.執行時機:
在對象被GC回收的時候. 就會自動的執行對象的析構函數.
對象的生命週期
a. 在對象建立的時候 執行對象的構造函數.
b. 在對象的回收的時候,執行對象的析構函數.
c.析構函數.
特色: 在對象被GC回收以前 自動的執行.
"善後工做" 能夠放在析構函數中.
性能
1. 靜態成員
被static修飾的成員,叫作靜態成員.
實例成員:
沒有被static修飾的成員就叫作實例成員.
this
1 class Person 2 { 3 static Person() 4 { 5 Console.WriteLine("我是靜態構造函數,你咋的?"); 6 } 7 8 public static string name="jack"; 9 public static int age; 10 11 public double weight; 12 13 public static void TestStatic() 14 { 15 Person p = new Person(); 16 p.weight = 187; 17 Console.WriteLine("hello."); 18 }
2. 靜態成員屬於類的. 經過類名直接訪問.
實例成員屬於對象的. 經過對象名去訪問實例成員.
spa
1 public void SayHi() 2 { 3 Person.name = "jack"; 4 } 5 public Person() 6 { 7 age++; 8 //Person.name = "rose"; 9 }
3. 在根據類的模板建立對象的時候,只會去建立實例成員在對象中.
會忽略掉靜態成員, 靜態成員不建立在對象中.
4. 接下來要解決的問題.
a. 靜態成員何時被建立.
b. 建立在什麼地方?
c. 建立多少個?
d. 何時被回收?
關於實例成員.
a. 在建立對象的時候,實例成員跟隨着對象一塊兒建立在堆中.
b. 跟着對象一塊兒建立在堆空間中
c. 有多少個對象實例成員就有多少份.
d. 對象被回收,這個對象中的實例成員就跟隨着一塊兒回收.
靜態成員:
a. 當類第一次被訪問的時候,就會將這個類下面的全部的靜態成員建立在內存中.
b. 建立在靜態存儲區.
c. 靜態成員只建立1次,在類第一次被訪問的時候建立.
d. 靜態成員一旦被建立在靜態存儲區,那麼就不會被回收,直到程序結束.
5. 靜態成員的特色:
a. 只有1份.
變量惟一,不管在什麼地方訪問都是訪問的同1個變量.
b. 一旦建立在靜態存儲區,就不會被回收,直到程序結束.
6. 何時須要把成員定義爲靜態成員.
若是1個變量須要被全部的類或者對象共享.
若是1個方法須要被反覆的調用 那麼咱們就能夠把這個方法定義爲靜態方法.
相反:若是把不應定義爲靜態成員的定義爲了靜態成員 反而會浪費空間 影響性能.
7. 在靜態方法中不能直接去訪問實例成員.
由於當靜態方法執行的時候,實例成員徹底有可能尚未存在,
若是必定要訪問 那麼我那麼就建立1個對象 讓實例成員存在 而後訪問這個對象的實例成員就能夠了.
this關鍵字不能在靜態方法中使用.
由於靜態方法不存在對象中,那麼天然也就表明了對象了.
靜態成員老是優先於對象而存在的,
實例方法中能夠直接訪問靜態成員,由於當實例方法執行的時候 靜態成員確定必定一定存在了
8. 局部變量不容許被static修飾.
由於局部變量要求做用域1完就回收 而static要求不回收.
8. 靜態類
a. 類若是被static修飾,那麼這個類就叫作靜態類.
b. 靜態類中的全部成員要求都是靜態成員.
c. 靜態類不能建立對象. 覺得沒有實例成員,就算能夠建立對象也沒有任何的實際意義.
e. 靜態類不能有構造函數,
9.靜態構造函數
a. 任何類均可以有靜態構造函數.
b. 語法
static 類名()
{
}
靜態構造函數不能有訪問修飾符 不能有參數.code
1 static Person() 2 { 3 Console.WriteLine("我是靜態構造函數,你咋的?"); 4 }
c. 靜態構造函數不能被手動調用.是自動調用的,
類的成員第1次被訪問的時候,自動執行.
靜態構造函數只執行1次,在類的成員第1次被訪問的時候自動執行.對象