1. 程式人生 > >關於Java的堆疊和靜態儲存

關於Java的堆疊和靜態儲存

例子:

https://www.nowcoder.com/questionTerminal/51123ddacab84a158e121bc5fe3917eb?orderByHotValue=2&done=0&pos=57&onlyReference=false(該例中:String b="abc",b在棧中但是“abc"在堆中)

概述:

https://blog.csdn.net/qq_23150275/article/details/64955155

理清概念:

類:類是組成java程式的基本要素。類封裝了一類物件的屬性和方法。類是用來定義產生物件的模板。類的實現包括兩部分:類宣告和類體。


  類體分為兩部分:成員變數和區域性變數。
  1、成員變數和區域性變更的型別可以是java中的任何一種資料型別.變數定義部分所定義的變更被稱為類的成員變數,在方法體中定義的變數和方法的引數被稱為區域性變數。
  2、成員變數在整個類內都有效,區域性變數只在定義它的方法內有效。
  3、成員變數又分為例項成員變數(例項變數)和類變數(靜態變數)。、
  4、如果區域性變數的名字和成員變數的名字相同,則成員變數被隱藏,即這個成員變數在這個方法內暫時失效。
  5、如果區域性變數的名字和成員變數的名字相同,則成員變數被隱藏。這時如果想在該方法內使用成員變數,必須使用關鍵字this.
  方法:一個類的類體由兩部分組成:變數的定義和方法的定義。方法定義包括兩部分:方法宣告和方法體。例如:一個汽車的加速、減速、轉彎、制動這些都是

該物件的方法。
  方法過載:一個類中可以有多個方法具有相同的名字,但這些方法的引數必須不同,即或者引數個數不同,或者引數的型別不同。
  構造方法:是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有型別,構造方法也可以過載。
  類方法和例項方法
  成員變數可分例項變數和類變數。類中的方法也分為例項方法和類方法。
  1、對成員變數的操作只能放在方法中,方法可以對成員變數和方法體中自己定義的區域性變數進行操作。
  2、例項方法既能對類變數操作也能對例項變數操作,而類方法只能對類變數進行操作。
  3、一個類中的方法可以互相呼叫,例項方法可以呼叫該類中的其他方法;類中的類方法只能呼叫該類的方法,不能呼叫例項方法。

靜態記憶體分配:

靜態區用於儲存全域性變數,靜態變數等作用於整個程式執行始終的變數;

動態棧:

每個方法都有一個自己的棧,用於儲存作用於該方法的變數,該方法結束後,這些變數也隨之消失,多以該方法所涉及的區域性變數(區別於物件,物件是需要new的,並且儲存在堆中)

動態堆:

由於棧上無法儲存複雜的資料結構,所以當需要一個物件時,就在堆裡開闢空間儲存該物件,然後在棧中開闢一個空間儲存這個物件的引用;而物件的方法,見https://www.jianshu.com/p/ae97b692614e(Java棧部分對其進行了說明)

做題時要注意String c="abc"問的是c還是"abc",即是問物件還是物件的引用