java零基礎入門-面向對象篇(一) 基礎類型和引用類型
友情提示:本章開始可能會有部分較深入的內容买决,不說又不行,說了又很難解釋清楚吼畏,因為里面的技術細節(jié)實在太多太復雜督赤,所以我會屏蔽部分技術細節(jié),只展示當前需要了解的基礎知識泻蚊,避免出現講了半天還是沒人懂的情況躲舌。隨著我們的知識增長,后面會逐步的將細節(jié)補充完整性雄。
學習編程没卸,一定要把思路放開枯冈,不能太局限,多多進行思維能力的鍛煉才能提高自己的內功办悟。比如我們很常見的買房啊尘奏,哪里修商場啊,其實跟我們的內存結構是很類似的病蛉。他們都涉及到一個資源規(guī)劃的問題炫加,來吧,一起來鍛煉下思維能力吧铺然。
最近全國除了最火的搶人大戰(zhàn)俗孝,其實前段時間還有一個東西很火,那就是城市規(guī)劃魄健。比如我們的首都北京赋铝,選擇了雄安進行首都功能疏解,其實很多城市都有類似的規(guī)劃沽瘦,比如天津濱海新區(qū)革骨,深圳前海新區(qū)等等。政府設立了一個即將開發(fā)的新區(qū)后析恋,會干嘛良哲?招商引資,首先是大的企業(yè)進來修路蓋高樓大廈助隧,然后修住宅筑凫,再賣給老百姓。我們來看看具體過程并村。
首先巍实,政府畫了一個圈,“走過路過不要錯過哈哩牍,新鮮出爐的地塊棚潦,各種優(yōu)惠政策,減稅減稅再減稅姐叁,快來看看啊~”瓦盛,然后一堆大企業(yè)蜂擁而上,“給我留一塊~”外潜,“我也要~”原环。然后各種大企業(yè)開始修辦公樓啊,房地產開發(fā)商開始修海景房啊处窥,然后輪到地產開發(fā)商要喝了嘱吗,“走過路過不要錯過啊,海景房值得擁有,機不可失谒麦,搶到了幸福生活俄讹,沒搶到繼續(xù)干活~”。然后輪到搶房大軍蜂擁而上了绕德。
再來看看電腦內存踪蹬,其實我們的電腦就是政府部門,每一次一開機臣咖,就開始要喝跃捣,“內存開始大派送啦,需要的快來領啊”夺蛇,然后各種開機啟動的應用程序開始搶內存疚漆,什么聊天的啊,殺毒的啊刁赦,瀏覽器啊娶聘,當然還有系統(tǒng)自帶的功能,統(tǒng)統(tǒng)需要內存截型。當然趴荸,內存不是一開機就分完了的,還有很多是我們啟動了新的應用程序才會劃分內存給你宦焦,比如我們的java。
電腦開機進行的內存免費大派送跟我們的政府規(guī)劃很像顿涣,在座的各位都是大佬波闹,內存要多少有多少。然后我們打開java的時候涛碑,java也成功的分到了一塊內存空間精堕。java這個房地產商跟別的有點區(qū)別,他很牛蒲障,拿的地很大歹篓,他要自己規(guī)劃自己的地,也就是說它不僅僅要做房地產揉阎,他還要修商場庄撮,建公園,這個就厲害了~
看見沒有毙籽,系統(tǒng)給了一塊內存java 洞斯,然后他在自己的一畝三分地上,開始干自己的規(guī)劃了坑赡,這是個很高級的房產開發(fā)商烙如。java有個名詞叫java虛擬機(JVM)么抗,你就可以理解為他是一個虛擬的系統(tǒng),他干了很多和系統(tǒng)類似的活亚铁,系統(tǒng)把內存交給java以后蝇刀,就由 jvm 來負責規(guī)劃內存。就像我們上面說的徘溢,政府部門劃了地給開發(fā)商熊泵,java自己也劃地分給他下面的小弟。那么java里面的小弟又是啥甸昏?繼續(xù)往下看
首先我們看看普通人眼里的內存顽分,他就是一塊綠色的板子,上面有很多電路施蜜,下面有一條金光閃閃的東西卒蘸,好了,理解完了翻默。
再來看看硬件工程師眼里的內存缸沃,他就是各種電路啊,電容啊修械,門啊之類的東西趾牧,其實我也不是很懂,大概是這樣肯污。
接下來看軟件工程師眼里的內存翘单,這個圖是指分給java的內存,也就是jvm管理的內存蹦渣。我們只看java這個開發(fā)商哄芜,自己已經分到的內存,其他軟件柬唯,系統(tǒng)占用的內存我們不去管他认臊。我們看到 jvm 劃分的內存大概有以下這么幾個區(qū)域:本地方法棧,虛擬機棧锄奢,程序計數器失晴,堆,方法區(qū)拘央,這些就是 java 自己的小弟了涂屁。
我們看看這些顏色是咋回事,和上面的規(guī)劃圖顏色說明差不多堪滨,紅色的是 堆胯陋,可以理解成商業(yè)用地,綠色的是方法區(qū),可以理解成公園遏乔,這兩個區(qū)域的特點是义矛,他們是公共用地,不管哪個小區(qū)的居民盟萨,都可以來壓壓馬路凉翻,看看風景。再看上面的捻激,本地方法棧和程序計數器是灰色制轰,你可以理解為市政設施,每個片區(qū)都有警察局胞谭,有困難找警察叔叔垃杖,我們姑且不去管他,知道就行了丈屹。主要看看 虛擬機棧调俘,這個下面簡稱為棧,這個很重要旺垒。我們可以理解成居民小區(qū)彩库,每個人只能出入自己的小區(qū),去別人小區(qū)可不行先蒋,保安不讓進骇钦。
所以總結一下,堆和方法區(qū)是公共的竞漾,每個小區(qū)的居民都可以去玩眯搭,而棧是私有的,不能隨便串門的畴蹭。這個理解到這里就行了坦仍。接下來我們講講最重要的 棧 和 堆,方法區(qū)就是個大草地叨襟,暫時不用管他。
基礎類型 和 引用類型
我們首先明確一個觀念幔荒,我們的數據都是存在內存里的糊闽,但是不同的數據,在內存中存放的區(qū)域是不同的爹梁。有的數據存放在棧右犹,有的數據存放在堆。具體誰放在哪姚垃,我們首先要明確數據的類型念链。
基礎類型(又叫值類型):我前面講的都是基礎類型,byte,short掂墓,int谦纱,long,float君编,double跨嘉,boolean,char吃嘿,基礎類型全部存在棧里面祠乃。
引用類型:數組,類兑燥,接口亮瓷,引用類型變量存在棧,對象存在堆降瞳,通過引用確定關系嘱支。
基礎類型比較好理解,創(chuàng)建的時候往棧里面一丟力崇,搞定斗塘,打完收工。而引用類型就比較復雜了亮靴,引用類型的變量就是引用馍盟,啥叫引用?來吧茧吊,話不多贞岭,懵的時候就上圖
好吧,肯定有同學又要問搓侄,內存地址又是個啥瞄桨?
地址就是找人找東西時候用的,內存地址就是讓內存劃分的空間有個標記讶踪,我通過這個標記可以找到內存芯侥。所以引用類型里面存的不是你定義給他的值,而是存的內存地址乳讥。那我定義的數組啊柱查,數組跑哪去了?它在堆里面云石,而這個棧里面存的地址就是堆里面放的那個數組的地址唉工。又懵了?圖圖圖~
我們將紅色箭頭干的事汹忠,叫做:引用變量指向內存淋硝。堆里面的數據雹熬,只有當有引用變量指向它的時候,才能存在谣膳,如果沒人指向堆里面的數據了竿报,就會有一位親切的清潔工阿姨把他當垃圾處理掉。所以棧里面的變量参歹,紅色箭頭仰楚,堆里面的數據這三個東西是一體的,他們不能分開犬庇。他們在一起僧界,才是定義了一個完整的引用類型。
其實這一段對于初學者來說是有難度的臭挽,概念比較多捂襟,步驟繁瑣,圖也都是平面圖欢峰,有沒有更加通俗易懂的方式來解釋這個問題呢葬荷,來吧,本教程獨家三維圖雙手奉上纽帖。
棧
棧是一種數據結構宠漩,他的特點就是先進后出,后進先出懊直。只有棧頂可以操作扒吁,棧底是固定的,插入操作又叫入棧室囊,刪除叫出棧雕崩。理解這么多就可以了。
堆
相對于棧的有序融撞,堆是無序的盼铁,可以理解成隨機劃分一塊空間來儲存對象。
我們用三維圖再來看看剛才的例子
首先是基礎類型
再來看引用類型
本篇文章為接下來的數組饶火,類打基礎,堆和棧的理解對我們更好的學面向對象很有幫助致扯,請好好理解趁窃,多多參悟。