日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

堆栈关系java_从关键字说Java对象、引用、指针、堆栈的关系

發(fā)布時(shí)間:2025/3/8 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 堆栈关系java_从关键字说Java对象、引用、指针、堆栈的关系 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言:上一篇中我們介紹了new關(guān)鍵字?點(diǎn)擊打開(kāi)鏈接,new一個(gè)類(lèi),實(shí)際上就是調(diào)用該類(lèi)的構(gòu)造函數(shù),返回該類(lèi)的對(duì)象。如a = new Animal();返回的對(duì)象賦給變量a。我們來(lái)分析一下內(nèi)存分配的步驟,new一個(gè)類(lèi),實(shí)際上就創(chuàng)造了一個(gè)對(duì)象,就要為這個(gè)對(duì)象分配內(nèi)存來(lái)存儲(chǔ)成員變量,放在哪里?放在了堆內(nèi)存中。那么把這個(gè)對(duì)象賦給a,需要再開(kāi)辟一塊兒堆內(nèi)存然后復(fù)制成員變量么?答案是否定的。實(shí)際上a是一個(gè)引用變量,它只存儲(chǔ)內(nèi)存的地址,系統(tǒng)會(huì)讓這個(gè)引用變量指向?qū)ο蟮膬?nèi)存,而不會(huì)重新開(kāi)辟。所以,如果希望垃圾回收機(jī)制回收某個(gè)對(duì)象,那么只需要切斷該對(duì)象所有引用變量和該對(duì)象(該內(nèi)存空間)的關(guān)系,即a=null;內(nèi)存將會(huì)自動(dòng)被回收。

那么a存放在哪里?a存放在棧中。

this:this關(guān)鍵字引用(指向)調(diào)用該方法的對(duì)象。但倘若this出現(xiàn)在構(gòu)造器中則是引用該構(gòu)造器正在初始化的對(duì)象。那么this到底有什么用?我們會(huì)遇到這種情況,一個(gè)方法中需要調(diào)用另一個(gè)方法,由于調(diào)用任何方法都需要對(duì)象,那么如果調(diào)用的是本方法對(duì)象中的另一個(gè)方法,則用this關(guān)鍵字來(lái)表示這個(gè)對(duì)象。當(dāng)然,不用this關(guān)鍵字,同一個(gè)對(duì)象中的方法可以相互調(diào)用,但是其本質(zhì)還是隱式的調(diào)用了this方法。

那么問(wèn)題就來(lái)了1:static修飾的方法中,是否可以調(diào)用非static修飾的成員方法?答案:否,因?yàn)檎{(diào)用方法實(shí)際上隱式的調(diào)用了this來(lái)告知對(duì)象是誰(shuí),但是static修飾的方法是屬于類(lèi)的,而不是屬于對(duì)象的。所以無(wú)法找到對(duì)應(yīng)該方法的對(duì)象。也就是不能使用this,也就無(wú)法調(diào)用其他方法了。

那么問(wèn)題就來(lái)了2:static修飾的方法中,是否可以調(diào)用static修飾的成員方法?答案:是,因?yàn)檎{(diào)用static修飾的方法,實(shí)際上默認(rèn)調(diào)用了該類(lèi)(見(jiàn)點(diǎn)擊打開(kāi)鏈接),而不是this,又static修飾的方法可以找到該類(lèi),所以static調(diào)用static是可行的。

如果實(shí)在是必須在靜態(tài)方法中調(diào)用非靜態(tài)變量或方法,怎么辦?那就只能在調(diào)用的時(shí)候重新申請(qǐng)對(duì)象:比如

System.out.println(new Animal().foot);那么問(wèn)題又來(lái)了,既然static這么不好使,為什么還要設(shè)置static這么個(gè)關(guān)鍵字?其實(shí),其區(qū)別就在于使用static修飾的方法,無(wú)論對(duì)象是誰(shuí),調(diào)用的結(jié)果都一樣。但是非使用static修飾的方法,不同的對(duì)象調(diào)用就會(huì)不同。比如static修飾了一個(gè)變量x,則無(wú)論創(chuàng)建多少實(shí)例,其調(diào)用的都是這個(gè)x。但是如果調(diào)用普通變量b,那么每次創(chuàng)建實(shí)例都要重新給b賦值。因?yàn)閟tatic變量是屬于類(lèi)的,其生存周期和類(lèi)相同,但是普通變量是屬于對(duì)象的,其生存周期與變量是相同的,對(duì)象不存在了,該變量就不存在了。

成員變量(無(wú)論是類(lèi)變量還是對(duì)象變量)都存放在堆中,但是局部變量則存放于棧中,由于局部變量不需要系統(tǒng)垃圾回收,隨著代碼塊兒或者方法的運(yùn)行結(jié)束而結(jié)束,所以所占內(nèi)存比較小。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的堆栈关系java_从关键字说Java对象、引用、指针、堆栈的关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。