成員變數區域性變數建構函式

2021-07-07 03:15:10 字數 3230 閱讀 5548

類體由2部分構成:

一、變數的定義;

成員變數(全域性變數的俗稱)

區域性變數,只在定義它的方法中有效

二、方法的定義(乙個類中可以有多個方法) . 

什麼是區域性,方法內部,塊內部都是區域性,執行指令退出那個區域性,區域性變數自動清除 

成員變數:作為類的成員而存在,直接存在於類中。所有類的成員變數可以通過this來引用。

區域性變數:作為方法或語句塊的成員而存在,存在於方法的引數列表和方法定義中。

1.成員變數可以被 public,protect,private,static等修飾符修飾,而區域性變數不能被控制修飾符及 static修飾;兩者都可以定義成final型。

2.成員變數儲存在堆,區域性變數儲存在棧。區域性變數的作用域僅限於定義它的方法,在該方法的外部無法訪問它。成員變數的作用域在整個類內部都是可見的,所有成員方法都可以使用它。如果訪問許可權允許,還可以在類的外部使用成員變數。

3.區域性變數的生存週期與方法的執行期相同.類的例項成員變數和物件的生存期相同。而靜態成員變數的生存期是整個程式執行期

4.成員變數會被系統提供乙個預設的初始值。基本型別的預設值為 0,復合型別的預設值為null(被final修飾且沒有static的必須顯式賦值),區域性變數不會自動賦值,所以區域性變數在定義後先要賦初值,然後才能使用。

5.區域性變數可以和成員變數同名,且在使用時,區域性變數具有更高的優先順序。

成員變數又分成倆中型別:例項變數和靜態變數。static的差別,是否依賴於例項而存在 

靜態變數的型別說明符是static。 靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數,例如外部變數雖屬於靜態儲存方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全域性變數。對於自動變數,它屬於動態儲存方式。但是也可以用static定義它為靜態自動變數,或稱靜態區域性變數,從而成為靜態儲存方式。 

由此看來, 乙個變數可由static進行再說明,並改變其原有的儲存方式。 

1. 靜態區域性變數 

在區域性變數前再加上static說明符就構成靜態區域性變數。 

靜態區域性變數屬於靜態儲存方式 

(1)靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。 

(2)靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後,儘管該變數還繼續存在,但不能使用它。 

(3)允許對構造類靜態區域性量賦初值。若未賦以初值,則由系統自動賦以0值。 

(4)對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。 根據靜態區域性變數的特點,可以看出它是一種生存期為整個源程式的量。雖然離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用,而且儲存了前次被呼叫後留下的值。因此,當多次呼叫乙個函式且要求在呼叫之間保留某些變數的值時,可考慮採用靜態區域性變數。雖然用全域性變數也可以達到上述目的,但全域性變數有時會造成意外的***,因此仍以採用區域性靜態變數為宜 

2.靜態全域性變數 

全域性變數(外部變數)冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。

這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 

而靜態全域性變數只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能使用它,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。

把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。

1.動態儲存方式與靜態儲存方式的定義

1)所謂靜態儲存方式是指在程式編譯期間分配固定的儲存空間的方式;

2)所謂動態儲存方式是指在程式執行期間根據需要進行動態的分配儲存空間的方式。 

2.記憶體中使用者儲存空間的分配情況

1)程式區:存放程式語句

2)靜態儲存區:存放全域性變數,在程式開始執行時給全域性變數分配儲存區,程式執行完畢就釋放。

3)動態儲存區:

存放以下資料:

①函式形式引數。在呼叫函式時給形參分配儲存空間;

②自動變數(未加static宣告的區域性變數);

③函式呼叫時的現場保護和返回位址等。

棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

堆,就是由new分配的記憶體塊,釋放編譯器不去管,由應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

建構函式:①函式名與類名相同②不用定義返回值型別③沒有具體的返回值

建構函式的作用:用於給物件進行初始化。

一般函式和建構函式的區別

建構函式:物件建立時,就會呼叫與之對應的建構函式,對物件進行初始化

一般函式:物件建立後,需要該函式功能時才呼叫

建構函式:物件建立時,只呼叫一次

一般函式:物件建立後,可以被呼叫多次

建構函式

1.物件一建立,就會呼叫與之相應的建構函式,也就是說,不建立物件,建構函式時不會執行的。

2.建構函式的作用是用於給物件進行初始化。

3.建構函式可以看成是特殊的函式。它可以過載(僅僅函式返回值型別不同是不行的),可以被許可權修飾符修飾,但是它沒有返回值(這與void不同)。

4.當乙個類中沒有定義建構函式時,系統會預設給該類加入乙個空引數的構造方法。當在類中自定義建構函式後,無缺省的建構函式。

5.建構函式是在物件一建立就執行,給物件初始化,而一般函式是物件呼叫時才執行,給物件新增物件具備的功能。

乙個物件建立,建構函式只執行一次,而一般方法可以被該物件呼叫多次。

6.定義建構函式的需求性:當分析事物時,該事物存在具備一些特性或者行為,那麼將這些內容定義在建構函式中。

構造**塊

1.構造**塊的作用是給物件進行初始化。

2.物件一建立就執行構造**塊了,而且優先於建構函式執行。有物件建立,才會執行構造**塊,類不能呼叫構造**塊的,構造**塊先於建構函式執行。

3.構造**塊是給所有物件進行統一初始化,而建構函式是給對應的物件初始化,也就是說,構造**塊中定義的是不同物件共性的初始化內容。

靜態**塊

static

1.隨著類的載入而執行,只執行一次,並優先於主函式。類呼叫時,先執行靜態**塊,然後才執行主函式的。

2.靜態**塊其實就是給類初始化的,而構造**塊是給物件初始化的。

成員變數 區域性變數

成員變數 作為類的成員而存在,直接存在於類中。所有類的成員變 量可以通過this來引用。區域性變數 作為方法或語句塊的成員而存在,存在於方法的引數列表和方法定義中。1.成員變數可以被 public,protect,private,static等修飾符修飾,而 區域性變數不能被控制修飾符及 stati...

成員變數 區域性變數

一.相同點 1.都遵循變數的宣告格式 修飾符 資料型別 變數名 初始化值 2.都有各自的作用域 二.不同點 1.宣告的位置不同 成員變數 宣告在類內,方法外。區域性變數 宣告在方法內 方法的形參部分 塊內 2.成員變數的修飾符有四個 public private protected 預設 區域性變數...

構造方法,成員變數區域性變數區別,this關鍵字

構造方法 1.什麼是構造方法 建構函式,構造器 就是在類例項化物件時執行的一種特殊的方法 2.為什麼需要構造方法 一般情況下,構造方法合適為物件的屬性賦初值 3.如何編寫構造方法 格式public 類名 1.構造方法不寫返回值型別 2.構造方法的方法名必須和類名相同 首字母大寫 唯一乙個可以以大寫字...