當前位置:首頁 » 服務存儲 » 類的靜態成員的作用與存儲方式
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

類的靜態成員的作用與存儲方式

發布時間: 2023-05-23 17:23:08

『壹』 android靜態類和非靜態類的區別

在Android開發中,類可以歲坦分為靜態類和非靜態類兩種類型。

靜態類:
靜態類是指可以直接通過類名來訪問的類,而不需要通過創建對象實例昌雀塵來訪問。靜態類中的所有方法和成員變數都是靜態的,這意味著它們只有唯一的一份,並且對於所有的對象實例都是相同的。在Android開發中,靜態類通常用於實現一些全局性的耐禪操作,例如常量、工具類、單例設計模式等。

非靜態類:
非靜態類是需要通過創建對象實例來訪問的類。非靜態類中的方法通常被視為一些依賴於對象實例的操作。在Android開發中,非靜態類通常指代一些需要在對象實例中保存一些狀態或屬性的類,例如Activity、Fragment、View等。

下面是靜態類和非靜態類的一些區別:

1. 訪問方式:靜態類可以通過類名直接訪問,而非靜態類需要通過創建對象實例來訪問。

2. 生命周期:靜態類的生命周期與應用程序一致,而非靜態類的生命周期與對象實例相關,即可以在任何時候創建和銷毀。

3. 方法和成員變數:靜態類中的方法和成員變數通常是靜態的,對於所有的對象實例都是相同的,而非靜態類中的方法和成員變數通常依賴於對象實例,每個對象實例都有其自己的方法和成員變數。

『貳』 c語言中static的作用和用法

static關鍵字不僅可以用來修飾變數,還可以用來修飾函數。在使用 static 關鍵字修飾變數時,我們稱此變數為靜態變數。靜態變數的存儲方式與全局變數一樣,都是靜態存儲方式。靜態變數屬於靜態存儲方式,屬於靜態存儲方式的變數卻不一定就是靜態變數。

在C語言中,static關鍵字的作用如下:

在修飾變數的時,static修飾的靜態局部變數只執行一次,而且延長了局部變數的生命周期,讓仔閉直到程序運行結束以後才釋放。

static修飾全局變數的時,這個全局變數只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以。

static修飾一個函數,則這個函數的只能在本文件中調用,不能被其他文件調用。Static修飾的局部變數存放在全局數據區的靜態變數區。

C++的static用法:

面向過程程序設計中的static和面向對象程序設計中的static。前者應用於普通變數和函數,不涉及類;後者主要說明static在類中的作用。

在類中,static可以用來修飾靜態數據成員和靜態成員方法。

靜態數據成員:

靜態數據成員可以實現多個對象之間的數據共戚數享,它坦裂是類的所有對象的共享成員,它在內存中只佔一份空間,如果改變它的值,則各對象中這個數據成員的值都被改變。

靜態數據成員是在程序開始運行時被分配空間,到程序結束之後才釋放,只要類中指定了靜態數據成員,即使不定義對象,也會為靜態數據成員分配空間。

靜態數據成員既可以通過對象名引用,也可以通過類名引用。

靜態成員函數:

靜態成員函數和靜態數據成員一樣,他們都屬於類的靜態成員,而不是對象成員。

非靜態成員函數有this指針,而靜態成員函數沒有this指針。

靜態成員函數主要用來方位靜態數據成員而不能訪問非靜態成員。

『叄』 靜態成員和非靜態成員的區別

數據成員可以分靜態變數、非靜態變數兩種.
靜態成員:靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名+靜態成員名訪問此靜態成員,因為靜態成員存在於內存,非靜態成員需要實例化才會分配內存,所以靜態成員不能訪問非靜態的成員..因為靜態成員存在於內存,所以非靜態成員可以直接訪問類中靜態的成員.

非成靜態員:所有沒有加Static的成員都是非靜態成員,當類被實例化之後,可以通過實例化的類名進行訪問..非靜態成員的生存期決定於該類的生存期..而靜態成員則不存在生存期的概念,因為靜態成員始終駐留在內容中..

一個類中也可以包含靜態成員和非靜態成員,類中也包括靜態構造函數和非靜態構造函數..

對於winApp來說,靜態成員對於程序員本身省了很多事,而且因為靜態成員駐留內存,在方法與方法之間傳遞共享數據的時候,所以靜態成員成了我的首選..但是不要因為方便,大量使用,尤其是在內存緊張或者
用靜態方法操作一些共享值的時候.或者要寫多用戶系統的時候,要慎之又慎.比如:
static int id = 0;
sql = "select * from table where id=" + id;

如果這樣寫的話,在單機測試的時候沒有問題,但是在多人同時對數據進行測試的時候,就會有問題了.假如,A用戶訪問他的id是20,則id的值在內存中為20,而此時B用戶訪問,他的id是30,則id在內存中的值是30..A用戶的id值則被更改了..如果此時你將這個方法用非靜態成員來寫,則不會出現這樣的情況..因為非靜態成員是你聲明的時候,實例化的時候才會分配內存..所以A用戶訪問的時候,App會因為A實例化而給A用戶的請求分配內存..而B用戶訪問的時候也一樣會因為B用戶的訪問而分配內存..所以兩個用戶訪問的是不同的內存塊..所以不會出現數據覆蓋和錯亂的現象...

我想這樣的情況應該能很好的說明靜態變數和非靜態成員的區別..

相對於webApp而言,在winApp下使用static的時候要比webApp下考慮的因素要少的多,因為webApp本來就是一個多用戶的系統,所以使用static的時候更應該小心..

而我對static在webApp下的使用存在一個疑問,如果一個靜態方法,例如:

static string aa(string str){
//經過一系列操作..
return str;
}

或者返回一個DataSet的靜態方法
static DataSet aa(string str){
//經過一系列操作..
return DataSet;
}

這個時候,在訪問量大的時候,程序出現了並發,會不會發生錯亂??我以前的項目使用的公用函數類中使用了大量的靜態方法,不過好在訪問量不大,一直沒有問題..在發這個文章之前,我查找了MSDN,CSDN,搜索了一些關於靜態成員的文章,但是都沒有一個明確的說明..雖然,自己在項目中也測試了這么長時間也沒有問題..但是總覺得有這個可能發生..

不知道大家是否在項目中碰到類似的疑惑呢??請有過這方面經驗的朋友指教..

答案:
不說是否濫用,如果你出現沖突,說明你沒有理解靜態成員變數和靜態方法的區別,靜態方法本身只是一段代碼,不管怎麼調用他都不會出現問題。但靜態成員變數就不行了,他被所有用戶共享,如果一個用戶改變了他,肯定會影響到別人,這就是常說的並發沖突問題,一般來說在修改共享成員變數時要lock!

關於靜態方法和實例方法的一些誤區。

一、 靜態方法常駐內存,實例方法不是,所以靜態方法效率高但占內存。

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

二、 靜態方法在堆上分配內存,實例方法在堆棧上。

事實上所有的方法都不可能在堆或者堆棧上分配內存,方法作為代碼是被載入到特殊的代碼內存區域,這個內存區域是不可寫的。

三、 實例方法需要先創建實例才可以調用,比較麻煩,靜態方法不用,比較簡單。
事實上如果一個方法與他所在類型的實例無關,那麼它就應該是靜態的,決不會有人把它寫成實例方法。所以所有的實例方法都與實例有關,既然與實例有關,那麼創建實例就是必然的步驟,沒有麻煩簡單一說。實際上上你可以把所有的實例方法都寫成靜態的,將實例作為參數傳入即可。
有些方法看似與所在的實例無關,如IComparer.Compare方法,但實際上每一個實現這個介面的類都只會負責自己類型實例的比較,這是C#1.x規范中沒有泛型所帶來的歷史遺留問題。
大部分靜態方法是與類的實例有關的,如各種Parse方法,他做成靜態的原因是他沒有實例作為參數。其他的大多是出於語義或者其他目的的考慮。

『肆』 什麼是類的靜態成員它有什麼特點

靜態成員,指的是在c++類中聲明成員時可以加上static關鍵字,這樣聲明的成員就叫做靜態成員(包括數據成員和成員函數)。即聲明為static的類成員或者成員函數便能在類的范圍內同享。

靜態數據乎模成員屬於整個類,即使沒有任何對象創建,類的靜態數據成員變數也存在。

因為類的靜態數據成員的存在不依賴與於任何戚孝類對象的存在,類的靜態數據成員應該在代碼中被顯式地初始化,一般要在類外進行。

外部訪問類的靜態成員能直接歲仔緩通過類名來訪問,例如:test::getCount()。雖然靜態成員不屬於類的某個對象,但是我們仍然可以使用類的對象、引用或指針來訪問靜態成員。

類的靜態成員函數無法直接訪問普通數據成員(可以通過對象名間接的訪問)。

靜態成員和類的普通成員一樣,也具有public、protected、private3種訪問級別,也可以具有返回值、const修飾符等參數。

『伍』 c#的靜態成員有什麼作用

函數的所有行為對派生類影響都是一樣的時候,可以定義為靜態,靜態成員就相當於一個帶做桐搏有命名空間的全局函數,它不需要實例化,不需要this指針,它和實例無純祥關,只和類有關,一定程度上加強的類的安全性,在其他一些方面也很有好處,例如:1、可以封裝某些演算法,調用簡單;2、有助於實現一些簡輪芹單的設計模式;3、有助於類的封裝。

『陸』 c語言static的作用和用法

static在c語言中是私有、靜態意思。

用於在函數中聲明「靜態變數」用,在每一次調用後,該變數並不在函數返回時立即釋放,變數中保存的值,可以保留到下一次調用時繼續有效。

私有就是隱藏。static函數只兄派氏能聲明後的本文中調用。static全局變數只能聲明後的本文中調用。static局部變數只能聲明後的本函數調用

靜態就是一直存在,相對於每次調用動態分配而言。static函數未驗證是否每次調用代碼地址都是一致的。static全局羨散變數生命周期到程序或進程結束。static局部變數生命周期到程序或進程結束。

static的使用和作用

靜態全局變數。全局變數前加static,修飾全局變數為靜態全局變數,改變全局羨畢變數的可見性。靜態局部變數。局部變數前加static,修飾局部變數為靜態局部變數,改變局部變數的銷毀時期。靜態函數。函數返回類型前加static,修飾函數為靜態函數,改變函數的可見性。

類的靜態成員。類成員前加static,修飾類的成員為類的靜態成員,實現多個對象之間的數據共享,並且使用靜態成員不會破壞封裝性,也保證了安全性。類的靜態函數,類函數前加static,修飾類的函數為靜態函數,減少資源消耗,不需要實例化就可以使用。

『柒』 類的靜態成員和非靜態成員有何區別

非靜態成員也叫成員變數,二者區別如下 :

1、名稱上的區別

成員變數也叫實例變數;靜態變數也叫類變數。

2、內存存儲的區別

成員變數存儲到堆內存的對象中,靜態變數存儲到方法區的靜態區中。

3、生命周期不同

成員變數隨著對象的出現而出現,隨著對象的消失而消失。靜態變數隨著類的出現而出現,隨著類的消失而消失。