? ? ? ? 在生活和工作中有很多碎片時間可以用來看書东抹,但通常書籍一般都五六百頁,常常忘記自己看到哪里沃测,遂開文章記錄.選擇這本書因我專業(yè)基礎(chǔ)并不扎實缭黔,而且安卓也是基于java,此書可以彌補(bǔ)自己的不足蒂破。若看完本書將購買《Java核心技術(shù)卷2 高級特性(原書第9版)》馏谨。
? ? ? ? 第一章:Java程序設(shè)計概述
? ? ? ? 本章主要講述了Java中關(guān)鍵的術(shù)語:簡單性、面向?qū)ο蟾矫浴⒕W(wǎng)絡(luò)技能惧互、健壯性、安全性喇伯、體系結(jié)構(gòu)中立喊儡、可移植性、解釋型稻据、高性能艾猜、多線程、動態(tài)性。
? ? ? ? 面向?qū)ο笥腥齻€特征:封裝匆赃、繼承淤毛、多態(tài)。
? ? ? ? 因面試遇到過這個問題算柳,在這里詳細(xì)說明一下面向?qū)ο蟮亩x和三個特征低淡。
? ? ? ? 面向?qū)ο螅?/p>
(1)對象
? ? 首先說明對象,對象是人們要進(jìn)行研究的任何事物瞬项,從最簡單的整數(shù)到復(fù)雜的飛機(jī)等均可看作對象查牌,它不僅能表示具體的事物,還能表示抽象的規(guī)則滥壕、計劃或事件。用一句裝b的話來說兽泣,萬物皆對象绎橘。
? (2)對象的狀態(tài)和行為。
對象具有狀態(tài)唠倦,一個對象用數(shù)據(jù)值來描述它的狀態(tài)称鳞。
對象還有操作,用于改變對象的狀態(tài)稠鼻,對象及其操作就是對象的行為冈止。
對象實現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對象的統(tǒng)一體中
(3)類候齿。
具有相同特性(數(shù)據(jù)元素)和行為(功能)的對象的抽象就是類熙暴。因此,對象的抽象是類慌盯,類的具體化就是對象周霉,也可以說類的實例是對象,類實際上就是一種數(shù)據(jù)類型亚皂。
類具有屬性俱箱,它是對象的狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來描述類的屬性灭必。
類具有操作狞谱,它是獨享的行為的抽象,用操作名和實現(xiàn)該操作的方法來描述禁漓。
(4)類的結(jié)構(gòu)跟衅。
在客觀世界中有若干類,這些類之間有一定的結(jié)構(gòu)關(guān)系璃饱。通常有兩種主要的結(jié)構(gòu)關(guān)系与斤,即一般--具體結(jié)構(gòu)關(guān)系,整體--部分結(jié)構(gòu)關(guān)系。
①一般--具體結(jié)構(gòu)稱為分類結(jié)構(gòu)撩穿,也可以說是“或”關(guān)系磷支,或者是“is a”關(guān)系。
②整體--部分結(jié)構(gòu)稱為組裝結(jié)構(gòu)食寡,它們之間的關(guān)系是一種“與”關(guān)系雾狈,或者是“has a”關(guān)系。
(5)消息和方法抵皱。
對象之間進(jìn)行通信的結(jié)構(gòu)叫做消息善榛。在對象的操作中,當(dāng)一個消息發(fā)送給某個對象時呻畸,消息包含接收對象去執(zhí)行某種操作的信息移盆。發(fā)送一條消息至少要包括說明接受消息的對象名、發(fā)送給該對象的消息名(即對象名伤为、方法名)咒循。一般還要對參數(shù)加以說明,參數(shù)可以是認(rèn)識該消息的對象所知道的變量名绞愚,或者是所有對象都知道的全局變量名叙甸。
類中操作的實現(xiàn)過程叫做方法,一個方法有方法名位衩、返回值裆蒸、參數(shù)、方法體糖驴。
(6)面向?qū)ο?/p>
? ? 面向?qū)ο笫且环N思想僚祷,它基于面向過程,強(qiáng)調(diào)的是具備功能的對象遂赠,讓對象調(diào)用方法解決問題久妆。在開發(fā)中,要完成特定的功能就要去尋找具備相應(yīng)功能的對象跷睦,如果找不到對象就創(chuàng)建對象筷弦,適用對象,維護(hù)完善對象抑诸。比如人們想吃飯烂琴,可以去飯館買著吃也可以自己做,自己做就是面向過程蜕乡,需要買菜奸绷、洗菜、做飯层玲、再吃飯号醉。去飯館就是面向?qū)ο蠓粗ⅲo錢然后吃飯。省去了做的過程畔派。再比如洗衣服铅碍,如果沒有女朋友就得自己洗,就是面向過程线椰。女朋友給洗呢胞谈,就是面向?qū)ο螅灿杏辛伺笥岩裁嫦蜻^程的情況……
? ? 面向?qū)ο蟮乃枷胩攸c是 1.讓復(fù)雜的事情簡單化憨愉。2.更符合人類的思維要求烦绳。3.角色從執(zhí)行者變?yōu)橹笓]者。
(7)面向?qū)ο筇卣鳎悍庋b
? ? 封裝就是把不需要對外暴露的狀態(tài)信息隱藏在對象內(nèi)部配紫,不允許外部程序直接訪問對象的信息径密,而是通過該類對外提供公共的訪問方式對其訪問和操作。好處是將變化隔離躺孝,提高了安全性睹晒,便于使用,提高了重用性括细。
(8)面向?qū)ο筇卣鳎豪^承
? ? 當(dāng)多各類中有很多共性的內(nèi)容時,我們可以把這些共性內(nèi)容抽取出來封裝成一個類戚啥,讓這些類與這個封裝的類產(chǎn)生關(guān)系奋单,這種關(guān)系就是繼承。Java只支持單繼承猫十,但能夠多層次繼承览濒。接口能夠單繼承,也能夠多繼承拖云。
? ? 好處是提高了代碼的復(fù)用性贷笛,提高了代碼的維護(hù)性,提高了代碼的擴(kuò)展性宙项,讓類與類產(chǎn)生了關(guān)系乏苦,是多態(tài)的前提。弊端是增強(qiáng)了類與類的耦合性尤筐。
(9)面向?qū)ο筇卣鳎憾鄳B(tài)
? ? 多態(tài)就是同一事物在不同時刻表現(xiàn)出來的不同狀態(tài)汇荐。
? ? 體現(xiàn)是父類引用指向子類對象,父類引用作為參數(shù)可以接收其子類對象盆繁,接口引用作為參數(shù)可以接收其實現(xiàn)類對象掀淘。
? ? 前提是類與類之間要有關(guān)系,要么繼承油昂,要么實現(xiàn)革娄,要有方法重寫倾贰,父類或者接口指向子類對象。
? ? 好處是提高了代碼的維護(hù)性拦惋,提高了代碼的擴(kuò)展性
? ? 弊端是父類引用只能調(diào)用父類的方法匆浙,不能調(diào)用子類特有的方法和屬性。
?? ?向上轉(zhuǎn)型:父類或者父接口指向子類對象架忌。
? ? 向下轉(zhuǎn)型:把那個引用強(qiáng)制轉(zhuǎn)為子類對象吞彤。
? ? 多態(tài)中成員方法和變量的特點:一般方法編譯看左邊(父類)運行看右邊(子類),靜態(tài)方法編譯看左邊運行看左邊叹放,變量是編譯看左邊運行看左邊饰恕。
? ? ? ? java 1.0版本 1996年 內(nèi)容為語言本身 類與接口的數(shù)量211個
? ? ? ? java 1.1版本 1997年 內(nèi)容為內(nèi)部類?類與接口的數(shù)量477個
? ? ? ? ?java 1.2版本 1998年 內(nèi)容為無?類與接口的數(shù)量1524個
? ? ? ? java 1.3版本 2000年 內(nèi)容為無 類與接口的數(shù)量1840個
? ? ? ? java 1.4版本 2002年 內(nèi)容為斷言?類與接口的數(shù)量2723個
? ? ? ? java 5.0版本 2004年 內(nèi)容為泛型類型、“for each”循環(huán)井仰、可變元參數(shù)埋嵌、自動裝箱、元數(shù)據(jù)俱恶、枚舉雹嗦、靜態(tài)導(dǎo)入 ?類與接口的數(shù)量3279個
? ? ? ? java 6版本 2006年 內(nèi)容為無?類與接口的數(shù)量3793個
? ? ? ? java 7版本 2011年 內(nèi)容為基于字符串的switch、變形操作符合是、二進(jìn)制字面量了罪、異常處理改進(jìn)?類與接口的數(shù)量4024個
? ? ? ? 第二章:Java程序設(shè)計環(huán)境
下載JDK、配置環(huán)境變量
? ? 開發(fā)工具(IDE):eclipse
? ? applet已經(jīng)很少有人使用聪全,忽略泊藕。
? ? ? ?第三章:Java的基本程序設(shè)計結(jié)構(gòu)
? ? java對大小寫敏感
? ? 類名是以大寫字母開頭的名詞,每一個單詞的第一個字母都大寫
? ? 整型 int4字節(jié) short2字節(jié) long8字節(jié) byte1字節(jié)
? ? 浮點類型 float4字節(jié) double8字節(jié)
? ? char類型 通常表示字符常量 ? \b退格 \t制表 \n換行 \r回車 \"雙引號 \'單引號 \\反斜杠
? ? boolean布爾類型
? ? 變量难礼、變量初始化
? ? 常量名使用全大寫?
? ? 運算符+-*/ ?++ ?-- 前綴方式先先進(jìn)性+-再運算娃圆,后綴方式使用原來的值。== 蛾茉!=?
? ? 位運算符&(與)|(或)^(亦或)~(非)
? ? 數(shù)學(xué)常量與函數(shù) Math.sin cos tan atan?
? ? 數(shù)值類型之間的轉(zhuǎn)換讼呢,強(qiáng)制類型轉(zhuǎn)換
? ? 字符串 檢測字符串是否相等equals “”和null ?字符串的api
? ? 輸入輸出 格式化輸出 Scanner
? ? 控制流程 條件語句 if()else{} ?循環(huán)語句 while(true){} ?for(int x =1;x<=10;i++){} 多重選擇 switch (case){}case可以為char byte short int 枚舉
? ? 大數(shù)值BigInteger BigDecimal
? ? 數(shù)組 int[] a=new int[100] ?java中允許數(shù)組的長度為0 ? for each 循環(huán)(增強(qiáng)for) 數(shù)組排序 Arrays.sort?
? ? ? ? 第四章:對象與類
1.面向?qū)ο蟪绦蛟O(shè)計概述(OOP)
Pascal設(shè)計設(shè)出書《算法+數(shù)據(jù)結(jié)構(gòu)=程序》,面向?qū)ο蟪绦蛟O(shè)計將數(shù)據(jù)放在第一位谦炬,然后再考慮操作數(shù)據(jù)的算法悦屏。
1.1類
封裝,關(guān)鍵在于絕對不能讓類中的方法直接地訪問其他類的實例域键思,所有類的父類Object
1.2類與類之間的關(guān)系
依賴(uses-a)一個類的方法操縱另一個類的對象窜管,我們可以說一個類依賴另一個類。
聚合(has-a)一個對象包含另外一個對象
繼承(is-a)類a擴(kuò)展類b稚机,類a不但包含從類b繼承的方法幕帆,還會擁有一些額外的功能。
在java中任何對象變量的值都是對存儲在另外一個地方的一個對象的引用赖条,new操作符的返回值也是一個引用失乾。
對實例域作出修改的方法成為更改器方法(mutator method)比如set和add方法常熙,僅訪問實例域而不進(jìn)行修改的方法成為訪問器方法(accessor method)比如get方法。
多個源文件的使用(109頁)碱茁?
靜態(tài)方法由類名直接調(diào)用裸卫,而不是用對象調(diào)用。
方法參數(shù):一個方法不可能修改一個基本數(shù)據(jù)類型的參數(shù)纽竣,而對象引用作為參數(shù)就不能同了墓贿。
比如,double percent=10; tripleValue(percent);
public static void tripleValue(double x){x=3*x}
經(jīng)過以上步驟蜓氨,最終x還是等于10.
如果:harry=new Employee(...); tropleSalary(harry);
public static void tripleSalary(Employee x){x.raiseSalary(200)};
最終x和harry引用的Employee中的屬性增加了3倍聋袋?大概是這個意思吧。
最終說明Java程序設(shè)計語言對對象采用的不是引用調(diào)用穴吹,實際上對象引用進(jìn)行的是值傳遞幽勒。
Java程序設(shè)計語言中方法參數(shù)的使用情況:
一個方法不能修改一個基本數(shù)據(jù)類型的參數(shù)(即數(shù)值型和布爾型)
一個方法可以改變一個對象參數(shù)的狀態(tài)。
一個方法不能讓對象參數(shù)已用一個新的對象港令。
2.對象構(gòu)造
重載:多個方法有相同的名字啥容、不同的參數(shù)。返回值不屬于方法簽名的一部分顷霹,不能有兩個名字相同咪惠,參數(shù)類型也相同卻返回不同類型值的方法。
如果類中沒有構(gòu)造器淋淀,系統(tǒng)會提供一個無參構(gòu)造硝逢,如果只有一個有參構(gòu)造,不能使用無參構(gòu)造創(chuàng)建對象绅喉。
類的參數(shù)名可以采用this.name 的形式訪問實例域,this指示隱式參數(shù)叫乌,也就是被構(gòu)造的對象柴罐。如果構(gòu)造器的第一個語句形如this(...),這個構(gòu)造器將調(diào)用同一個類的另一個構(gòu)造憨奸。比如Android中自定義View 構(gòu)造參數(shù)中革屠,一個參數(shù)的調(diào)用兩個參數(shù)的,兩個參數(shù)調(diào)用三個參數(shù)的構(gòu)造排宰。
java有垃圾回收機(jī)制似芝,可以為任何一個類添加finalize方法,這個方法將在垃圾回收器清楚對象之前調(diào)用板甘。
3.包
類導(dǎo)入的兩種形式党瓮,靜態(tài)導(dǎo)入,包作用域盐类,類路徑寞奸,設(shè)置類路徑呛谜,文檔注釋
4.類的設(shè)計技巧
一定要保證數(shù)據(jù)私有、一定要對數(shù)據(jù)初始化枪萄、不要在類中使用過多的基本類型隐岛、不是所有的域都需要獨立的域訪問器和域更改器、將職責(zé)過多的類進(jìn)行分解聚凹、類名和方法名要體現(xiàn)他們的職責(zé)童谒。
第五章:繼承
1.類、超類和子類
超類不能使用子類的方法,子類能使用父類的方法和屬性(域)。在子類方法中第一行添加super 便可先調(diào)用父類的方法,也可調(diào)用超類的構(gòu)造器,如果沒有調(diào)用,將自動調(diào)用。
2.多態(tài)
Employee e;
e=new Employee(...); 員工是一個員工
e=new Manager(...);經(jīng)理是一個員工
動態(tài)綁定:
①編譯器會獲得所有可能被調(diào)用的候選方法
②編譯器將查看調(diào)用方法時提供的參數(shù)類型,并進(jìn)行匹配陪汽,這個過程稱為重載解析
③如果是private方法static方法final方法或者構(gòu)造器训挡,編譯器會準(zhǔn)確知道調(diào)用哪個方法摊册,這個稱為靜態(tài)綁定
④虛擬機(jī)預(yù)先為每個類創(chuàng)建了一個方法表忘分,列出了簽名和實際調(diào)用的方法兵睛,如果子類沒有會在超類中查找祖很。
3.final修飾類不可被繼承,方法自動稱為final方法啊终,修飾方法不能被覆蓋昔期。String類也是final類硼一。
強(qiáng)制類型轉(zhuǎn)換:
double x =3.405; int nx=(int)x; 將x轉(zhuǎn)換為整數(shù)累澡,舍棄了小數(shù)部分。只能在繼承層次內(nèi)進(jìn)行類型轉(zhuǎn)換般贼。
抽象類:
實現(xiàn)類重寫抽象方法愧哟,類不含抽象方法,也可以將類聲明為抽象類哼蛆,抽象類不能被實例化(不能new)蕊梧,但可以創(chuàng)建具體子類。
受保護(hù)訪問:
如果超類的屬性設(shè)置為proteced腮介,子類可以訪問肥矢,其他類不可以。
4.Object所有類的超類
可以使用Object類型的變量引用任何類的對象叠洗。在java中只有基本數(shù)據(jù)類型不是對象甘改。
相等測試與繼承:Java語言規(guī)范要求equals方法具有下面的特性,自反性惕味、對稱性楼誓、傳遞性、一致性名挥。
使用instanceof檢測疟羹?調(diào)用getClass檢測。
hashCode方法(散列碼)
toString方法返回標(biāo)示對象值的字符串
5.泛型數(shù)組列表禀倔?
給集合添加泛型榄融,不必指出數(shù)組的大小,使用add將任意多的元素添加到數(shù)組中救湖,使用size()替代length計算元素的數(shù)目愧杯,使用a.get(i)替代a[i]訪問元素。
6.對象包裝器與自動裝箱
Integer 是int 的包裝器鞋既,包裝器還有Long力九、Float、Double邑闺、Short跌前、Byte、Character陡舅、Void和Boolean.
list.add(Integer.valueof(3))這種變換成為自動裝箱抵乓。int n=list.get(i)稱為自動拆箱。
7.參數(shù)數(shù)量可變的方法。
方法參數(shù)為Object…args 是可變參數(shù)
枚舉類:public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE}這個聲明定義的類型是一個類灾炭,剛好有4個實例茎芋。每個枚舉類型都有一個靜態(tài)的values方法,它將返回一個包含全部枚舉值的數(shù)組蜈出。
8.反射田弥,能夠分析類能力的程序稱為反射。
反射可以用來:在運行中分析類的能力掏缎,在運行中查看對象皱蹦,例如,編寫一個toString方法供所有類使用眷蜈。實現(xiàn)通用的數(shù)組操作代碼沪哺。利用Method對象,這個對象很像C++中的函數(shù)指針酌儒。
Class類.Object類的getClass方法將會返回一個Class類型的實例辜妓。
異常捕獲,try{}catch(Exception e ){}
利用反射分析類的能力-檢查類的結(jié)構(gòu)忌怎?
在運行時使用反射分析對象籍滴?
使用反射編寫泛型數(shù)組代碼,調(diào)用任意方法榴啸。
9.繼承設(shè)計的技巧
將公共操作和域放在超類孽惰,不要使用受保護(hù)的域,使用繼承實現(xiàn)“is-a”關(guān)系鸥印,除非所有繼承的方法都有意義否則不要使用繼承秒啦,在覆蓋方法時不要改變預(yù)期的行為乔夯,使用多態(tài)而非類型信息郎哭,不要過多地使用反射著淆。
第六章:接口與內(nèi)部類
1.接口
在Java程序設(shè)計語言中,接口不是類潜的,而是對類的一組需求描述骚揍,這些類要遵從接口描述的統(tǒng)一格式進(jìn)行定義。
接口絕不能含有實例域啰挪,也不能在接口中實現(xiàn)方法信不,接口中所有方法都是public的。
接口不是類亡呵,不能new抽活,但能聲明接口的變量。接口中不能包含實例域和靜態(tài)方法政己,可以包含常量酌壕,接口中的域被自動設(shè)為public static final.
類實現(xiàn)多個接口,使用逗號將實現(xiàn)的各個接口分隔開歇由。
2.回調(diào) 是一種常見的設(shè)計模式卵牍,可以指出某個特定事件發(fā)生時應(yīng)該采取的動作。
3.內(nèi)部類 定義在另一個類中的類沦泌。
特點:
①內(nèi)部類方法可以訪問該類定義所在的作用域中的數(shù)據(jù),包括私有數(shù)據(jù)
②內(nèi)部類可以對同一個包中的其他類隱藏起來
③當(dāng)想要定義一個回調(diào)函數(shù)且不想編寫大量代碼時谢谦,使用匿名內(nèi)部類比較便捷释牺。
局部內(nèi)部類、匿名內(nèi)部類回挽、靜態(tài)內(nèi)部類
代理:利用代理可以在運行時創(chuàng)建一個實現(xiàn)了一組特定接口的新類没咙,這種功能只有在編譯時無法確定需要實現(xiàn)哪個接口時才有必要使用。
第七章:圖形程序設(shè)計
略千劈。
第八章:事件處理
略祭刚。
第九章:Swing用戶界面組件
略。
第十章:部署應(yīng)用程序和applet
1.部署應(yīng)用程序:JAR文件墙牌、清單文件涡驮、可運行jar文件、沙箱喜滨?簽名代碼
2.應(yīng)用程序首選項存儲?
屬性映射:是一種存儲鍵/值對的數(shù)據(jù)結(jié)構(gòu)捉捅。屬性映射經(jīng)常被用來存放配置信息。虽风?
特性:鍵和值都是字符串棒口、鍵/值對可以很容易地寫入文件或者從文件讀出、用二級表存放默認(rèn)值焰情。
Properties() 創(chuàng)建一個空的屬性映射?
Properties(Properties defaults) ?用一組默認(rèn)值創(chuàng)建空的屬性映射
Preferences API :提供了一個與平臺無關(guān)的中心知識庫陌凳,在Windows中,Preferences類用來注冊存儲信息内舟。這個類具有樹狀結(jié)構(gòu)合敦,每個節(jié)點的路徑類似于包名,api的設(shè)計者建議配置節(jié)點路徑與程序中的包名匹配验游。每個節(jié)點都有一個用來存放鍵充岛、值的獨立表,用戶可以用這張表存放數(shù)字耕蝉,字符串或字節(jié)數(shù)組崔梗,但不適合存放序列化的對象。
第十一章:異常垒在、斷言蒜魄、日志和調(diào)試
1.處理錯誤
異常分類:Throwable類
Error 類層次結(jié)構(gòu)描述了Java運行時系統(tǒng)內(nèi)部錯誤和資源消耗錯誤。
Exception層次結(jié)構(gòu)分為RuntimeException 和 IOException.
RuntimeException包括:錯誤的類型轉(zhuǎn)換,數(shù)組訪問越界谈为,訪問空指針
IOException包括:試圖在文件尾部后面讀取數(shù)據(jù)旅挤、試圖打開一個不存在的文件、試圖根據(jù)給定的字符串查找Class對象伞鲫,而這個字符串表示的類并不存在粘茄。
聲明已檢查異常:在方法參數(shù)后面 throws FileNotFoundExcption.
聲明情況包括以下4種:調(diào)用一個拋出已檢查異常的方法、程序運行過程中發(fā)現(xiàn)錯誤,并且利用throw語句拋出一個已檢查異常秕脓、程序出現(xiàn)錯誤柒瓣、java虛擬機(jī)和運行時庫出現(xiàn)的內(nèi)部錯誤。
捕獲異常:try{}catch(ExceptionType e){} ?如果在try中的代碼拋出了catch中的異常吠架,執(zhí)行catch后的代碼芙贫。
可以捕獲多個異常,再次拋出異常與異常鏈傍药、finally子句屹培,一定會執(zhí)行的語句、帶有資源的try語句怔檩?分析堆棧跟蹤元素
使用異常機(jī)制的技巧:異常處理不能代替簡單的測試褪秀、不要過分地細(xì)化異常、利用異常層次結(jié)構(gòu)薛训、不要壓制異常媒吗、在檢測錯誤時,苛刻要比放任更好乙埃。
2.使用斷言
assert 條件闸英;比如? ? ? ?和 ? ? ? ?assert 條件:表達(dá)式;比如 assert i%3==2;
這兩種形式都會對條件進(jìn)行檢測介袜,如果結(jié)果為false甫何,則拋出一個AssertionError 異常。在第二種形式中遇伞,表達(dá)式將被傳入AssertionError的構(gòu)造器辙喂,并轉(zhuǎn)換成一個消息字符串。
3.記錄日志
日志系統(tǒng)管理者是一個名為Logger.global的默認(rèn)日志記錄器
Logger.getGlobal().info("File->Open menu item selected");在默認(rèn)情況下鸠珠,這條記錄會顯示出如下所示的內(nèi)容:
May 10,2013 10:12:15 PM LoggingImageViewer fileOpen
INFO:File->Open menu item selected
取消所有日志:Logger.getGlobal().setLevel(Level.OFF);
高級日志:日志記錄級別 logger.setLevel(Level.FINE) SEVERE WARNING INFO 巍耗。。渐排。
修改日志管理器配置炬太,本地化?驯耻、處理器記錄格式為xml亲族、過濾器炒考、格式化器、使用調(diào)試器
第十二章:泛型程序設(shè)計
1.類型的參數(shù)的魅力在于:使得程序具有更好的可讀性和安全性霎迫。
泛型類票腰?、泛型方法女气?、類型變量的限定测柠?炼鞠、泛型代碼和虛擬機(jī)?
2.約束與局限性
/**
*?instanceof運算符用法
*?運算符是雙目運算符,左面的操作元是一個對象,右面是一個類.當(dāng)
*?左面的對象是右面的類創(chuàng)建的對象時,該運算符運算的結(jié)果是true,否則是false
*
*?說明:(1)一個類的實例包括本身的實例,以及所有直接或間接子類的實例
*?(2)instanceof左邊操作元顯式聲明的類型與右邊操作元必須是同種類或右邊是左邊父類的繼承關(guān)系,
*?(3)不同的繼承關(guān)系下,編譯出錯
*/
不能使用基本類型實例化類型參數(shù)轰胁、運行時類型查詢只適用于原始類型谒主、不能創(chuàng)建參數(shù)化類型的數(shù)組、不能實例化類型變量赃阀、泛型類的靜態(tài)上下文中類型變量無效霎肯、不能拋出或捕獲泛型類的實例、注意擦除后的沖突榛斯、都沒看懂观游??驮俗?
通配符類型:Pair<? extends Employee> ??
通配符的超類型限定懂缕、無限定通配符、通配符捕獲王凑、反射和泛型
第十三章:集合
1.集合接口
數(shù)據(jù)結(jié)構(gòu)
隊列:可以在隊列的尾部添加元素搪柑,在隊列的頭部刪除元素,并且可以查找隊列中元素的個數(shù)索烹,當(dāng)需要收集對象工碾,并按照先進(jìn)先出的規(guī)則檢索對象時就應(yīng)該使用隊列。
隊列的實現(xiàn)方式有兩種百姓,一種是循環(huán)數(shù)渊额,另一種是用鏈表。
集合類的基本接口是Collection接口 ?
add方法垒拢,Iterator 迭代器端圈,一個是添加的方法,一個是反復(fù)調(diào)用next方法子库,訪問集合中每個元素舱权。從java5.0可用for each表達(dá),
鏈表:在Java程序設(shè)計語言中仑嗅,所有鏈表都是雙向鏈接的宴倍,即每個節(jié)點還存放著指向前驅(qū)節(jié)點的引用张症。
數(shù)組列表、散列集鸵贬、散列碼俗他、在java中散列表用鏈表數(shù)組實現(xiàn),每個列表被稱為桶阔逼。
樹集兆衅,TreeSet、隊列與雙端隊列嗜浮、優(yōu)先級隊列羡亩、
數(shù)據(jù)結(jié)構(gòu):映射表 ? ?用來存放鍵/值對,如果提供了鍵就能查找到值危融。
映射表的視圖有三種畏铆,鍵集、值集合和鍵/值對集吉殃。
專用集與映射表類
弱散列映射表辞居、連接散列集和連接映射表、枚舉集與映射表
EnumSet類沒有公共的構(gòu)造器蛋勺,可以使用靜態(tài)工廠方法構(gòu)造瓦灶。
2.集合框架
兩個基本接口:Collection和Map.
boolean add(E element) 、V put(k key,V value) 插入添加 ?V get(k key) 讀取某個元素?
視圖與包裝器:輕量級集成包裝器抱完、子范圍倚搬、不可修改的視圖、同步視圖乾蛤、檢查視圖每界、關(guān)于可選操作的說明、批操作家卖、集合與數(shù)組之間的轉(zhuǎn)換眨层、
3.算法
排序與混排Collections.sort、二分查找上荡、簡單算法趴樱、編寫自己的算法
遺留的集合:hashtable類、枚舉酪捡、屬性映射表叁征、棧、位集逛薇。
第十四章:多線程
1.多線程
一個程序同時執(zhí)行多個任務(wù)捺疼,通常每一個任務(wù)稱為一個線程,它是線程控制的簡稱永罚∑『簦可以同時運行一個以上線程的程序稱為多線程程序卧秘。
多進(jìn)程與多線程的區(qū)別在于每個進(jìn)程擁有自己的一整套變量,而線程則共享數(shù)據(jù)官扣。
void start()翅敌;啟動這個線程,將引發(fā)調(diào)用run()方法立即返回惕蹄,并且新線程將并行運行蚯涮。
void run();調(diào)用關(guān)聯(lián)Runnable的run方法
2.中斷線程
interrupt 方法可以用來請求終止線程卖陵。
3.線程狀態(tài)
new(新創(chuàng)建)遭顶、Runnable(可運行)、Blocked(被阻塞)赶促、Waiting(等待)、Timed waiting(計時等待)挟炬、Terminated(被終止)
4.線程屬性
線程優(yōu)先級(setPriority)鸥滨、守護(hù)線程(setDaemon(true))、未捕獲異常處理器谤祖、
5.同步
鎖對象(synchronized)婿滓、條件對象
? 鎖可以用來保護(hù)代碼片段,任何時刻只能有一個線程執(zhí)行被保護(hù)的代碼粥喜。
? 鎖可以管理視圖進(jìn)入被保護(hù)代碼段的線程凸主。
? 鎖可以擁有一個或多個相關(guān)的條件對象。
? 每個條件對象管理那些已經(jīng)進(jìn)入被保護(hù)的代碼段但還不能運行的線程额湘。
同步阻塞卿吐、監(jiān)視器概念、final變量锋华、原子性嗡官、死鎖、線程局部變量毯焕、鎖測試與超時衍腥、讀/寫鎖、為什么棄用stop和suspend方法
6纳猫、阻塞隊列
7婆咸、線程安全的集合
高效的映射表、集合和隊列芜辕,寫數(shù)組的拷貝尚骄,較早的線程安全集合(Vector和Hashtable),Callable與Future
8侵续、執(zhí)行器乖仇,線程池憾儒,預(yù)定執(zhí)行,控制任務(wù)組乃沙、同步器起趾、線程與Swing?
本書已看完,還有些不懂的地方以后再向其他人請教吧警儒⊙雕桑看了本書卷二的目錄,發(fā)現(xiàn)比較深并且與安卓關(guān)系不大蜀铲,暫時先不看了吧边琉。