知識點串連
前面開發(fā)項目時赋除,主要依靠的是《手把手教你學Java》中零散的知識點阱缓,以及將《Java從入門到精通》當作開發(fā)詞典來進行查詢。晚上將后者從頭到尾過一遍举农,對知識點進行查漏補缺荆针,揀主要的記錄如下:
- 變量的作用域。作用域靜態(tài)(全局)變量>成員變量>局部變量颁糟。但是在類方法的局部域中航背,同名局部變量覆蓋成員變量,如果想要操作同名成員變量棱貌,需要使用關(guān)鍵字this玖媚。其中形參也可看作局部變量,會覆蓋同名成員變量婚脱;成員變量在對象創(chuàng)建后才能被對象調(diào)用今魔,而靜態(tài)變量在類被加載后,就可以被類名調(diào)用起惕。
- 運算符優(yōu)先級涡贱。總共分為15級:圓括號>正負號>一元運算符>乘除>加減>移位運算>比較大小>比較是否相等>按位與>按位異或>按位或>邏輯與>邏輯或>三元運算符>賦值運算符∪窍耄總結(jié)起來问词,不確定優(yōu)先級的情況就用圓括號圈起來,賦值運算的等級最低嘀粱。
-
數(shù)據(jù)類型的轉(zhuǎn)換分五種激挪。
(1)按以下優(yōu)先級,則數(shù)據(jù)類型可以隱式自動轉(zhuǎn)換锋叨,byte<short<int<long<float<doublue垄分。
(2)反向進行則需要進行強制轉(zhuǎn)換。
(3)char類型和String類型不包含在其中娃磺,不能簡單進行強制轉(zhuǎn)換薄湿,需特別對待。需特別注意偷卧,char變量有兩種賦值方式豺瘤,一種是char cr=5;另一種是char cr='5'。前者cr等于ASCII碼表中听诸,序號5所對應(yīng)的字符ENQ坐求,意思是請求字符;后者cr就等于‘5’晌梨。所以語句char cr=56;可以執(zhí)行桥嗤,運算結(jié)果是cr等于序號為56的字符‘8’须妻,而語句char cr='56'則會因為超過一個字符而報錯。因此對應(yīng)char與int的強制轉(zhuǎn)換就有兩種方式泛领,如果char a=56荒吏,則char與int可以直接加圓括弧強制轉(zhuǎn)換。而如果char a='8'师逸,char類型強制轉(zhuǎn)換為int司倚,輸出的是字符所對應(yīng)的ASCII十進制編碼,反之亦然篓像。
(4)上述類型與String類型也不能強制轉(zhuǎn)換动知,以int2String為例,可以使用String.valueOf(int a)方法员辩,返回一個String值盒粮;String2int可以使用包裝類Integer的方法Integer.valueOf(String str).intValue(),返回一個int值奠滑。同理丹皱,char2String可以使用String.valueOf(char cr)方法,String2char可以使用String.charAt(int index)宋税,String2char_array可以使用String.toCharArray()方法摊崭。
(5)父類與子類對象的轉(zhuǎn)換,子類可隱式賦值給父類杰赛,稱為向上轉(zhuǎn)換呢簸;父類可有條件地強制轉(zhuǎn)換,然后賦值給子類乏屯,稱為向下轉(zhuǎn)換根时。 -
日期與時間的獲取。
(1)創(chuàng)建一個Date對象辰晕,然后用String.format(格式轉(zhuǎn)換符%蛤迎,Date對象),返回一個期望格式的字符串日期和時間含友。
(2)使用System.currentTimeMillis()方法替裆,返回一個當前時間(毫秒milliseconds)的long值。 -
數(shù)學運算窘问。
靈活運用Math類扎唾,可以獲得常用的一元函數(shù)運算值(三角函數(shù)、指數(shù)函數(shù)南缓、冪函數(shù)、對數(shù)函數(shù)荧呐、取整函數(shù)汉形、絕對值函數(shù))纸镊,二元函數(shù)運算值(pow指數(shù)函數(shù),二元最值函數(shù))等概疆。 -
隨機數(shù)獲取逗威。
(1)使用Math.random()方法,獲得一個介于[0岔冀,1)的符合平均分布函數(shù)的double型小數(shù)凯旭。在這個小數(shù)的基礎(chǔ)上,可以轉(zhuǎn)換成任意整數(shù)[m使套,n)之間的隨機整數(shù)罐呼。
(2)使用Random類中的若干方法,獲得平均分布的整數(shù)侦高、小數(shù)嫉柴、布爾值。除此以外奉呛,還可以獲得符合高斯分布的數(shù)计螺。 -
數(shù)組操作。
(1)多維數(shù)組的創(chuàng)建瞧壮。例如int[][][] abc=new int[10][10][10];
(2)數(shù)組的遍歷登馒。多維循環(huán)與foreach語句。
(3)數(shù)組的復(fù)制咆槽。Arrays.copyOf()和Arrays.copyOfRange()方法陈轿。
(4)數(shù)組元素的查詢。Arrays.binarySearch()方法罗晕。
(5)數(shù)組的排序济欢。可以使用Arrays.sort()方法小渊。當然法褥,也可以使用經(jīng)典的排序算法,自己編寫可調(diào)用的函數(shù)酬屉,包括:冒泡排序半等,直接選擇排序,反轉(zhuǎn)排序等呐萨。 - 幾個修飾變量和方法的關(guān)鍵字杀饵。如下表:
權(quán)限修飾 | 常量修飾 | 靜態(tài)修飾 |
---|---|---|
private,protected,public | final | static |
使用規(guī)則包括:
(1)被private修飾的成員變量和方法,不能被類對象顯示調(diào)用和子類對象內(nèi)部調(diào)用谬擦。同理切距,子類方法不能重寫父類private方法。
(2)被protected修飾的成員變量和方法惨远,不能被類對象顯示調(diào)用谜悟,但可以被子類對象內(nèi)部調(diào)用话肖。
(3)被public修飾的成員變量和方法,以上權(quán)限都有葡幸。
(4)子類同名方法(不管重寫還是重載)最筒,權(quán)限一定要大于等于上級父類。
(5)被final修飾的變量為常量蔚叨;被final修飾的方法不可被子類重寫床蜘;被final修飾的類不可被繼承。
(6)被static修飾的變量為全局變量蔑水,在類被加載時就被創(chuàng)建邢锯;被static修飾的方法,為全局方法肤粱。同時不能在其內(nèi)部調(diào)用該類的動態(tài)成員變量和動態(tài)方法弹囚;static不被用于修飾外部類,但可用于修飾內(nèi)部類领曼。靜態(tài)內(nèi)部類創(chuàng)建對象不需要外部類對象鸥鹉,同時靜態(tài)內(nèi)部類只能訪問靜態(tài)的外部類變量和方法。
(7)靜態(tài)變量和成員的語法規(guī)則庶骄,對于public的靜態(tài)變量和方法毁渗,通常直接使用(類名+靜態(tài)變量)和(類名+靜態(tài)方法)調(diào)用,而不是使用對象+變量/方法的方式(這種方法可行单刁,但不被提倡)灸异。
-
類的基本特點:封裝、繼承羔飞、多態(tài)肺樟。
(1)封裝是為了保護成員變量,但是也有擴展成員變量使用范圍的靜態(tài)成員變量逻淌。
(2)繼承最初是為了復(fù)用代碼么伯,后來是因為樹狀結(jié)構(gòu)不僅易于人類理解,而且可以拓展出多態(tài)這樣可愛的特性卡儒。
(3)多態(tài)要實現(xiàn)田柔,除了樹狀結(jié)構(gòu),最核心的技術(shù)是必須用到方法重寫的概念骨望。關(guān)于多態(tài)使用場景硬爆,舉個例子,編一個籃球賽程序讓一個球員對象投籃擎鸠,只需要主方法中調(diào)用一個球員對象投籃缀磕,具體到子一層對象后衛(wèi)、前鋒、中鋒虐骑,子二層對象科比准验、詹姆斯、奧尼爾在投籃動作上不同的表現(xiàn)廷没,只需要在具體子類和子子類中使用投籃方法重寫修改就行,不需要動主方法垂寥。而若是傳統(tǒng)的編程方法颠黎,則需要在主方法中加入大量的條件分支。
(4)這里需注意方法重寫與方法重載的區(qū)別滞项。 -
繼承多態(tài)狭归、接口多態(tài)、泛型文判、反射过椎。
(1)繼承多態(tài)的核心是方法重寫各不相同,但是各方法間可以通過復(fù)用父類方法而重用大部分代碼戏仓;
(2)接口多態(tài)的核心是方法實現(xiàn)各不相同疚宇,且各方法間沒有可復(fù)用的代碼,所以方法實現(xiàn)過程完全不同赏殃;
(3)泛型的核心是方法相同敷待,即方法代碼相同,但方法操作的具體對象類型不同仁热。
(4)反射的核心是身份鑒定榜揖,在上述三種技術(shù)把程序玩懵圈了以后,使出一招ID Identify大招抗蠢,判斷現(xiàn)在程序里運轉(zhuǎn)的到底是TM的什么類型對象举哟。嗯,我猜在判定以后還能造出同類型的分身對象出來迅矛,玩6了不遜于孫悟空揪下一把毫毛妨猩,變出萬子千孫出來。
11.其他:Swing诬乞,并發(fā)册赛,TCP,JDBC都大略看了一下震嫉,等開發(fā)CE項目V2.0的時候再仔細琢磨吧森瘪。
參考書目
《Java從入門到精通》
2017-11-8