??? 即使作為Java的初學(xué)者, 對(duì)this 和 static 這兩個(gè)關(guān)鍵字都不會(huì)陌生. 其實(shí)也不難理解:
??? this 關(guān)鍵字:? 指的是對(duì)象的本身(注意不是類本身)? 跟.net 語言的Me 關(guān)鍵字類似.
??? static 關(guān)鍵字: 靜態(tài)分配的對(duì)象或?qū)ο蟪蓡T.? 也就是指被static 修飾的成員只屬于類本身, 而不會(huì)想其他成員一樣會(huì)對(duì)每個(gè)對(duì)象單獨(dú)分配.
??? 但是c語言也有static關(guān)鍵字, 但是c語言中的static并不只是靜態(tài)分配的意思,如果用在靜態(tài)局部變量(函數(shù)內(nèi)部), 則是說明這個(gè)變量是靜態(tài)的,?? 如果用在全局變量或函數(shù), 則是防止函數(shù)或全程變量被其他c文件中的函數(shù)訪問(通過include 頭文件).? 為什么Java里的static 會(huì)跟c 語言里的有這種區(qū)別呢.
??? 下面會(huì)從內(nèi)存分配的角度淺析一下這個(gè)問題.
?? ? ? 我們知道, static 的意思是靜態(tài)分配, 那么到底什么是靜態(tài)分配和動(dòng)態(tài)分配呢.? 其實(shí)內(nèi)存的靜態(tài)分配和動(dòng)態(tài)分配是對(duì)于C/C++ 來講的.? 而Java 作為由C/C++ 發(fā)展而來的類C語言, 雖然把內(nèi)存管理這一塊砍掉了(對(duì)程序員屏蔽, 在Java底層處理), 但是還是繼承了C語言的一些特性.
??
?????? 所以Java里有些特性和概念, 通過C語言分析能更好的理解.
?????? 首先, 1個(gè)由C語言編譯的程序所使用的內(nèi)存大概分成如下幾個(gè)部分
?????? 1、棧區(qū)(stack)— 由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧
?????? 2、堆區(qū)(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。
?????? 3、全局區(qū)(靜態(tài)區(qū))(static) --- 用來存放全局變量和靜態(tài)局部變量.
?????? 4、文字常量區(qū) —常量字符串就是放在這里的。 程序結(jié)束后由系統(tǒng)釋放 ?
?????? 5、程序代碼區(qū)—存放函數(shù)體的二進(jìn)制代碼。
?????? 下面是大致的圖解.
因篇幅問題不能全部顯示,請(qǐng)點(diǎn)此查看更多更全內(nèi)容
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2
違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)