摘要:的垃圾回收機(jī)制是由一條后臺(tái)線程執(zhí)行的,其本身也是非常消耗內(nèi)存的,因此,濫用創(chuàng)建對(duì)象,會(huì)導(dǎo)致性能大大下降,對(duì)內(nèi)存的分配的了解就顯得尤為重要變量分類局部變量形參存在于方法簽名中定義的局部變量,有方法調(diào)用者為其賦值,隨著方法的結(jié)束而消亡方法內(nèi)部變
JVM的垃圾回收機(jī)制是由一條后臺(tái)線程執(zhí)行的,其本身也是非常消耗內(nèi)存的,因此,濫用創(chuàng)建對(duì)象,會(huì)導(dǎo)致性能大大下降,對(duì)內(nèi)存的分配的了解就顯得尤為重要
變量分類 局部變量形參:存在于方法簽名中定義的局部變量,有方法調(diào)用者為其賦值,隨著方法的結(jié)束而消亡
方法內(nèi)部變量:在方法內(nèi)部定義的局部變量,必須在方法內(nèi)對(duì)其進(jìn)行顯示初始化,隨著方法的結(jié)束而消亡
代碼塊內(nèi)部的局部變量:在代碼塊內(nèi)定義的局部變量,必須在代碼塊內(nèi)對(duì)其顯式初始化,隨著代碼塊結(jié)束而消亡
成員變量實(shí)例變量:非靜態(tài)的成員變量,隨著對(duì)象的產(chǎn)生,進(jìn)行初始化等操作,對(duì)象結(jié)束變量也就消亡
類變量:靜態(tài)的成員變量,帶有static修飾符,隨著類初始化產(chǎn)生,隨著類消失而消失
變量的內(nèi)存分配在創(chuàng)建變量的時(shí)候,一定要合法的前向引用。其含義就是先定義的變量不能引用后定義的變量,反之則可以
在同一個(gè)JVM中每一個(gè)類只會(huì)存在一個(gè)Class對(duì)象,因此JVM只要分配一塊內(nèi)存空間給類變量就可以了,而實(shí)例變量則每次創(chuàng)建對(duì)象都要為其分配一塊內(nèi)存,幾個(gè)實(shí)例就要?jiǎng)?chuàng)建幾塊內(nèi)存空間
實(shí)例變量的初始化時(shí)機(jī)定義變量的時(shí)候
代碼塊中
構(gòu)造器中
類變量初始化時(shí)機(jī)定義實(shí)例變量時(shí)指定的初始值、初始化塊中為實(shí)例變量指定初始值的語(yǔ)句的地位是平等的,當(dāng)經(jīng)過(guò)編譯器處理后,他們都將被提取到構(gòu)造器中,也就是說(shuō)在編譯后,初始化都會(huì)被放在構(gòu)造器中按先后順序進(jìn)行初始化賦值
同一個(gè)JVM中,類變量只能初始化一次
定義變量的時(shí)候
靜態(tài)代碼塊
父類構(gòu)造器在創(chuàng)建Java對(duì)象的時(shí)候,都會(huì)先去執(zhí)行該類的父類對(duì)象的非靜態(tài)代碼塊和構(gòu)造器,最后才是該類的非靜態(tài)代碼塊和構(gòu)造器
所謂的隱式調(diào)用和顯式調(diào)用,其實(shí)就是有沒(méi)有用super去調(diào)用父類的構(gòu)造器的區(qū)別。
如果父類還沒(méi)被初始化過(guò),則會(huì)最先對(duì)類變量進(jìn)行初始化
訪問(wèn)子類對(duì)象的實(shí)例變量子類的方法可以訪問(wèn)父類的實(shí)例變量,這是因?yàn)樽宇惱^承父類就會(huì)獲得父類的成員變量和方法,但父類的方法不能訪問(wèn)子類的實(shí)例變量,因?yàn)楦割悷o(wú)法知道哪個(gè)子類繼承他
而且子父類中的成員變量(類變量和實(shí)例變量)是相互獨(dú)立的,父類中的成員變量不會(huì)被子類中同名的變量覆蓋
class Base { static int count = 2; } class Mid extends Base { static int count = 20; } public class Sub extends Mid { static int count = 200; public static void main(String[] args) { // 創(chuàng)建一個(gè)Sub對(duì)象 Sub s = new Sub(); // 將Sub對(duì)象向上轉(zhuǎn)型后賦為Mid、Base類型的變量 Mid s2m = s; Base s2b = s; // 分別通過(guò)3個(gè)變量來(lái)訪問(wèn)count實(shí)例變量 System.out.println(s.count); System.out.println(s2m.count); System.out.println(s2b.count); } }
結(jié)果
200
20
2
訪問(wèn)子類對(duì)象的方法當(dāng)創(chuàng)建Sub的時(shí)候,會(huì)初始化Base、Mid和Sub三個(gè)對(duì)象,同時(shí)也就存在三個(gè)count變量了,也就是說(shuō)有三塊內(nèi)存保存著這三個(gè)對(duì)象和count變量,以s2m變量為例,s2m擁有的地址是Sub對(duì)象的堆地址,但s2m變量類是是Mid,則會(huì)去尋找Mid下的變量值
也就說(shuō)成員變量的值取決于聲明該變量聲明時(shí)是所用的類型
子類可以重寫父類的方法,子類也可以通過(guò)super的方式調(diào)用父類的方法,在多態(tài)的情況下,子類重寫的方法會(huì)覆蓋掉父類的方法
class Base{ int count =2; public void display(){ System.out.println(this.count); } } class Derived extends Base{ int count =20; @Override public void display() { System.out.println(this.count); } } public class FieldAndMethod { public static void main(String[] args) { Base b=new Base(); System.out.println(b.count); b.display(); Derived d=new Derived(); System.out.println(d.count); d.display(); Base db=new Derived(); System.out.println(db.count); db.display(); Base b2d=d; System.out.println(b2d.count); } }
結(jié)果
2
2
20
20
2
20
2
一切在你執(zhí)行這段代碼之后,你就會(huì)明白一切了。
更多內(nèi)容可以關(guān)注微信公眾號(hào),或者訪問(wèn)AppZone網(wǎng)站
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65983.html
摘要:之前一篇文章我們?cè)敿?xì)說(shuō)明了變量對(duì)象,而這里,我們將詳細(xì)說(shuō)明作用域鏈。而的作用域鏈,則同時(shí)包含了這三個(gè)變量對(duì)象,所以的執(zhí)行上下文可如下表示。下圖展示了閉包的作用域鏈。其中為當(dāng)前的函數(shù)調(diào)用棧,為當(dāng)前正在被執(zhí)行的函數(shù)的作用域鏈,為當(dāng)前的局部變量。 showImg(https://segmentfault.com/img/remote/1460000008329355);初學(xué)JavaScrip...
摘要:查找原因因?yàn)楦铝说陌姹静懦霈F(xiàn)內(nèi)存泄漏的問(wèn)題,所以有理由懷疑,就是新增加的功能導(dǎo)致的內(nèi)存泄漏。同時(shí)還發(fā)現(xiàn)了也有內(nèi)存泄漏的情況,通過(guò)同樣的方式定位到了這個(gè)問(wèn)題并最終解決。 在最近給客戶交付的一個(gè)項(xiàng)目中,客戶反映系統(tǒng)跑一段時(shí)間就會(huì)奔潰掉。我的第一直覺(jué)就是可能發(fā)生了內(nèi)存泄漏。 復(fù)現(xiàn)bug 為了能夠讓bug復(fù)現(xiàn),我讓開(kāi)發(fā)的小伙,先把模擬系統(tǒng)在本地跑起來(lái)。要知道,bug復(fù)現(xiàn)是很重要的。bug復(fù)現(xiàn)...
摘要:友情提示先關(guān)注收藏,再查看,萬(wàn)字保姆級(jí)語(yǔ)言從入門到精通教程。及大牛出天地開(kāi)始有隨之乃有萬(wàn)種語(yǔ)年英國(guó)劍橋大學(xué)推出了語(yǔ)言。 友情提示:先關(guān)注收藏,再查看,13 萬(wàn)字保...
摘要:展示如下場(chǎng)景再現(xiàn)經(jīng)過(guò)分析,最后我們定位到是使用產(chǎn)生的內(nèi)存泄露問(wèn)題。下面通過(guò)一個(gè),來(lái)簡(jiǎn)單講下具體內(nèi)存泄露的原因。這一次的內(nèi)存泄露問(wèn)題算是解決了??偨Y(jié)關(guān)于內(nèi)存泄露問(wèn)題在第一次排查時(shí),往往是有點(diǎn)不知所措的。 記一次 JAVA 的內(nèi)存泄露分析 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)保留出處:https://github.com/jasonGeng88/blog 當(dāng)前環(huán)境 jdk == 1.8 ...
摘要:主題來(lái)自于的典型面試問(wèn)題列表。有多種方法來(lái)處理事件委托。這種方法的缺點(diǎn)是父容器的偵聽(tīng)器可能需要檢查事件來(lái)選擇正確的操作,而元素本身不會(huì)是一個(gè)監(jiān)聽(tīng)器。 showImg(http://fw008950-flywheel.netdna-ssl.com/wp-content/uploads/2014/11/Get-Hired-Fast-How-to-Job-Search-Classifieds...
閱讀 2879·2021-10-14 09:43
閱讀 1673·2021-09-29 09:34
閱讀 1757·2021-07-28 00:16
閱讀 2972·2019-08-30 15:53
閱讀 2917·2019-08-30 13:59
閱讀 2972·2019-08-30 13:57
閱讀 1102·2019-08-26 13:38
閱讀 1906·2019-08-26 13:25