c語言非靜態,c#靜態非靜態

本文目錄一覽:

C語言中非Static局部變數在什麼中生成?

局部變數,一般都是在函數體當中的定義,當程序執行到這個函數體的時候,也就是進入到這個函數體的作用域範圍,win32操作系統對於局部變數是使用時候才申請空間,程序退出局部變數的作用域範圍以後,這個局部變數就失去意義,對於這樣的局部變數,系統都是在棧中給予分配空間的,

所以:而非Static局部變

量在__________________________中生成? as:棧

靜態方法和非靜態方法的區別是什麼

一、相同點:

靜態類和非靜態類在C#中定義基本是一樣的,只是靜態類定義需要加上static修飾符而已。

二、生命周期:

靜態方法(Static Method)與靜態成員變數一樣,屬於類本身,在類裝載的時候被裝載到內存(Memory),不自動進行銷毀,會一直存在於內存中,直到JVM關閉。

非靜態方法(Non-Static Method)又叫實例化方法,屬於實例對象,實例化後才會分配內存,必須通過類的實例來引用。不會常駐內存,當實例對象被JVM回收之後,也跟著消失。

三、效率:

靜態方法的使用效率比非靜態方法的效率高。

按照上面的概念,只要內存夠用,都可以使用靜態的。

四、線程安全:

靜態方法是共享代碼段,靜態變數是共享數據段。既然是「共享」就有並發(Concurrence)的問題。

非靜態方法是針對確定的一個對象的,所以不會存在線程安全的問題。

靜態方法和實例方法是一樣的,在類型第一次被使用時載入。調用的速度基本上沒有差別。

五、靜態成員與非靜態成員比較:

1、靜態成員屬於類所有,非靜態成員屬於類的實例所有。

2、每創建一個類的實例,都會在內存中為非靜態成員新分配一塊存儲;非靜態成員屬於類所有,為各個類的實例所公用,無論類創建了多少實例,類的靜態成員在內存中只佔同一塊區域。

六、使用不同:

1、靜態方法屬於類所有,類實例化前即可使用。

2、非靜態方法可以訪問類中的任何成員,靜態方法只能訪問類中的靜態成員。

3、因為靜態方法在類實例化前就可以使用,而類中的非靜態變數必須在實例化之後才能分配內存,static內部只能出現static變數和其他static方法!而且static方法中還不能使用this….等關鍵字..因為它是屬於整個類!

4、靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。

5、靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存.

C語言中全局變數可以是非靜態變數嗎

在C語言中,全局變數可以是非靜態變數的。

原因如下:

靜態變數的關鍵static對局部變數和全局變數的作用不一樣。

對於局部變數來說,用static修飾時,該變數在函數調用後的值一直保持上次的結果。

對於全局變數來說,用static修飾的全局變數表示這個全局變數只能在當前這個全局變數定義的文件內使用;如果沒有static修飾,表示這個文件定義的全局變數也可以被其它文件調用。

舉例如下:

#includestdio.h

static int a;  // 定義一個靜態的全局變數,只能在本文件中引用

int b;  // 定義一個非靜態的全局變數,在同一工程下的其他文件也可引用(需用extern關鍵字聲明)

void main()

{

    a = 2;

    b = 4;

    printf(“%d%d”, a, b);

}

C語言調用C++非靜態成員函數

不管是不是靜態的,都不能直接調用

而是要加一層C++的封裝。

而且封裝的函數,必須加extern “C”才可以。

在C語言中,什麼叫做非靜態成員函數

#include iostream.h

class ok

{

int a;

static int s;//聲明靜態數據成員

public:

ok(int a);

static void show();//聲明靜態成員函數

};

int ok::s=0;//定義並初始化靜態數據成員

ok::ok(int a)

{

this-a=a;

s+=a; //非靜態成員函數可以訪問靜態數據成員

}

void ok::show() //靜態成員函數的實現

{

//coutaendl; //錯誤代碼,a是非靜態數據成員

cout”s=”sendl;

}

void main()

{

ok cat(2);

cat.show();

ok dog(3);

dog.show();

ok::show();

}

/*————————————————————

○靜態成員之間可以相互訪問,如靜態成員函數訪問靜態數據成員和靜態成員函數;

○靜態成員函數沒有this指針。無法訪問屬於類對象的非靜態數據成員和非靜態成員函數,

○非靜態成員函數可以訪問靜態成員函數和靜態數據成員;

○靜態成員函數不能訪問非靜態成員函數和非靜態數據成員;

○由於沒有this指針的額外開銷,因此靜態成員函數與類的非靜態函數相比速度上會有少許的增長;

○非靜態成員函數總是具體的屬於某個類的具體對象,this是預設的;

————————————————————-*/

c#中靜態欄位與非靜態欄位有什麼區別

c#中靜態欄位與非靜態欄位有什麼區別 c#中靜態欄位和非靜態欄位以static標識區分,主要區別是靜態欄位可以直接以類名.欄位名方式使用,而非靜態欄位必須建立類例項才可以使用,示例如下:

class Program{ static void Main(string[] args) { Console.WriteLine(test.v1); Console.WriteLine((new test()).v2); }}class test{ public static string v1 { get { return “v1”; } } public string v2 { get { return “v2”; } }}

另外,靜態欄位在裝載程式集的時候就分配記憶體空間,而非靜態欄位要在例項初化時候才分配記憶體空間。

java中,靜態欄位和例項欄位有什麼區別

靜態方法和例項方法的區別主要體現在兩個方面:

在外部呼叫靜態方法時,可以使用”類名.方法名”的方式,也可以使用”物件名.方法名”的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。

靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問例項成員變數和例項方法;例項方法則無此限制。

具體來說:

一、例項欄位要例項化才能使用,沒有例項化不能使用。靜態欄位反之。如:

name欄位的使用:

cla1 i = new cla1();

i.name = “張三”;

sex欄位的使用:

cla1.sex = “男”;

二、普通欄位要在例項化時候才分配記憶體空間,而靜態欄位在裝載程式集的時候就分配記憶體空間了。

java靜態方法與非靜態方法有什麼區別

靜態方法和例項方法的區別主要體現在兩個方面:

在外部呼叫靜態方法時,可以使用”類名.方法名”的方式,也可以使用”物件名.方法名”的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。

靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問例項成員變數和例項方法;例項方法則無此限制。

下面幾個例子展示了這一區別。

1、呼叫靜態方法示例。

———–檔名hasStaticMethod.java,程式編號1—————–public class hasStaticMethod{定義一個靜態方法public static void callMe(){System.out.println(“This is a static method.”);}}

下面這個程式使用兩種形式來呼叫靜態方法。

———–檔名invokeStaticMethod.java,2—————–

public class invokeStaticMethod{public static void main(String args[]){hasStaticMethod.callMe(); 不建立物件,直接呼叫靜態方法 hasStaticMethod oa = new hasStaticMethod(); 建立一個物件oa.callMe(); 利用物件來呼叫靜態方法}} 程式3.36兩次呼叫靜態方法,都是允許的,程式的輸出如下:

This is a static method.This is a static method.

允許不建立物件而呼叫靜態方法,是Java為了減少程式設計師呼叫某些常用方法時的麻煩,而允許程式設計師按照傳統的C語言中使用函式的方式來使用方法。典型的例子是前面某些程式中使用”Math.ramdon()”來獲取隨機數。

2、靜態方法訪問成員變數示例。

———–檔名aessMember.java,程式編號3.37—————–class aessMember{private static int sa; 定義一個靜態成員變數private int ia; 定義一個例項成員變數下面定義一個靜態方法static void statMethod(){int i = 0; 正確,可以有自己的區域性變數sa = 10; 正確,靜態方法可以使用靜態變數otherStat(); 正確,可以呼叫靜態方法ia = 20; 錯誤,不能使用例項變數insMethod(); 錯誤,不能呼叫例項方法}static void otherStat(){} 下面定義一個例項方法 void insMethod(){int i = 0; 正確,可以有自己的區域性變數sa = 15; 正確,可以使用靜態變數ia = 30; 正確,可以使用例項變數statMethod(); 正確,可以呼叫靜態方法}}

本例其實可以概括成一句話:靜態方法只能訪問靜態成員,例項方法可以訪問靜態和例項成員。之所以不允許靜態方法訪問例項成員變數,是因為例項成員變數是屬於某個物件的,而靜態方法在執行時,並不一定存在物件。同樣,因為例項方法可以訪問例項成員變數,如果允許靜態方法呼叫例項方法,將間接地允許它使用例項成員變數,所以它也不能呼叫例項方法。基於同樣的道理,靜態方法中也不能使用關鍵字this。

main()方法是一個典型的靜態方法,它同樣遵循一般靜態方法的規則,所以它可以由系統在建立物件之前就呼叫。

首先,兩者本質上的區別是:靜態方法是在類中使用staitc修飾的方法,在類定義的時候已經被裝載和分配。而非靜態方法是不加static關鍵字的方法,在類定義時沒有佔用記憶體,只有在類被例項化成物件時,物件呼叫該方法才被分配記憶體。

其次,靜態方法中只能呼叫靜態成員或者方法,不能呼叫非靜態方法或者非靜態成員,而非靜態方法既可以呼叫靜態成員或者方法又可以呼叫其他的非靜態成員或者方法。

靜態方法可以直接用類名點出來方法,而普通方法需要建立類的物件後才能呼叫! 靜態的方法和變數會呼叫時在記憶體生成一個唯一的標示,你可以理解成在實體記憶體中給靜態一個位子,這樣的話在呼叫的時候可以直接找到,而且會節省記憶體,但是如果你宣告的靜態過多的話那麼每一個都會在記憶體有一個位子,那麼你就沒有資源執行別的,會報記憶體溢位! 普通方法是由java的gc機制(垃圾回收機制)來控制,可能同一個物件或變數在使用的過程中,這個時間的在記憶體佔了一個位子,而上個時間的還沒有從記憶體中刪除,這樣的話就可能有2個一樣的在記憶體中,這個2個一樣東西只是內容值一樣,但是記憶體值不一樣,你可以用”==”和”equals”來檢視(這個只適用物件和String型別).java的gc機制會根據執行時的記憶體狀態來自動清除一些用不到變數或物件,就算你手動呼叫gc也是一樣的!

靜態方法在建立物件前就可以使用了,非靜態方法必須通過new出來的物件呼叫。

如:

public class Per{

public static String getType(){

return “人類”;

}

public String getName(){

return “張三”;

}

}

上面這個類中的getType方法,在沒有new物件前這就可以這樣用:

String type=Per.getType();type=”人類”;

而getName方法則不能這樣使用,編譯都不會通過

getName必須這樣:

Per p=new Per();

String name=p.getName();name=”張三”;

當然,getType方法也可能通過物件呼叫:

String type=p.getType();type=”人類”;

綜上所述:

靜態方法是在建立例項之前就存在了,而非靜態方法是在建立物件之後才有的。

靜態方法可以直接用類名點出來方法,而普通方法需要建立類的物件後才能呼叫!

靜態的方法和變數會呼叫時在記憶體生成一個唯一的標示,你可以理解成在實體記憶體中給靜態一個位子,這樣的話在呼叫的時候可以直接找到,而且會節省記憶體,但是如果你宣告的靜態過多的話那麼每一個都會在記憶體有一個位子,那麼你就沒有資源執行別的,會報記憶體溢位!

普通方法是由java的gc機制來控制,可能同一個物件或變數在使用的過程中,這個時間的在記憶體佔了一個位子,而上個時間的還沒有從記憶體中刪除,這樣的話就可能有2個一樣的在記憶體中,這個2個一樣東西只是內容值一樣,但是記憶體值不一樣,你可以用”==”和”equals”來檢視(這個只適用物件和String型別).java的gc機制會根據執行時的記憶體狀態來自動清除一些用不到變數或物件,就算你手動呼叫gc也是一樣的!

java靜態與非靜態區別

靜態方法和例項方法的區別主要體現在兩個方面:

在外部呼叫靜態方法時,可以使用”類名.方法名”的方式,也可以使用”物件名.方法名”的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。

靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問例項成員變數和例項方法;例項方法則無此限制。

c#靜態方法與非靜態方法有啥區別

靜態方法,也稱為類方法。其特點是:不需要例項化類就可以呼叫

非靜態方法,也成例項方法,其特點是:先例項化類,然後通過例項呼叫

class MyClass{ 靜態方法 public static void SomeStaticMethod() { …… } 非靜態方法 public void SomeMethod() { …… }} 呼叫靜態方法: 通過 類.靜態方法 格式呼叫MyClass.SomeStaticMethod( );************************************************ 對於非靜態方法MyClass c = new MyClass();c.SomeMethod(); 非靜態方法必須通過例項來呼叫

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/277478.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-19 13:20
下一篇 2024-12-19 13:20

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Centos7配置靜態ip

    本文將詳細闡述如何在Centos7系統中配置靜態ip。 一、查看網路介面 在配置靜態ip之前,我們首先需要查看系統中的網路介面,以確定我們需要配置的網卡是哪一個。 ifconfig…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論