靜態成員也稱為共享成員,例如靜態屬性 靜態字段 靜態方法;靜態成員可以在類的實例之間共享。
靜態類中只能有靜態成員,不能有實例成員,因為靜態類不能進行實例化;
在非靜態類中 即可以有靜態成員 也可以有非靜態成員;
只要是靜態成員 屬性 字段 方法,都需要用類名去調用;
靜態成員和實例成員的區別:
靜態成員需要通過static修飾,非靜態成員不需要通過static修飾;
靜態成員屬於類,可以直接通過“類名.靜態成員”的方式訪問;
非靜態成員,必須實例化對象后,通過對象.實例成員來訪問;
當類第一次加載的時候(第一次被加載到內存的時候),該類下的所有的靜態成員都會被加載,實例成員有多少個對象,就會創建多少個對象;靜態成員會被加載到靜態存儲區,直到程序退出時才會被釋放;
由上面顯然可知,定義靜態的成員是可以影響程序的執行效率的。那么什么時候定義靜態的成員變量呢?
①變量需要被共享的時候②方法需要被反復的調用的時候
靜態成員和實例成員的區別:
靜態成員是需要通過static關鍵字來修飾的,而實例成員不用static關鍵字修飾。他們區別如下代碼:
當類第一次被加載的時候(就是該類第一次被加載到內存當中),該類下面的所有靜態的成員都會被加載。實例成員有多少對象,就會創建多少對象。
而靜態成員只被加載到靜態存儲區,只被創建一次,且直到程序退出時才會被釋放。
看下面的代碼:
那么在內存中發生了什么呢?如下圖:
由上面顯然可知,定義靜態的成員是可以影響程序的執行效率的。那么什么時候定義靜態的成員變量呢?
①變量需要被共享的時候②方法需要被反復的調用的時候
靜態成員是需要通過static關鍵字來修飾的,而實例成員不用static關鍵字修飾。他們區別如下代碼:
01 |
class Program |
02 |
{ |
03 |
static void Main( string [] args) |
04 |
{ |
05 |
//靜態成員屬於類,可以直接通過“類名.靜態成員”的方式訪問 |
06 |
Person.Run(); |
07 |
//實例成員屬於對象,需要通過“對象名.實例成員”來訪問 |
08 |
Person p = new Person(); |
09 |
p.Sing(); |
10 |
} |
11 |
} |
12 |
class Person |
13 |
{ |
14 |
//靜態成員變量 |
15 |
private static int nAge; |
16 |
//實例成員變量 |
17 |
private string strName; |
18 |
public static void Run() |
19 |
{ |
20 |
Console.WriteLine( "我會奔跑!" ); |
21 |
} |
22 |
public void Sing() |
23 |
{ |
24 |
Console.WriteLine( "我會唱歌" ); |
25 |
} |
26 |
} |
當類第一次被加載的時候(就是該類第一次被加載到內存當中),該類下面的所有靜態的成員都會被加載。實例成員有多少對象,就會創建多少對象。
而靜態成員只被加載到靜態存儲區,只被創建一次,且直到程序退出時才會被釋放。
看下面的代碼:
01 |
class Program |
02 |
{ |
03 |
static void Main( string [] args) |
04 |
{ |
05 |
Person p = new Person(); |
06 |
Person p1 = new Person(); |
07 |
Person p2 = new Person(); |
08 |
} |
09 |
} |
10 |
|
11 |
class Person |
12 |
{ |
13 |
//靜態成員變量 |
14 |
private static int nAge; |
15 |
//實例成員變量 |
16 |
private string strName; |
17 |
public static void Run() |
18 |
{ |
19 |
Console.WriteLine( "我會奔跑!" ); |
20 |
} |
21 |
public void Sing() |
22 |
{ |
23 |
Console.WriteLine( "我會唱歌" ); |
24 |
} |
25 |
} |

由上面顯然可知,定義靜態的成員是可以影響程序的執行效率的。那么什么時候定義靜態的成員變量呢?
①變量需要被共享的時候②方法需要被反復的調用的時候