摘要:局部變量和方法的參數(shù)都是被聲明在方法中,它們是暫時的,且生命周期只限于方法在放在棧上的這段期間也就是方法調(diào)用至執(zhí)行完畢為止。讓一個類不被實(shí)例化的方法有兩種一種是將類聲明稱抽象類,第二種是將其構(gòu)造函數(shù)標(biāo)記為私有的。
前言:
今天要分享的是關(guān)于 《Head First Java》這本書的讀后感,這本書有點(diǎn)小厚差不多有七百頁左右,所以我花了幾乎整個國慶的時間去閱讀,學(xué)習(xí)。讀完之后發(fā)現(xiàn),受益頗多。正如書名所說的,它是一本重視大腦的學(xué)習(xí)指南。無論你是Java開發(fā)工程師,還是android開發(fā)工程師,這本書都是良師益友。下面讓我們一起看看,我會以零碎的列表方式呈現(xiàn),并以通俗的方式講解那些你迷糊不清的細(xì)節(jié)?
正文:[1]程序員會在乎內(nèi)存中的兩種區(qū)域:對象的生存空間堆(heap)和方法調(diào)用及變量的生存空間(stack)。實(shí)例變量存在于所屬的對象中,所以自然是在堆上面。局部變量和方法的參數(shù)都是被聲明在方法中,它們是暫時的,且生命周期只限于方法在放在棧上的這段期間(也就是方法調(diào)用至執(zhí)行完畢為止)。
[2]當(dāng)你調(diào)用一個方法時,該方法會放在調(diào)用棧的棧頂。實(shí)際上被堆上棧的是堆棧塊,它帶有方法的狀態(tài),包括執(zhí)行到哪一行程序以及所有的局部變量的值。
[3]無論對象是在哪里聲明的,它總是運(yùn)行在堆上。
[4]到底為什么要知道棧跟堆的機(jī)制?答案:如果想要了解變量的有效范圍(scope),對象的建立,內(nèi)存管理,線程(thread)和異常處理,則認(rèn)識棧跟堆是很重要的。
[5]關(guān)于構(gòu)造器的知識:Duck myDuck = new Duck();看起來像是在調(diào)用Duck();方法,其實(shí)并不是,我們是在調(diào)用的Duck的構(gòu)造函數(shù)。注:唯一能夠調(diào)用構(gòu)造函數(shù)的方法就是新建一個類。public Duck(){};構(gòu)造函數(shù)的規(guī)則:名字一定要跟類的名稱相同,而且沒有放回類型。
[6]特別注意,當(dāng)你沒有寫構(gòu)造函數(shù)的時候,編譯器會幫你寫一個無參數(shù)的構(gòu)造函數(shù)。不過如果你已經(jīng)自己寫了一個構(gòu)造函數(shù),還想要一個沒有參數(shù)的構(gòu)造函數(shù)的話,不好意思,你必須自己寫一個,因?yàn)檫@個時候,編譯器是不會幫你寫無參數(shù)的構(gòu)造函數(shù)了。
[7]有時候有默認(rèn)值的無參數(shù)構(gòu)造函數(shù)是不合理的,因?yàn)榭勺x性太差,也沒有太大實(shí)際意義。在Java API中有些類就沒有無參數(shù)的構(gòu)造函數(shù),如Color類。
[8]在創(chuàng)建新對象時,所有繼承下來的構(gòu)造函數(shù)都會執(zhí)行,這樣的過程被稱為“構(gòu)造函數(shù)鏈(Constructor Chaining)“,調(diào)用父類構(gòu)造函數(shù)的唯一方法就是調(diào)用super();但是你會說我好像自己沒寫啊,相信你已經(jīng)猜到了,對!就是偉大的編譯器幫忙加的,而且只會執(zhí)行父類沒有參數(shù)的構(gòu)造函數(shù)。
[9]一個類有多個構(gòu)造函數(shù)的話,從某個構(gòu)造函數(shù)調(diào)用重載版的另一個構(gòu)造函數(shù)也是可行的,好處是可以減少很多重復(fù)的代碼。做法就是:調(diào)用this()或this(aString)就行。this就是個對對象本身的引用。this()只能用在構(gòu)造函數(shù)中,且她必須是第一行語句!每個構(gòu)造函數(shù)可以選擇調(diào)用super()或this(),但不能同時調(diào)用!
[10]實(shí)例變量的壽命與對象相同。如果對象還活著,則實(shí)例變量也會是活的。
[11]如果一個方法運(yùn)行在堆棧的時候,她里面的變量時活著的,它的狀態(tài)會被保存,但是只有這個方法在棧頂時候才能使用,這才是他真正的使用范圍。也就是說局部變量只能在聲明它的方法在執(zhí)行中才能被使用。
[12]一個對象什么時候會從堆里面消失,就是這個對象失去了所有的引用,就被會被垃圾回收給干掉。
[13]當(dāng)你把引用設(shè)為null時,你就等于是抹除遙控器的功能。換句話說你找不到你的遙控的對象了。對null引用使用圓點(diǎn)運(yùn)算符會在執(zhí)行期遇到NullPointerException這樣的錯誤。
[14]什么是靜態(tài)的方法,有一種說法就是:一種不依靠實(shí)例變量也就不需要對象的行為,它只要類名去調(diào)用即可。
[15]讓一個類不被實(shí)例化的方法有兩種:一種是將類聲明稱abstract抽象類,第二種是將其構(gòu)造函數(shù)標(biāo)記為私有的。
[16]靜態(tài)的方法不能調(diào)用非靜態(tài)的變量,無法引用到該類的任何實(shí)例變量。
[17]靜態(tài)變量:它的值對所有的實(shí)例來說都相同,這就是靜態(tài)變量的功用:被同類的所有實(shí)例共享的變量。實(shí)例變量:每個實(shí)例一個。靜態(tài)變量:每個類一個。切記!
[18]靜態(tài)的final變量時常數(shù),常數(shù)變量的名稱應(yīng)該要都是大寫字母!一個被標(biāo)記為final的變量代表他一旦被初始化就不會改動。有個比較好玩東西叫靜態(tài)初始化程序(static initializer)是一段在加載類時會執(zhí)行的程序代碼,它會在其他程序可以使用該類之前就執(zhí)行,所以很適合放靜態(tài)final變量的起始程序。如:class Foo{final static int x;static{x=42;}}。
[19] final的變量代表你不能改變它的值。final的method代表你不能覆蓋掉該method。final的類代表你不能繼承該類。
[20]在java5之后開始加入的autoboxing功能能夠自動地將primitive主數(shù)據(jù)類型轉(zhuǎn)換成包裝過的對象!
[21]關(guān)于日期類,Calendar cal = new Calendar();無法通過編譯,因?yàn)槭浅橄箢悺D憧梢?b>Calendar cal = Calendar.getInstance();其實(shí)是取了他的一個子類?。
[22]靜的最高點(diǎn)!靜態(tài)的import,如果你直接import static java.lang.System.out;class WithStatic{ public static void main(String[] arg){ out.printIn("");}}。就可以這么寫,不過完全不推薦這個寫法,程序會變的更易混淆,代碼的可讀性太差。
[23]如果try或catch塊有return指令,finally還是會執(zhí)行!流程會跳到finally然后再回到return指令??匆姏]有,finally就是這么牛逼!
[24]自己在寫方法,內(nèi)部自己throw異常的話,throw下面的代碼都不執(zhí)行了,切記!
[25]異常也是多態(tài)的,如果你throws的是一個父類的異常,這代表此方法同樣可以拋出他的子類。
[26] catch的技巧,異常要從小寫到大,這樣才會讓你的異常獲取的處理的更準(zhǔn)確合理,因?yàn)?b>catch從上往下執(zhí)行,如果catch到了,就不執(zhí)行下去了,切記!。
[27]如果你自己方法有異常,卻不想處理,你也可以繼續(xù)throws出去(也叫做duck),這樣調(diào)用你方法的人就要處理了,哈哈。
[28]異常處理規(guī)則:1.catch與finally不能沒有try。2.try與catch之間不能有程序。3.try一定要有catch或finally。4.只帶有finally的try必須要聲明異常。
[29] GUI方面的開發(fā),主要用的包javax.swing,不過實(shí)在是真沒什么人用,看看就好了。里面對一些按鈕或者事件的監(jiān)聽注冊,對于android開發(fā)程序員來說,非常的基礎(chǔ)。
[30]內(nèi)部類可以把外部的方法或變量當(dāng)作自己的,這就是為什么內(nèi)部的類非常好用的原因,除了跟正常的類沒有差別之外,還多了特殊的存取權(quán)。使用場合就是在一個類里面對不同的按鈕寫不同的內(nèi)部監(jiān)聽類來解決不同的響應(yīng)問題。
?這是第二篇,里面會有不少你想弄清楚的事情,只有真的弄清了你才能慢慢走出碼奴的陰影,走向美好的程序世界!加油各位攻城獅們,未完待續(xù)!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/64661.html
摘要:對象本身已知的事物被稱為實(shí)例變量俗稱屬性。對象可以執(zhí)行的動作稱為方法。變量根據(jù)作用域分為全局變量,局部變量。對象有狀態(tài)和行為兩種屬性,狀態(tài)影響行為,行為影響狀態(tài)。 前言: 今天要分享的是關(guān)于《Head First Java》這本書的讀后感,這本書有點(diǎn)小厚差不多有七百頁左右,所以我花了幾乎整個國慶的時間去閱讀,學(xué)習(xí)。讀完之后發(fā)現(xiàn),受益頗多。正如書名所說的,它是一本重視大腦的學(xué)習(xí)指南。無論...
摘要:一旦線程執(zhí)行線程會進(jìn)入可執(zhí)行狀態(tài),它會在可執(zhí)行與執(zhí)行中兩種狀態(tài)中來來去去,同時也有另外一種狀態(tài)暫時不可執(zhí)行又稱為被堵塞狀態(tài)。當(dāng)對象有一個或多個同步化的方法時,線程只有在取得對象鎖的鑰匙時才能進(jìn)入同步化的方法。 前言: 今天要分享的是關(guān)于 《Head First Java》這本書的讀后感,這本書有點(diǎn)小厚差不多有七百頁左右,所以我花了幾乎整個國慶的時間去閱讀,學(xué)習(xí)。讀完之后發(fā)現(xiàn),受益頗多。...
閱讀 3229·2021-10-08 10:04
閱讀 1189·2021-09-30 09:48
閱讀 3561·2021-09-22 10:53
閱讀 1772·2021-09-10 11:22
閱讀 1779·2021-09-06 15:00
閱讀 2250·2019-08-30 15:56
閱讀 772·2019-08-30 15:53
閱讀 2364·2019-08-30 13:04