不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學習啦>知識大全>知識百科>百科知識>

什么是靜態(tài)方法靜態(tài)方法的弊端

時間: 謝君787 分享

  若類的方法前加了static關鍵字,則該方法稱為靜態(tài)方法,那么你對靜態(tài)方法了解多少呢?以下是由學習啦小編整理關于什么是靜態(tài)方法的內容,希望大家喜歡!

  靜態(tài)方法的介紹

  靜態(tài)方法為類所有,可以通過對象來使用,也可以通過類來使用。但一般提倡通過類名來使用,因為靜態(tài)方法只要定義了類,不必建立類的實例就可使用。靜態(tài)方法只能用類的靜態(tài)成員。

  靜態(tài)方法的方法使用

  靜態(tài)方法與靜態(tài)變量一樣,屬于類本身,而不屬于那個類的一個對象。調用一個被定義為static的方法,可以通過在它前面加上這個類的名稱,也可以像調用非靜態(tài)方法一樣通過類對象調用。

  實例方法必須通過類的實例來使用。實例方法可以使用類的非靜態(tài)成員,也可以使用類的靜態(tài)成員。

  類的靜態(tài)方法,靜態(tài)變量是在類裝載的時候裝載的。但是要特別注意,類的靜態(tài)變量是該類的對象所共有的,即是所有對象共享變量。所以建議盡量少用靜態(tài)變量。盡量在靜態(tài)方法中使用內部變量。

  方法聲明

  其中static關鍵字即表示靜態(tài)的。聲明靜態(tài)方法的語法如下:

  <訪問修飾符>static返回類型 方法名(參數列表)

  {//方法體}

  方法調用

  靜態(tài)方法與實例方法唯一不同的,就是靜態(tài)方法在返回類型前加static關鍵字。靜態(tài)方法的調用有兩種途徑:

  (1)通過類的實例對象去調用

  調用格式為: 對象名.方法名

  (2) 通過類名直接調用

  調用格式為: 類名::方法名

  方法規(guī)則

  我們在使用時要注意:

  靜態(tài)方法只能訪問類的靜態(tài)成員,不能訪問類的非靜態(tài)成員;

  非靜態(tài)方法可以訪問類的靜態(tài)成員,也可以訪問類的非靜態(tài)成員;

  靜態(tài)方法既可以用實例來調用,也可以用類名來調用。

  代碼示例

  #include<iostream>

  using namespace std;

  class CStaticTest{

  public:

  CStaticTest(int a)

  {

  this->a = a;

  }

  ~CStaticTest(){}

  static int add(CStaticTest& c1, CStaticTest& c2)

  {

  return c1.a + c2.a;

  }

  private:

  int a;

  };

  int main()

  {

  CStaticTest tmp1(1);

  CStaticTest tmp2(2);

  int sum1 = tmp1.add(tmp1, tmp2);

  int sum2 = CStaticTest::add(tmp1, tmp2);

  cout << sum1 << endl;

  cout << sum2 << endl;

  return 0;

  }

  實際應用

  1. 有靜態(tài)屬性的類,一般會定義靜態(tài)方法。

  2. 沒有屬性的類,一般會定義靜態(tài)方法,這樣在使用時,通過類名::方法名即可調用,

  而不用先定義對象,再調用,這樣可以省去一行代碼。

  靜態(tài)方法的經典案例

  (1)用于對靜態(tài)字段、只讀字段等的初始化。

  (2)添加static關鍵字,不能添加訪問修飾符,因為靜態(tài)構造函數都是私有的。

  (3)類的靜態(tài)構造函數在給定應用程序域中至多執(zhí)行一次:只有創(chuàng)建類的實例或者引用類的任何靜態(tài)成員才激發(fā)靜態(tài)構造函數

  (4)靜態(tài)構造函數是不可繼承的,而且不能被直接調用。

  (5)如果類中包含用來開始執(zhí)行的 Main 方法,則該類的靜態(tài)構造函數將在調用 Main方法之前執(zhí)行。任何帶有初始值設定項的靜態(tài)字段,則在執(zhí)行該類的靜態(tài)構造函數時,先要按照文本順序執(zhí)行那些初始值設定項。

  (6)如果沒有編寫靜態(tài)構造函數,而這時類中包含帶有初始值設定的靜態(tài)字段,那么編譯器會自動生成默認的靜態(tài)構造函數。

  以下用例子代碼進一步說明:

  using System;

  class A { public static int X; static A()

  ④ 執(zhí)行完后返回到③ { X = B.Y + 1; Console.WriteLine("static A()"); } }class B { public static int Y = A.X + 1③ 調用了A的靜態(tài)成員, 轉到A的靜態(tài)構造函數----> static B()

 ?、?如果帶有初始值設定項的靜態(tài)字段,執(zhí)行該類的靜態(tài)構造函數時,

  先要按照文本順序執(zhí)行那些初始值設定項。

  轉到初始值設定項----> { Console.WriteLine("staticB()"); } static void Main()

  ① 程序入口,

  如果類中包含用來開始執(zhí)行的 Main 方法,

  該類的靜態(tài)構造函數將在調用 Main 方法之前執(zhí)行。

  轉到B的靜態(tài)構造函數----> { Console.WriteLine("X = {0},Y = {1}", A.X, B.Y);

 ?、?輸出結果 Console.ReadLine(); } }

  靜態(tài)方法的弊端

  在一些系統(tǒng)中使用非常頻繁的方法都使用靜態(tài)方法可以提高系統(tǒng)性能

  本身不可升級,重寫,這要看一個軟件產品的目的是什么了.

  為了方便,不用實例化,但這樣程序編譯運行時就占用了系統(tǒng)資源

  靜態(tài)的屬性和方法在程序啟動的時候,就全部裝入內存的,而不管這些方法、屬性以后有沒有用到。即使是沒有人再訪問程序,這部分內存仍然不會釋放還有就是,所有訪問者看到的靜態(tài)屬性的數據幾乎都是一樣的,比如A用戶設置了UserName這個屬性,B用戶訪問的時候,得到的UserName仍然是A用戶設置的那個。這種特性,如果用在固定數據中,那不會有太大問題,比如連接字符串之類的
看過“靜態(tài)方法的弊端”的人還看了:

1.Java中靜態(tài)方法和實例方法的區(qū)別

2.路由器靜態(tài)怎么設置

3.如何使用網絡中靜態(tài)IP地址

4.局域網靜態(tài)ip設置方法

5.Java中static 和final的區(qū)別

6.路由器靜態(tài)ip怎么樣設置

7.設置路由器靜態(tài)ip怎么填

1651514