摘要:對(duì)象本身已知的事物被稱為實(shí)例變量俗稱屬性。對(duì)象可以執(zhí)行的動(dòng)作稱為方法。變量根據(jù)作用域分為全局變量,局部變量。對(duì)象有狀態(tài)和行為兩種屬性,狀態(tài)影響行為,行為影響狀態(tài)。
前言:
今天要分享的是關(guān)于《Head First Java》這本書的讀后感,這本書有點(diǎn)小厚差不多有七百頁(yè)左右,所以我花了幾乎整個(gè)國(guó)慶的時(shí)間去閱讀,學(xué)習(xí)。讀完之后發(fā)現(xiàn),受益頗多。正如書名所說(shuō)的,它是一本重視大腦的學(xué)習(xí)指南。無(wú)論你是Java開(kāi)發(fā)工程師,還是android開(kāi)發(fā)工程師,這本書都是良師益友。下面讓我們一起看看,我會(huì)以零碎的列表方式呈現(xiàn),并以通俗的方式講解那些你迷糊不清的細(xì)節(jié)?
正文:[1]無(wú)論你的程序有多大(也可以說(shuō)不管有多少個(gè)類),一定都會(huì)有一個(gè)main()來(lái)作為程序的起點(diǎn)。
[2] System.out.print與System.out.printIn的區(qū)別,很多人其實(shí)一直沒(méi)注意,快捷鍵用習(xí)慣了吧,?。都是在控制臺(tái)打印結(jié)果,區(qū)別就是:前者打印后不換行,后者(帶In的)打印后自動(dòng)會(huì)換行。
[3]寫代碼如果你老是只會(huì)寫一個(gè)個(gè)不相關(guān)類組合在一起,來(lái)完成功能,也許你會(huì)缺失設(shè)計(jì)的靈性,有種設(shè)計(jì)手法叫“繼承“大家都知道,子類會(huì)繼承父類的方法,也就是說(shuō),子類會(huì)自動(dòng)獲取父類的功能(提高了類的重用性)注:當(dāng)父類被final修飾的時(shí)候,它無(wú)法當(dāng)?shù)?,它是無(wú)法被繼承的(為什么要用這個(gè)來(lái)修飾類,為了保持類的嚴(yán)謹(jǐn)性,避免被篡改,使用的場(chǎng)景:String類就是最好的例子)。當(dāng)父類的方法被final修飾的時(shí)候,它是可以被子類繼承使用,但是請(qǐng)注意你是無(wú)法重寫(Override) 該方法。
[4]類跟對(duì)象的關(guān)系:類不是對(duì)象,卻是用來(lái)創(chuàng)建對(duì)象的模型,也可以說(shuō)類是對(duì)象的藍(lán)圖。對(duì)象是已知的事物,對(duì)象會(huì)執(zhí)行的動(dòng)作。對(duì)象本身已知的事物被稱為:實(shí)例變量(instance variable)俗稱屬性。對(duì)象可以執(zhí)行的動(dòng)作稱為:方法(methods)。
[5]真正的面向?qū)ο蟮腏ava應(yīng)用程序只會(huì)讓對(duì)象與對(duì)象交互,所以請(qǐng)多多以對(duì)象的角度考慮問(wèn)題,編碼。
[6]變量根據(jù)作用域分為:全局變量,局部變量。根據(jù)類型分類:primitive主數(shù)據(jù)類型和引用。主數(shù)據(jù)類型主要有:boolean char byte short int long float double。注:編譯器不允許將大杯的內(nèi)容放到小杯中,但是反過(guò)來(lái)可以。
[7]關(guān)于引用我覺(jué)得有必要拿出來(lái)特別講講:如Dog d = new Dog();事實(shí)上沒(méi)有對(duì)象變量這樣的東西存在,只有引用(reference)到對(duì)象的變量,對(duì)象引用變量保存的是存取對(duì)象的方法,它并不是對(duì)象的容器,而是類似指向?qū)ο蟮闹羔槪憧梢赃@么理解,它就是這個(gè)對(duì)象的遙控器,而不是這個(gè)對(duì)象本身)。
[8]無(wú)論被聲明來(lái)承載的是primitive主數(shù)據(jù)類型或?qū)ο笠?,?shù)組永遠(yuǎn)都是對(duì)象。
[9]對(duì)象有狀態(tài)和行為兩種屬性,狀態(tài)影響行為,行為影響狀態(tài)。大家可以好好理解這句話。
[10]在聲明方法的時(shí)候,方法的參數(shù)叫做形參,如:void bark(int numOfBarks),numOfBarks就是形參。當(dāng)我們調(diào)用方法的時(shí)候我們會(huì)傳入實(shí)參,:Dog d = new Dog();d.bark(3);,這里的3就是實(shí)參。注:對(duì)于傳入的實(shí)參如果是主數(shù)據(jù)類型的時(shí)候,無(wú)論方法內(nèi)部執(zhí)行什么,都不會(huì)改變這個(gè)實(shí)參,傳入的時(shí)候的值。但是傳入的實(shí)參如果是引用的時(shí)候,就會(huì)改變這個(gè)對(duì)象,特別注意引用是這個(gè)對(duì)象的遙控器,當(dāng)然可以改掉這個(gè)對(duì)象的東西。
[11]方法有聲明返回的類型,void這代表沒(méi)有返回任何東西,其他的聲明類型的話,說(shuō)好了要返回,就是要返回相應(yīng)的數(shù)據(jù)結(jié)果。
[12]傳入與傳出方法的值類型可以隱含地放大或是明確地縮小。這句話大家也好好思考一下哈。
[13]封裝的基本原則:將你的實(shí)例變量標(biāo)記為私有的,并提供公用的getter與setter來(lái)控制存取動(dòng)作。封裝的意義:可以保護(hù)你的對(duì)象狀態(tài)不會(huì)隨意的被亂修改,如果要修改你的對(duì)象的狀態(tài),他必須要調(diào)用你的setter方法,在這個(gè)setter方法中,你可以添加你想要的數(shù)據(jù)要求約束條件,來(lái)保證你的狀態(tài)的修改值是合法。
[14]實(shí)例變量與局部變量之間的差別:實(shí)例變量可以不用初始化就有默認(rèn)值,局部變量沒(méi)有默認(rèn)值!如果在變量被初始化前就要使用的話,編譯器會(huì)顯示錯(cuò)誤!
[15] ==跟equals()的區(qū)別:哈哈這也是老問(wèn)題了,使用==來(lái)比較primitive主數(shù)據(jù)類型,或者判斷兩個(gè)引用是否引用同一個(gè)對(duì)象。使用equals()來(lái)判斷兩個(gè)對(duì)象是否在意義上相等。(什么?不好懂?通常的用法就是如果比較字符串就用equals,如果比較數(shù)字是不是相等就用==。?)
[16]我們?cè)谠O(shè)計(jì)編寫類的時(shí)候,最好遵循下面的順序:找出類應(yīng)該做的事情,列出實(shí)例變量和方法,編寫方法的偽碼,編寫方法的測(cè)試用程序,實(shí)現(xiàn)類,測(cè)試方法,除錯(cuò)或重新設(shè)計(jì),完成。也就是三個(gè)大步驟:偽碼,測(cè)試碼,真實(shí)碼。
[17]關(guān)于for循環(huán)分為兩種:第一種基本(非加強(qiáng)版)的for循環(huán),如:for(int i=0;i<100;i++){};第二種(加強(qiáng)版)的for循環(huán),如:for(String name :nameArray){};注:請(qǐng)多寫寫不一樣的好代碼,切莫一個(gè)挫代碼能用就行的心態(tài),到處寫,這會(huì)讓你的技術(shù)停留不前。
[18]關(guān)于Java API的小常識(shí):以javax開(kāi)頭的包就會(huì)知道他以前曾經(jīng)是擴(kuò)展。API是程序員的得力幫手,好工具,所以要善于查詢API并熟練的掌握,會(huì)讓你編碼更從容,優(yōu)雅。大家可以上java.sun.com的網(wǎng)址里面去在線查找API,也可以下載離線到本地。
[19]使用import會(huì)把程序變大嗎?編譯過(guò)程會(huì)把包或類包進(jìn)去嗎?答案:import與C的include并不相同。運(yùn)用import只是幫你省下每個(gè)類前面的包名稱而已。程序不會(huì)因?yàn)橛昧?b>import而變大或變慢。
[20]為何我不必import進(jìn)String類或System類?答案:要記得java.lang是個(gè)預(yù)先被引用的包。因?yàn)?b>java.lang是個(gè)經(jīng)常會(huì)用到的基礎(chǔ)包,所以你可以不必制定名稱。java.lang.String與java.lang.System是獨(dú)一無(wú)二的class,Java會(huì)知道要去哪里找。
[21]繼承父類,并覆蓋(Override)方法后,可以讓子類更好的擴(kuò)展從父類繼承下來(lái)的功能,如:public void roam(){super .roam();//your code},注意super的作用,它可以讓你在父類的方法上,加上額外的行為,這是非常重要的一種寫法!一定要學(xué)會(huì)使用。
[22]繼承的意義:避免了重復(fù)的程序代碼,定義出共同的協(xié)議。是多態(tài)的一種手法,如:Animal myDog = new Dog();方法的參數(shù)跟返回結(jié)果都可以使用這種多態(tài)的手法,可以大大的提高你的方法的擴(kuò)展性。
[23]覆蓋的原則:參數(shù)必須要一樣,且返回類型必須要兼容,不能降低方法的存取權(quán)限。
[24]還有一種方法叫重載(overload),重載的規(guī)則:返回類型可以不同,不能只改變返回類型,可以更改存取權(quán)限。注:重載跟多態(tài)毫無(wú)關(guān)系,重載的使用情景在本類中,重寫的使用情景在繼承的時(shí)候體現(xiàn)。
[25]接口是一種100%純抽象的類,它是多態(tài)和java的重點(diǎn)。
[26]抽象類的聲明方法:在類的聲明前面加上抽象類關(guān)鍵詞abstract就好,如:abstract class Animal{public void roam()};大家想一想為什么要設(shè)計(jì)出抽象類,原因就在于:像Animal這樣的對(duì)象太抽象,不應(yīng)該被實(shí)例化出來(lái),編譯器不會(huì)讓你初始化出現(xiàn)類,如果你要想使用它,那就繼承它吧?。
[27]抽象的類代表此類必須要extend過(guò),抽象的方法代表此方法一定要被覆蓋過(guò)。如果你聲明出一個(gè)抽象的方法,就必須將類也標(biāo)記為抽象的。你不能在非抽象類中擁有抽象方法。注:子類也可以不用實(shí)現(xiàn)抽象方法,?,只要你把子類也聲明為抽象類,讓后讓你子類去繼承你,讓它去實(shí)現(xiàn)這個(gè)抽象方法,這個(gè)機(jī)制叫抽象機(jī)制,將實(shí)現(xiàn)的負(fù)擔(dān)轉(zhuǎn)給下層。這個(gè)手法很重要。
[28]就算你不知道,但實(shí)際上所有的類都是從對(duì)象給繼承出來(lái)的,沒(méi)有直接繼承過(guò)其他類的類會(huì)是隱含的繼承對(duì)象。
[29]使用Object類型的多態(tài)引用是會(huì)付出代價(jià)的,因?yàn)?b>Object實(shí)在是辨識(shí)度太低,很多時(shí)候都要必須強(qiáng)制轉(zhuǎn)換類型才能用,很不方便。而且最重要的一點(diǎn)就是:就算你知道對(duì)象有這個(gè)功能,編譯器還是會(huì)把它當(dāng)作一般的Object來(lái)看待。編譯器只管引用的類型,而不是對(duì)象的類型。注:(不好懂?哈哈,如:Object o = al.get(index);o.bark();//這個(gè)o其實(shí)是一個(gè)Dog類型的對(duì)象,有bark()的方法,但是因?yàn)槭蔷幾g器只知道他現(xiàn)在是Object類型,這個(gè)類型是沒(méi)有該方法的,所以編譯器不會(huì)通過(guò)編譯,懂了吧?)。
[30]當(dāng)你在不知道是不是可以把Object o對(duì)象轉(zhuǎn)化成Dog類型,怎么辦?簡(jiǎn)單:if(o instanceof Dog){Dog d = (Dog) o;}。
[31] Java為什么不支持多重繼承,因?yàn)闀?huì)導(dǎo)致“致命方塊”,什么是“致命方塊”,舉個(gè)例子:當(dāng)你繼承兩個(gè)父類的時(shí)候,恰巧兩個(gè)父類有一樣方法,但是里面的實(shí)現(xiàn)卻不一樣,你說(shuō)做兒子的怎么知道我會(huì)繼承那個(gè)方法,?,這就是問(wèn)題,編譯器也不知道,所以這就是不支持多重繼承的原因。
[32]接口可以用來(lái)解決多重繼承的問(wèn)題,卻又不會(huì)產(chǎn)生致命方塊這種問(wèn)題,因?yàn)樗揪蜎](méi)有實(shí)現(xiàn),所以木有關(guān)系。
據(jù)說(shuō)每個(gè)人在一定時(shí)間內(nèi)接受的信息量都是有限的,因?yàn)樾畔⒘坑悬c(diǎn)大,畢竟七百頁(yè)的好書,所以我準(zhǔn)備寫續(xù)集啦,希望大家?guī)е伎嫉男膽B(tài)去理解閱讀,我相信,對(duì)大家絕對(duì)有好處的。續(xù)集將陸陸續(xù)續(xù)的推出,敬請(qǐng)期待。?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64663.html
摘要:一旦線程執(zhí)行線程會(huì)進(jìn)入可執(zhí)行狀態(tài),它會(huì)在可執(zhí)行與執(zhí)行中兩種狀態(tài)中來(lái)來(lái)去去,同時(shí)也有另外一種狀態(tài)暫時(shí)不可執(zhí)行又稱為被堵塞狀態(tài)。當(dāng)對(duì)象有一個(gè)或多個(gè)同步化的方法時(shí),線程只有在取得對(duì)象鎖的鑰匙時(shí)才能進(jìn)入同步化的方法。 前言: 今天要分享的是關(guān)于 《Head First Java》這本書的讀后感,這本書有點(diǎn)小厚差不多有七百頁(yè)左右,所以我花了幾乎整個(gè)國(guó)慶的時(shí)間去閱讀,學(xué)習(xí)。讀完之后發(fā)現(xiàn),受益頗多。...
摘要:局部變量和方法的參數(shù)都是被聲明在方法中,它們是暫時(shí)的,且生命周期只限于方法在放在棧上的這段期間也就是方法調(diào)用至執(zhí)行完畢為止。讓一個(gè)類不被實(shí)例化的方法有兩種一種是將類聲明稱抽象類,第二種是將其構(gòu)造函數(shù)標(biāo)記為私有的。 前言: 今天要分享的是關(guān)于 《Head First Java》這本書的讀后感,這本書有點(diǎn)小厚差不多有七百頁(yè)左右,所以我花了幾乎整個(gè)國(guó)慶的時(shí)間去閱讀,學(xué)習(xí)。讀完之后發(fā)現(xiàn),受益頗...
閱讀 3241·2021-09-30 09:48
閱讀 3526·2021-09-22 16:00
閱讀 1090·2019-08-30 13:08
閱讀 3129·2019-08-30 10:53
閱讀 2441·2019-08-29 18:33
閱讀 1614·2019-08-29 12:47
閱讀 921·2019-08-29 12:16
閱讀 1956·2019-08-26 12:02