
java零基礎(chǔ)入門-面向?qū)ο笃?一) 基礎(chǔ)類型和引用類型
友情提示:本章開始可能會有部分較深入的內(nèi)容,不說又不行,說了又很難解釋清楚,因?yàn)槔锩娴募夹g(shù)細(xì)節(jié)實(shí)在太多太復(fù)雜,所以我會屏蔽部分技術(shù)細(xì)節(jié),只展示當(dāng)前需要了解的基礎(chǔ)知識,避免出現(xiàn)講了半天還是沒人懂的情況。隨著我們的知識增長,后面會逐步的將細(xì)節(jié)補(bǔ)充完整。
學(xué)習(xí)編程,一定要把思路放開,不能太局限,多多進(jìn)行思維能力的鍛煉才能提高自己的內(nèi)功。比如我們很常見的買房啊,哪里修商場啊,其實(shí)跟我們的內(nèi)存結(jié)構(gòu)是很類似的。他們都涉及到一個資源規(guī)劃的問題,來吧,一起來鍛煉下思維能力吧。
最近全國除了最火的搶人大戰(zhàn),其實(shí)前段時間還有一個東西很火,那就是城市規(guī)劃。比如我們的首都北京,選擇了雄安進(jìn)行首都功能疏解,其實(shí)很多城市都有類似的規(guī)劃,比如天津?yàn)I海新區(qū),深圳前海新區(qū)等等。政府設(shè)立了一個即將開發(fā)的新區(qū)后,會干嘛?招商引資,首先是大的企業(yè)進(jìn)來修路蓋高樓大廈,然后修住宅,再賣給老百姓。我們來看看具體過程。
首先,政府畫了一個圈,“走過路過不要錯過哈,新鮮出爐的地塊,各種優(yōu)惠政策,減稅減稅再減稅,快來看看啊~”,然后一堆大企業(yè)蜂擁而上,“給我留一塊~”,“我也要~”。然后各種大企業(yè)開始修辦公樓啊,房地產(chǎn)開發(fā)商開始修海景房啊,然后輪到地產(chǎn)開發(fā)商要喝了,“走過路過不要錯過啊,海景房值得擁有,機(jī)不可失,搶到了幸福生活,沒搶到繼續(xù)干活~”。然后輪到搶房大軍蜂擁而上了。

再來看看電腦內(nèi)存,其實(shí)我們的電腦就是政府部門,每一次一開機(jī),就開始要喝,“內(nèi)存開始大派送啦,需要的快來領(lǐng)啊”,然后各種開機(jī)啟動的應(yīng)用程序開始搶內(nèi)存,什么聊天的啊,殺毒的啊,瀏覽器啊,當(dāng)然還有系統(tǒng)自帶的功能,統(tǒng)統(tǒng)需要內(nèi)存。當(dāng)然,內(nèi)存不是一開機(jī)就分完了的,還有很多是我們啟動了新的應(yīng)用程序才會劃分內(nèi)存給你,比如我們的java。

電腦開機(jī)進(jìn)行的內(nèi)存免費(fèi)大派送跟我們的政府規(guī)劃很像,在座的各位都是大佬,內(nèi)存要多少有多少。然后我們打開java的時候,java也成功的分到了一塊內(nèi)存空間。java這個房地產(chǎn)商跟別的有點(diǎn)區(qū)別,他很牛,拿的地很大,他要自己規(guī)劃自己的地,也就是說它不僅僅要做房地產(chǎn),他還要修商場,建公園,這個就厲害了~

看見沒有,系統(tǒng)給了一塊內(nèi)存java ,然后他在自己的一畝三分地上,開始干自己的規(guī)劃了,這是個很高級的房產(chǎn)開發(fā)商。java有個名詞叫java虛擬機(jī)(JVM),你就可以理解為他是一個虛擬的系統(tǒng),他干了很多和系統(tǒng)類似的活,系統(tǒng)把內(nèi)存交給java以后,就由 jvm 來負(fù)責(zé)規(guī)劃內(nèi)存。就像我們上面說的,政府部門劃了地給開發(fā)商,java自己也劃地分給他下面的小弟。那么java里面的小弟又是啥?繼續(xù)往下看
首先我們看看普通人眼里的內(nèi)存,他就是一塊綠色的板子,上面有很多電路,下面有一條金光閃閃的東西,好了,理解完了。

再來看看硬件工程師眼里的內(nèi)存,他就是各種電路啊,電容啊,門啊之類的東西,其實(shí)我也不是很懂,大概是這樣。

接下來看軟件工程師眼里的內(nèi)存,這個圖是指分給java的內(nèi)存,也就是jvm管理的內(nèi)存。我們只看java這個開發(fā)商,自己已經(jīng)分到的內(nèi)存,其他軟件,系統(tǒng)占用的內(nèi)存我們不去管他。我們看到 jvm 劃分的內(nèi)存大概有以下這么幾個區(qū)域:本地方法棧,虛擬機(jī)棧,程序計數(shù)器,堆,方法區(qū),這些就是 java 自己的小弟了。

我們看看這些顏色是咋回事,和上面的規(guī)劃圖顏色說明差不多,紅色的是 堆,可以理解成商業(yè)用地,綠色的是方法區(qū),可以理解成公園,這兩個區(qū)域的特點(diǎn)是,他們是公共用地,不管哪個小區(qū)的居民,都可以來壓壓馬路,看看風(fēng)景。再看上面的,本地方法棧和程序計數(shù)器是灰色,你可以理解為市政設(shè)施,每個片區(qū)都有警察局,有困難找警察叔叔,我們姑且不去管他,知道就行了。主要看看 虛擬機(jī)棧,這個下面簡稱為棧,這個很重要。我們可以理解成居民小區(qū),每個人只能出入自己的小區(qū),去別人小區(qū)可不行,保安不讓進(jìn)。
所以總結(jié)一下,堆和方法區(qū)是公共的,每個小區(qū)的居民都可以去玩,而棧是私有的,不能隨便串門的。這個理解到這里就行了。接下來我們講講最重要的 棧 和 堆,方法區(qū)就是個大草地,暫時不用管他。
基礎(chǔ)類型 和 引用類型
我們首先明確一個觀念,我們的數(shù)據(jù)都是存在內(nèi)存里的,但是不同的數(shù)據(jù),在內(nèi)存中存放的區(qū)域是不同的。有的數(shù)據(jù)存放在棧,有的數(shù)據(jù)存放在堆。具體誰放在哪,我們首先要明確數(shù)據(jù)的類型。
基礎(chǔ)類型(又叫值類型):我前面講的都是基礎(chǔ)類型,byte,short,int,long,float,double,boolean,char,基礎(chǔ)類型全部存在棧里面。
引用類型:數(shù)組,類,接口,引用類型變量存在棧,對象存在堆,通過引用確定關(guān)系。
基礎(chǔ)類型比較好理解,創(chuàng)建的時候往棧里面一丟,搞定,打完收工。而引用類型就比較復(fù)雜了,引用類型的變量就是引用,啥叫引用?來吧,話不多,懵的時候就上圖

好吧,肯定有同學(xué)又要問,內(nèi)存地址又是個啥?

地址就是找人找東西時候用的,內(nèi)存地址就是讓內(nèi)存劃分的空間有個標(biāo)記,我通過這個標(biāo)記可以找到內(nèi)存。所以引用類型里面存的不是你定義給他的值,而是存的內(nèi)存地址。那我定義的數(shù)組啊,數(shù)組跑哪去了?它在堆里面,而這個棧里面存的地址就是堆里面放的那個數(shù)組的地址。又懵了?圖圖圖~

我們將紅色箭頭干的事,叫做:引用變量指向內(nèi)存。堆里面的數(shù)據(jù),只有當(dāng)有引用變量指向它的時候,才能存在,如果沒人指向堆里面的數(shù)據(jù)了,就會有一位親切的清潔工阿姨把他當(dāng)垃圾處理掉。所以棧里面的變量,紅色箭頭,堆里面的數(shù)據(jù)這三個東西是一體的,他們不能分開。他們在一起,才是定義了一個完整的引用類型。
其實(shí)這一段對于初學(xué)者來說是有難度的,概念比較多,步驟繁瑣,圖也都是平面圖,有沒有更加通俗易懂的方式來解釋這個問題呢,來吧,本教程獨(dú)家三維圖雙手奉上。
棧
棧是一種數(shù)據(jù)結(jié)構(gòu),他的特點(diǎn)就是先進(jìn)后出,后進(jìn)先出。只有棧頂可以操作,棧底是固定的,插入操作又叫入棧,刪除叫出棧。理解這么多就可以了。



堆
相對于棧的有序,堆是無序的,可以理解成隨機(jī)劃分一塊空間來儲存對象。

我們用三維圖再來看看剛才的例子
首先是基礎(chǔ)類型


再來看引用類型


本篇文章為接下來的數(shù)組,類打基礎(chǔ),堆和棧的理解對我們更好的學(xué)面向?qū)ο蠛苡袔椭?,請好好理解,多多參悟?/p>