?1)java語(yǔ)言基礎(chǔ)(3周) 2)mysql 3)jdbc:java訪問(wèn)數(shù)據(jù)庫(kù)技術(shù) 4)項(xiàng)目:控制臺(tái)管理項(xiàng)目 1)html,、css,、javascript 2)javaweb(JSP、Servlet) 3)ajax 4)jQuery 5)配置管理工具 6)項(xiàng)目:web項(xiàng)目 3.框架(SSM) 1)MyBatis 2)Spring 3)Spring MVC 4)Maven:項(xiàng)目管理工具 5)Linux 6)Redis \t:制表符 \n:換行符 ctrl+z:撤銷前一步的操作 window=》透視圖=》回復(fù)透視圖(一組view窗口) view:一個(gè)窗口
在eclipse中默認(rèn)使用粗體顯示 window=>preferences=>java=>editor=>syntax coloring=>keywords excluding return
6.整數(shù)類型:byte,、short,、int、long byte:1個(gè)字節(jié)等于8個(gè)bit,,-128到127 short:2個(gè)字節(jié)16個(gè)bit,,正負(fù)3萬(wàn)多 int:4字節(jié),32個(gè)bit,,正負(fù)21億多 long:8字節(jié),,64bit,,
7.浮點(diǎn)數(shù):float、double float:?jiǎn)尉雀↑c(diǎn)數(shù),,32bit,,有效位數(shù)6-7位 double:雙精度浮點(diǎn)數(shù),64bit,,有效位數(shù):15-16位
8.字符型:char java中字符型的值,,通常用英文單引號(hào)括起來(lái),代表單個(gè)字符 長(zhǎng)度為16bit,,是一個(gè)無(wú)符號(hào)整數(shù),,最小值為:0,最大值:65535
轉(zhuǎn)義字符:使用“\”把其轉(zhuǎn)化為字符本身輸出,,那么使用“\”的字符成為轉(zhuǎn)義字符
\t:制表符 \n:換行符 \\:表示輸出一個(gè)斜杠“\” \':表示單引號(hào) \":表示雙引號(hào)
9.布爾類型——boolean boolean類型適合與邏輯運(yùn)算,,一般用于表示真和假 boolean類型的值兩個(gè):true、false
1)ASCII:美國(guó)信息交換標(biāo)準(zhǔn)代碼,,主要用于英語(yǔ)和其他西歐語(yǔ)言,,128個(gè) 48=》'0' 57=> '9'
65=>'A' 97=>'a'
32=>空格符 13=》回車符 2)gb2312:中文編碼 3)gbk:中文編碼 4)window-1251:俄文編碼 5)unicode:收集了世界所有國(guó)家的文字,,進(jìn)行統(tǒng)一編碼 1)utf-8:使用1到4個(gè)字節(jié)為每個(gè)字符編碼,,為長(zhǎng)度可變的編碼,,能減少存儲(chǔ)空間,,使用最廣泛的 2)utf-16:使用2或4個(gè)字節(jié)為每個(gè)字符編碼,java中的char類型使用就是該編碼方式 3)utf-32:使用4個(gè)字節(jié)為每個(gè)字符編碼
1)創(chuàng)建鍵盤輸入對(duì)象: Scanner input = new Scanner(System.in); 2)從鍵盤讀取數(shù)據(jù),,并轉(zhuǎn)換為int類型,,該方法是一個(gè)阻塞的方法(如果不從鍵盤輸入內(nèi)容,,該程序不會(huì)向下運(yùn)行) input.nextInt();
1.++ -- n++ ++n
2.關(guān)系運(yùn)算(比較運(yùn)算符):> < == != >= <= 結(jié)果:boolean
3.邏輯運(yùn)算: && || ,! & | 4.位運(yùn)算:只對(duì)byte,、short、char,、int,、long有效 & | ^ << >> >>> 5.三元運(yùn)算符:表達(dá)式1?表達(dá)式2:表達(dá)式3 優(yōu)先級(jí): 1元 > 2元 > 3元
算數(shù) > 比較 > 邏輯 > 賦值
括號(hào)最高
類型轉(zhuǎn)換 1.自動(dòng)類型轉(zhuǎn)換(隱式轉(zhuǎn)換):由取值范圍小的向取值范圍大的轉(zhuǎn)換 2.強(qiáng)制類型轉(zhuǎn)換 (int)3.14
程序邏輯: 補(bǔ)充: Scanner方法: next():讀取字符串,,到空格或回車結(jié)束 nextLine():讀取一行字符串,,到回車結(jié)束
String 方法: charAt(index):根據(jù)字符的索引號(hào),得到對(duì)應(yīng)的字符(索引號(hào)從0開始) 2.條件語(yǔ)句:主要用于告知程序當(dāng)某個(gè)添加成立時(shí),,須執(zhí)行滿足條件的相關(guān)語(yǔ)句 語(yǔ)法:if(條件){ 語(yǔ)句 } 4.if...else...語(yǔ)句 if(條件){ 語(yǔ)句塊1 }else{ 語(yǔ)句塊2 }
條件為true,,執(zhí)行語(yǔ)句塊1,否則,,執(zhí)行語(yǔ)句塊2
5 if...else if... if(條件1){ 語(yǔ)句塊1 }else if(條件2){ 語(yǔ)句塊2 }else{ 語(yǔ)句塊3 } 條件1為true,,執(zhí)行語(yǔ)句塊1,否則如果條件2為true,則執(zhí)行語(yǔ)句塊2,,否則執(zhí)行語(yǔ)句塊3
7.switch語(yǔ)句: 語(yǔ)法: switch(表達(dá)式){ case 值1: 語(yǔ)句塊; case 值2: 語(yǔ)句塊; ... default: 語(yǔ)句塊; }
運(yùn)行過(guò)程: 1.計(jì)算switch后表達(dá)式的值 2.把該值與case后的值進(jìn)行比較,,如果找到相等的,,則,運(yùn)行該case后的語(yǔ)句塊內(nèi)容,,而不管后面的case條件是否滿足,, 直到碰到break關(guān)鍵字或結(jié)束switch語(yǔ)句的大括號(hào)為止
注意: 1)表達(dá)式的值只可以接受int、byte,、char,、short、String型,,不接受其他數(shù)據(jù)類型的值 2)不允許有重復(fù)的case取值 3)case 之間與default沒有順序,先判斷所有的case,,沒有匹配的case再執(zhí)行default,。 4)只能進(jìn)行等值比較 8.while循環(huán) 語(yǔ)法: while(表達(dá)式){ 循環(huán)體語(yǔ)句塊 }
執(zhí)行過(guò)程: 1.計(jì)算表達(dá)式的值,如果該表達(dá)式的值為true,,執(zhí)行循環(huán)體中的語(yǔ)句 2.然后再判斷表達(dá)式的值是否為true,,如果為true,,再次執(zhí)行循環(huán)體語(yǔ)句,,直到表達(dá)式的值為false,循環(huán)結(jié)束
9.隨機(jī)數(shù):在產(chǎn)生過(guò)程中是按照分布概率隨機(jī)產(chǎn)生的,,其結(jié)果是不可以預(yù)測(cè)的 偽隨機(jī)數(shù):計(jì)算機(jī)中的隨機(jī)函數(shù)是按照一定算法模擬產(chǎn)生的 //包:java.util.Random Random r = new Random(); 方法: nextInt(bound):產(chǎn)生一個(gè)大于等于0,,小于bound的整數(shù)
10.do...while循環(huán) 語(yǔ)法: do{ 循環(huán)體語(yǔ)句塊 }while(表達(dá)式);
執(zhí)行過(guò)程: 1.先執(zhí)行循環(huán)體語(yǔ)句塊代碼一次,,再判斷while后的表達(dá)式是否為true 2.如果為true,再次執(zhí)行循環(huán)體語(yǔ)句塊,,直到while后的表達(dá)式為false,結(jié)束循環(huán)
特點(diǎn):循環(huán)體語(yǔ)句塊至少執(zhí)行一次
11.for循環(huán) 語(yǔ)法: for(初始化表達(dá)式;循環(huán)條件表達(dá)式;循環(huán)體后表達(dá)式){ 循環(huán)體語(yǔ)句塊 }
執(zhí)行過(guò)程: 1.先執(zhí)行初始化表達(dá)式,,在整個(gè)循環(huán)過(guò)程中,,該表達(dá)式只執(zhí)行一次 2.執(zhí)行循環(huán)條件表達(dá)式,如果該表達(dá)式的值為true,,則執(zhí)行循環(huán)體語(yǔ)句塊,,然后執(zhí)行循環(huán)體后表達(dá)式 3.然后判斷循環(huán)條件表達(dá)式是否為true,如果為true,,繼續(xù)執(zhí)行循環(huán),,若為false,,則退出循環(huán)
12、String的equals()方法 用來(lái)比較兩個(gè)字符串的內(nèi)容是否相等,,若相等,,返回true,否則,返回false 例如: String s1 = "tom"; String s2 = "marry"; boolean b = s1.equals(s2); //false boolean b2 = s1.equals("tom");//true
13.嵌套循環(huán) 循環(huán)體中包含另一個(gè)循環(huán)
**** **** **** **** **** * 1 ** 2 *** 3 **** ***** 14.死循環(huán):循環(huán)無(wú)法結(jié)束,,一直執(zhí)行 15.break:用來(lái)終止某個(gè)語(yǔ)句塊的執(zhí)行,,用在循環(huán)中,用來(lái)強(qiáng)制退出循環(huán) break;//終止當(dāng)前循環(huán)的執(zhí)行 break lable;//終止lable循環(huán)的執(zhí)行
16.continue:只能用在循環(huán)中,,跳過(guò)本次循環(huán)的剩余語(yǔ)句,,執(zhí)行下一次循環(huán) 1.while(循環(huán)條件){ 循環(huán)體語(yǔ)句塊 } 2.do{ 循環(huán)體語(yǔ)句塊 }while(循環(huán)條件);
3.for(初始化表達(dá)式;循環(huán)條件;循環(huán)體執(zhí)行后代碼){ 循環(huán)體語(yǔ)句塊 }
for(int i = 1,j = 1; i <= 10;i++,j++){ }
4.break;//終止語(yǔ)句的執(zhí)行(switch、循環(huán)) break; break lable; 5.continue:只能用在循環(huán)中,,跳過(guò)本次循環(huán)的剩余語(yǔ)句,,執(zhí)行下一次循環(huán)
數(shù)組元素的默認(rèn)值:都是0 boolean類型數(shù)組:false char類型數(shù)組:utf-16編碼中的0 '\u0000' int類型數(shù)組:0 double類型數(shù)組:0.0
引用類型:null(空)
9.數(shù)組的長(zhǎng)度: 數(shù)組名.length(屬性)
10.異常:程序運(yùn)行期間,發(fā)生的錯(cuò)誤,,叫做異常 異常發(fā)生后,,如果沒有處理,就會(huì)終止程序的運(yùn)行 java.lang.ArrayIndexOutOfBoundsException:數(shù)組越界異常
11.foreach循環(huán)(語(yǔ)法糖) 語(yǔ)法: for(數(shù)組元素的數(shù)據(jù)類型 變量名 : 數(shù)組名){ 循環(huán)體語(yǔ)句塊 } 執(zhí)行過(guò)程: 該循環(huán)方式為按照數(shù)組下標(biāo)順序,,依次將冒號(hào)右邊數(shù)組中的每一個(gè)元素賦值給冒號(hào)左邊的變量,,然后執(zhí)行循環(huán)體語(yǔ)句 循環(huán)的次數(shù)為數(shù)組的長(zhǎng)度
12.排序:冒泡排序 1)相鄰元素進(jìn)行比較 2)每趟循環(huán)找出比較范圍內(nèi)的最大值 3)外循環(huán)比較N-1次(N表示數(shù)組的長(zhǎng)度) 4)內(nèi)循環(huán)比較N - i - 1次(i表示外循環(huán)的循環(huán)變量) 5)內(nèi)循環(huán)的循環(huán)體中,判讀元素的順序是否錯(cuò)誤,,已決定是否需要交換
13.Arrays:該類是數(shù)組的工具類,,包含了數(shù)組的常見操作,比如排序 Arrays.sort(數(shù)組名);————對(duì)數(shù)組進(jìn)行升序排序 Arrays.toString(數(shù)組名):遍歷數(shù)組元素,,生成一個(gè)字符串
/*int[] arr = {1,2,3,4};
int temp; for(int i = 0;i < arr.length/2;i++) { temp = arr[i]; arr[i] = arr[arr.length-i-1]; arr[arr.length-i-1] = temp; }
System.out.println(Arrays.toString(arr));*/
第五章 方法聲明及調(diào)用 1)代碼重用 2)簡(jiǎn)化了程序的編寫和維護(hù)
4.static:靜態(tài)的 修飾方法的時(shí)候,,該方法就稱為靜態(tài)方法
語(yǔ)法規(guī)定:靜態(tài)方法中只能直接調(diào)用靜態(tài)方法 return 表達(dá)式:作用是將return后面表達(dá)式的結(jié)果作為方法的返回值, 注意:return后表達(dá)式的值要與方法聲明的返回值類型匹配 方法定義: 返回值類型(void) 方法名(參數(shù)列表){ 方法體
return 返回值; }
參數(shù)的意義:代碼實(shí)現(xiàn)功能,,需要的外部數(shù)據(jù),,在調(diào)用方法的時(shí)候,傳遞給該方法 返回值的意義:把方法處理的結(jié)果返回給調(diào)用方
7.方法的參數(shù)為引用類型:傳遞的是引用類型數(shù)據(jù)的地址給形參,,于是就可以通過(guò)形參來(lái)使用堆中的對(duì)象 8.遞歸方法:一個(gè)方法體內(nèi)調(diào)用它自身,,這樣的方法稱為方法遞歸 遞歸的特點(diǎn):方法遞歸包含了一種隱式的循環(huán),它會(huì)重復(fù)執(zhí)行某段代碼,, 但這種重復(fù)執(zhí)行無(wú)須循環(huán)控制 b(n) 1*2*3*4*5=5*b(4)=5*4*b(3)=5*4*3*b(2)=5*4*3*2*b(1)=5*4*3*2*1 9.方法的重載(overload) 就是在同一個(gè)類中,,允許同時(shí)存在一個(gè)以上同名的方法
規(guī)則: 1) 方法名稱相同 2)方法的參數(shù)必須不同(參數(shù)個(gè)數(shù)不同或參數(shù)類型不同) 3)方法的返回值類型可以相同也可以不同(方法的返回值不看)
作用:名稱重用
3.類 1)語(yǔ)法格式: [類修飾符] class 類名{ 類的成員 }
類的成員: 成員變量(屬性):對(duì)象的狀態(tài),、情況的描述(name,、age、health) 成員方法(方法):對(duì)象的行為(run,、jump,、call)
面向?qū)ο缶幊蹋∣OP) 面向?qū)ο蟮姆治觯∣OA) 面向?qū)ο蟮脑O(shè)計(jì)(OOD) 面向?qū)ο鬁y(cè)試(OOT)
6.匿名對(duì)象: 創(chuàng)建完對(duì)象,,直接調(diào)用這個(gè)對(duì)象的方法,這樣的對(duì)象就稱為匿名對(duì)象 new Good().tostring();
如果只使用該對(duì)象進(jìn)行一次方法調(diào)用,,可以創(chuàng)建匿名對(duì)象
7.垃圾回收機(jī)制 原理:當(dāng)沒有對(duì)象引用指向原先分配給某個(gè)對(duì)象的內(nèi)存時(shí),,該內(nèi)存便成為垃圾,jvm的一個(gè)系統(tǒng)級(jí)線程會(huì)自動(dòng)釋放該內(nèi)存塊 垃圾回收只作用于堆內(nèi)存,,與棧內(nèi)存無(wú)關(guān)
8.構(gòu)造方法:也叫構(gòu)造器 1)構(gòu)造方法也是方法,,但是它是特殊的方法 2)所有的對(duì)象都是通過(guò)構(gòu)造器來(lái)創(chuàng)建的
特點(diǎn):(與類同名,沒有返回值) 1)構(gòu)造方法名稱與類同名 2)不含返回值類型,,也不寫void 3)不能在方法中用return語(yǔ)句返回值
注意:一個(gè)類可以不寫構(gòu)造方法,,編譯器會(huì)自動(dòng)的給這個(gè)類增加一個(gè)構(gòu)造方法,該構(gòu)造器沒有任何參數(shù),,稱為“默認(rèn)的空構(gòu)造器” 如果給類添加了構(gòu)造方法,,系統(tǒng)(編譯器)就不再提供默認(rèn)的構(gòu)造器了
構(gòu)造方法重載:構(gòu)造方法可以像普通方法一樣進(jìn)行重載,通常一個(gè)類中不止一個(gè)構(gòu)造器,,讓使用者根據(jù)需要靈活調(diào)用
9.this關(guān)鍵字 1)代表對(duì)象自身的引用 a)一個(gè)引用 b)指向調(diào)用該方法的當(dāng)前對(duì)象 2)調(diào)用其他構(gòu)造方法 this(參數(shù)列表); 注意:只能是構(gòu)造方法的第一條語(yǔ)句
package 包名; 如果沒有package語(yǔ)句,,則默認(rèn)為無(wú)名包
常見包: 1)java.lang:默認(rèn)包,任何程序中,,該包都被自動(dòng)導(dǎo)入 2)java.util:工具包
包名+類名=類的完全限定名
訪問(wèn)包中的類: 1)訪問(wèn)同包中的類:直接訪問(wèn) 2)訪問(wèn)不同包中的類:使用import語(yǔ)句導(dǎo)(引)入其他包中的類 import使用注意: a)必須在package聲明后,,類聲明前 b)import可以出現(xiàn)多次 c)import語(yǔ)句中可以使用通配符
訪問(wèn)權(quán)限修飾符: 1)public:公有的,在任何類中都可以訪問(wèn),,沒有任何限制 2)private:私有的,,不對(duì)外公開,private的成員變量只能在當(dāng)前類中使用,,其他任何類都不可以訪問(wèn) 3)default(friendly):默認(rèn)的,,包內(nèi)可見的,在該類所在的包中的其他類可以訪問(wèn),,包外的類不能訪問(wèn) 4)protected:受保護(hù)的,,子類看見
包下定義的類:訪問(wèn)權(quán)限修飾符可以為:public 和default,不能為private
封裝性的常規(guī)使用 1)將類中的屬性用private關(guān)鍵字進(jìn)行隱藏 2)通過(guò)規(guī)定方法訪問(wèn)屬性: a)通過(guò)set開頭的公有方法對(duì)屬性賦值(set訪問(wèn)器),,在set方法中,,對(duì)不合法數(shù)據(jù)進(jìn)行檢查 b)用get開頭的公有方法得到屬性的值(get訪問(wèn)器)
12.static關(guān)鍵字(靜態(tài)的) 1)可以修飾的元素: a)成員變量(屬性) b)方法 c)代碼塊
注意:局部變量不能添加static來(lái)修飾
第七章 面向?qū)ο蟾呒?jí)特性
一、繼承 1.概念:也稱為泛化,,繼承性是子類自動(dòng)共享父類屬性和方法的機(jī)制,。在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的 基礎(chǔ)上來(lái)進(jìn)行,,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,,并加入自己若干新的內(nèi)容 2.語(yǔ)言級(jí)別:在java中,在定義一個(gè)類的時(shí)候,,通過(guò)使用關(guān)鍵字extends繼承一個(gè)已有的類 3.語(yǔ)法格式: class 類名 extends 父類{
} 4.被繼承的類稱為父類或超類,,繼承的類稱為子類或派生類 5.繼承好處: 1)使編碼更高效 2)易維護(hù) 3)代碼重用 6.子類繼承了父類除構(gòu)造方法之外的所有屬性和方法 私有成員也被子類繼承,,但是無(wú)法訪問(wèn) 7.java中只支持單繼承,即只能有一個(gè)直接父類 8. 繼承判定標(biāo)準(zhǔn):子類 is a 父類(關(guān)系) 9.子類實(shí)例化的過(guò)程 1)子類實(shí)例化時(shí),,先實(shí)例化父類,,再實(shí)例化子類 2)要先調(diào)用父類的構(gòu)造器,再調(diào)用子類的構(gòu)造器 10.super關(guān)鍵字 1)super():調(diào)用父類的構(gòu)造方法 注意:只能出現(xiàn)在子類的構(gòu)造方法中,,且必須是第一行 根據(jù)super()中參數(shù)決定調(diào)用父類的那個(gè)構(gòu)造方法 2)如果子類構(gòu)造器中沒有使用super調(diào)用父類的構(gòu)造器,,那么編譯器會(huì)默認(rèn)加上super(),即調(diào)用父類的無(wú)參數(shù)的構(gòu)造方法, 如果父類沒有無(wú)參數(shù)的構(gòu)造器,,編譯器提示錯(cuò)誤
3)指向父類的引用 在子類的方法中,,明確表示使用父類中定義的成員變量或方法,與子類中同名的成員變量或方法相區(qū)別
11.super和this關(guān)鍵字 1)super:表示指向父類的引用 2)this:表示指向本類的引用
12.protected:受保護(hù)的,,子類看見,,包內(nèi)可見 publc > protected > default > private
13.方法的覆蓋(重寫):override 1)定義:子類繼承父類后,子類對(duì)繼承來(lái)的方法進(jìn)行改造 2)規(guī)則: a)名稱相同 b)參數(shù)列表相同 c)返回值相同(隱含返回子類也可以,,因?yàn)樽宇惪梢蕴娲割悾?/p> Animal call() Dog call() d)子類覆蓋方法的訪問(wèn)權(quán)限不小于父類被覆蓋方法的訪問(wèn)權(quán)限 3)@Override:作用是讓編譯器檢查該方法是否是父類方法的重寫
14.引用數(shù)據(jù)類型的轉(zhuǎn)換 1)向上轉(zhuǎn)型:把子類轉(zhuǎn)換為父類,,自動(dòng)轉(zhuǎn)換 前提:具有繼承或?qū)崿F(xiàn)關(guān)系 影響:向上轉(zhuǎn)型損失了子類新擴(kuò)展的屬性和方法,只可以使用從父類繼承的屬性和方法 作用:對(duì)子類進(jìn)行統(tǒng)一管理
2)向下轉(zhuǎn)型:將父類的對(duì)象顯示地轉(zhuǎn)換為子類類型,,要進(jìn)行強(qiáng)制轉(zhuǎn)換 子類對(duì)象 = (子類)父類對(duì)象 Animal a = new Animal(); Dog dog = (Dog)a; 注意:一般先向上轉(zhuǎn)型,,再向下轉(zhuǎn)型,沒有異常 否則,,直接轉(zhuǎn)換,,有異常
1.繼承: 1)子類繼承了除構(gòu)造方法之外的所有屬性和方法 2)好處:代碼重用 3)extends
2.重寫:對(duì)父類方法的改造 1)名稱相同 2)參數(shù)列表相同 3)返回值相同 4)訪問(wèn)修飾符大于等于父類的方法
3.子類實(shí)例化的過(guò)程:先實(shí)例化父類,再實(shí)例化子類 4.super 1)super():調(diào)用父類的構(gòu)造方法 2)super.父類的屬性或方法 5.引用類型的轉(zhuǎn)換 1)向上轉(zhuǎn)型:把子類轉(zhuǎn)換為父類,,自動(dòng)轉(zhuǎn)換 2)向下轉(zhuǎn)型:將父類的對(duì)象顯示地轉(zhuǎn)換為子類類型,,要進(jìn)行強(qiáng)制轉(zhuǎn)換
15.instanceof(比較運(yùn)算符) 定義:用來(lái)測(cè)試一個(gè)對(duì)象是否為某個(gè)類型的實(shí)例 格式: 對(duì)象名 instanceof 類型,返回boolean類型,,是該類型返回true,,否則返回false
16.多態(tài)(動(dòng)態(tài)綁定、遲綁定,、運(yùn)行期綁定) 1)定義:多種形態(tài),,不同的對(duì)象對(duì)同一個(gè)行為做出不同的響應(yīng) 2)三個(gè)條件: a)有繼承 b)有重寫 c)父類的引用指向子類對(duì)象 3)動(dòng)態(tài)綁定: Animal a = new Dog(); a.hitted();
a)編譯時(shí),在Animal中查找hitted()方法 b)如果該方法不是private,、static,、final的,也不是構(gòu)造方法的話,,編譯器生成動(dòng)態(tài)綁定指令,,否則生成靜態(tài)綁定指令 c)運(yùn)行的時(shí)候,jvm發(fā)現(xiàn)是動(dòng)態(tài)綁定指令,根據(jù)a對(duì)象的實(shí)際類型Dog,,先調(diào)用Dog的hitted()方法,如果Dog類中沒有定義hitted() 方法,,則調(diào)用Animal中的hitted()方法
17.面向?qū)ο蟮脑O(shè)計(jì)原則: 對(duì)修改關(guān)閉,,對(duì)擴(kuò)展開放(開閉原則)
18.abstract:抽象的 1)修飾類:抽象類:不能被實(shí)例化的類稱為抽象類 2)作用:讓其他類繼承 3)格式: abstract class 類名{ } 4)在下列情況下,類必須聲明為abstract a)當(dāng)一個(gè)類中包含抽象的方法的時(shí)候 b)當(dāng)一個(gè)類繼承了父類的抽象方法,,又沒有全部實(shí)現(xiàn)的時(shí)候 c)當(dāng)一個(gè)類實(shí)現(xiàn)了某個(gè)接口,,有沒有全部實(shí)現(xiàn)抽象的方法的時(shí)候
5)修飾方法,稱為抽象方法:只有方法聲明,,沒有方法實(shí)現(xiàn)的方法 6)作用:讓繼承抽象類的子類去重寫 7)格式: abstract 返回值類型 方法名(參數(shù)列表);
注意: a)抽象方法只能寫在抽象的類中 b)抽象方法不能為static
19.final關(guān)鍵字 1)可以修飾的元素 類:不能被繼承 方法:不能被重寫 成員變量或局部變量:不能被改變 a)聲明時(shí)賦值,,或者在構(gòu)造方法中賦值 b)系統(tǒng)不會(huì)對(duì)final成員變量賦予默認(rèn)值 2)常量: a)static :只有一個(gè)副本 b)final:賦值后不能被改變 c)命名規(guī)范:標(biāo)識(shí)符全部字母大寫,單詞間用下劃線連接
4)語(yǔ)法格式: [修飾符] interface 接口名{ 常量(默認(rèn)修飾符:public static final) 抽象的方法(默認(rèn)修飾符:public abstract) } 5)通過(guò)類繼承擴(kuò)展接口(實(shí)現(xiàn)) 語(yǔ)法: class 類名 implements 接口名{
}
一個(gè)類可以實(shí)現(xiàn)多個(gè)接口
class 類名 extends 父類 implements 接口1,接口2...{
} 6) 接口可以繼承其他接口 interface 接口名 extends 接口1,接口2...{ }
作用:為一個(gè)接口中添加新的方法聲明,,也可以將幾個(gè)接口合并成一個(gè)接口
7)設(shè)計(jì)原則:針對(duì)接口編程,,而不針對(duì)實(shí)現(xiàn)編程
1.final : 修飾類:不能被繼承 修飾方法:不能被重寫 修飾變量:不能被改變
2.接口:interface 作用: 1)被類去實(shí)現(xiàn) 2)實(shí)現(xiàn)了該接口的子類,在接口的功能上是可以替換的
原則:針對(duì)接口編程,,而不針對(duì)實(shí)現(xiàn)編程
21.接口補(bǔ)充: 從jdk8開始,,接口添加了一種新功能-默認(rèn)方法,默認(rèn)方法允許接口方法定義默認(rèn)實(shí)現(xiàn),,而所有子類都將擁有該方法的實(shí)現(xiàn)
好處:提供了一種拓展接口的方法,,而不破壞現(xiàn)有代碼
注意:默認(rèn)方法在子類中是可以被重寫的
jdk8中,接口替代了抽象類中很多功能
interface 接口名{ 常量 抽象方法 默認(rèn)方法(default 返回值類型 方法名(參數(shù)列表){}) }
第八章 異常處理 一,、異常 1.定義:運(yùn)行時(shí)發(fā)生的錯(cuò)誤,,而非編譯時(shí)錯(cuò)誤 2.危害: 1)程序被終止 2)內(nèi)存泄漏
二、異常類的繼承關(guān)系 1.異常的繼承樹: 1)Throwable =》Error:指應(yīng)用程序運(yùn)行期間發(fā)生的嚴(yán)重錯(cuò)誤,,如:虛擬機(jī)內(nèi)存耗盡,、堆棧溢出,一般是災(zāi)難性的,,沒有必要使用異常處理機(jī)制處理 =》Exception =》RuntimeException:非檢查性異常(能夠通過(guò)大量測(cè)試,,找出所有異常,使得在正式運(yùn)行期間,,不發(fā)生) =》以IOException為代表的一類異常:檢查性異常
三,、異常處理機(jī)制 1.異常如何產(chǎn)生? 在程序運(yùn)行過(guò)程中,如果發(fā)生異常事件,,系統(tǒng)就會(huì)發(fā)出異常報(bào)告,,這時(shí)候系統(tǒng)將生成一個(gè)異常處理對(duì)象,該對(duì)象封裝了異常處理 事件的信息,,并將其提交給java運(yùn)行時(shí)系統(tǒng) 2.異常處理方式: 1)自行處理: 把可能發(fā)生異常的語(yǔ)句封入到try塊中,,而處理異常的語(yǔ)句封入到catch塊中 2)回避異常: 在方法聲明中包含throws語(yǔ)句,通過(guò)潛在的調(diào)用者,來(lái)處理異常 3.try...catch語(yǔ)句 1)catch塊,,是用來(lái)捕獲并處理try塊拋出的異常的代碼塊,,沒有try塊,catch塊不能單獨(dú)存在,,我們可以有多個(gè)catch塊,, 用來(lái)捕獲不同類型的異常,為了更好的處理 2)每次try塊中拋出異常,,系統(tǒng)會(huì)從上向下往每個(gè)catch塊中傳遞參數(shù),,直到遇到一個(gè)類型匹配的catch塊為止 3)通常在catch塊中處理異常,記錄錯(cuò)誤到日志中,,方便后續(xù)管理 4.finally語(yǔ)句 1)finally語(yǔ)句放在try...catch語(yǔ)句后 2)finally語(yǔ)句中的代碼塊,,不管異常是否發(fā)生,是否被捕獲總是要執(zhí)行 3)即使try和catch代碼塊中使用了return或break語(yǔ)句,,finally語(yǔ)句都要執(zhí)行 4)當(dāng)執(zhí)行System.exit(0);表示退出系統(tǒng),,則finally語(yǔ)句就不會(huì)執(zhí)行
5.throws語(yǔ)句 1)如果一個(gè)方法中的語(yǔ)句塊在運(yùn)行時(shí)可能產(chǎn)生異常,但是不確定如何處理,,則可以在程序方法的聲明后,,使用throws關(guān)鍵字表明,方法中可能有這些異常 2)throws后面可以跟多個(gè)異常,,中間用逗號(hào)分隔
6.throw語(yǔ)句 1)異常是使用throw語(yǔ)句拋出的,,可以使用throw語(yǔ)句引發(fā)明確的異常 2)throw語(yǔ)句用在方法體中,表示拋出異常,,由方法體的語(yǔ)句處理
1.異常:運(yùn)行時(shí)錯(cuò)誤 2.異常處理 1)try 2)catch 3)finally 4)throws 5)throw 異常對(duì)象 3.異常處理類型 Throwable=》Error =》Exception=》RuntimeException(非檢查性異常) =》以IOException為代表(檢查性異常,,必須異常處理)
7.異常對(duì)象的常用方法: 1)getMessage():得到異常的消息 2)printStackTrace():打印棧的跟蹤信息
8.方法調(diào)用堆棧: 定義:方法A調(diào)用方法B的時(shí)候,只有方法B完成的時(shí)候,,方法A才能完成,,先執(zhí)行的方法總是后完成,后執(zhí)行的方法先完成
在方法調(diào)用的堆棧中的某個(gè)方法中的語(yǔ)句拋出異常,,會(huì)導(dǎo)致所有方法都不能正常結(jié)束,。 如果不想出現(xiàn)這種情況,就要使用java的異常處理機(jī)制進(jìn)行處理
9.自定義異常 1)定義:如果java提供的異常類型不能滿足程序設(shè)計(jì)的需要,,可以定義自己的異常類型 2)用戶自定義的異常應(yīng)繼承Exception類或其子類 注意: a)自定義異常的名稱很重要,,要盡可能反應(yīng)異常功能 b)根據(jù)設(shè)計(jì)需要,決定父類是檢查行異常還是非檢查性異常 c)添加一個(gè)有參數(shù)的構(gòu)造方法,,用來(lái)傳遞異常消息 d)應(yīng)該自己檢測(cè)異常發(fā)生的條件,,拋出異常
第九章 工具類 一、API:應(yīng)用程序編程接口 1.是jdk提供的各種功能的java類 2.使用jdk的幫助文檔
二,、Object類 1.Object類是所有類的超類,,Object類是java語(yǔ)言中唯一一個(gè)沒有父類的類 2.一個(gè)類可以不是Object類的直接子類,,但一定是Object類的子類 3.意義:在Object類中定義的方法,在所有類中都可以使用 4.equals()方法 1)格式:public boolean equals(Object obj) 功能:比較兩個(gè)對(duì)象的引用是否相等 5.hashcode()方法: 格式:public int hashCode() 功能:返回對(duì)象的哈希碼,,一個(gè)對(duì)象的哈希碼是代表對(duì)象的一個(gè)十六進(jìn)制的整數(shù),,比作對(duì)象的身份證號(hào) 默認(rèn)的哈希碼是一個(gè)對(duì)象的內(nèi)存地址做某種轉(zhuǎn)換得到的,所以不同的對(duì)象有不同的哈希碼 6.toString()方法: 格式:public String toString() 功能:返回 類名@哈希碼 7.注意: 1)一般子類會(huì)重寫以上三個(gè)方法,,表達(dá)實(shí)際意義 2)java規(guī)定:如果調(diào)用equals方法返回兩個(gè)對(duì)象是相等的,,那么這兩個(gè)對(duì)象上調(diào)用hashCode()方法返回的整數(shù)也必須相等
復(fù)習(xí): 1.api:應(yīng)用程序編程接口 2.Object類 1)equals():比較的是對(duì)象的引用 2)hashCode():返回整數(shù)值 3)toString():返回 類名@哈希碼
8.equals和 == 的區(qū)別 1)默認(rèn)情況下(子類沒有重寫equals方法),equals只能比較對(duì)象的引用是否相等,,equals只能比較引用類型,,不能比較基本數(shù)據(jù)類型 == 既能比較引用類型,,也能比較基本數(shù)據(jù)類型 2)一般類繼承了Object類的equals方法,,會(huì)重寫,不再比較引用的值
三,、包裝類 1.在java中基本數(shù)據(jù)類型變量不認(rèn)為是對(duì)象,,通過(guò)包裝類,將基本數(shù)據(jù)類型看作對(duì)象 2.包裝類中包含了基本數(shù)據(jù)類型的值,,封裝了String和基本數(shù)據(jù)類型之間的相互轉(zhuǎn)換的方法,,還有一些處理這些基本數(shù)據(jù)類型時(shí)有用的屬性和方法 3.每一種基本數(shù)據(jù)類型都有對(duì)應(yīng)的包裝類(char=>Character 、 int=>Integer) 4.基本數(shù)據(jù)類型,,轉(zhuǎn)換為包裝類 int i = 10;Integer n = new Integer(i); 5.字符串通過(guò)構(gòu)造方法轉(zhuǎn)換為包裝類 Integer n = new Integer("10"); 6.字符串通過(guò)valueOf()方法轉(zhuǎn)換為基本數(shù)據(jù)類型 Integer n = Integer.valueOf("100"); 7.包裝類通過(guò)xxxValue()方法轉(zhuǎn)換為基本數(shù)據(jù)類型 Integer n = new Integer(500); int i = n.intValue(); 8.字符串通過(guò)parseXXX()方法轉(zhuǎn)換為基本數(shù)據(jù)類型 String s = "100"; int i = Integer.parseInt(s); 9.自動(dòng)裝箱和拆箱 自動(dòng)裝箱:把基本數(shù)據(jù)類型轉(zhuǎn)換成對(duì)應(yīng)的包裝類 Integer n = 10; 自動(dòng)拆箱:把包裝中的值取出 Integer n = new Integer("100"); int i = n; 10.把基本數(shù)據(jù)類型轉(zhuǎn)換為字符串: int n = 100; Integer i = new Integer(n); String s = i.toString();
String s2 = n + "";
四,、字符串 1.定義:一組不可改變的unicode字符序列。對(duì)它的任何修改實(shí)際上產(chǎn)生了一個(gè)新的字符串,。 String對(duì)象的內(nèi)容一旦初始化,,就不能再改變。 2.字符串的創(chuàng)建: 1)靜態(tài)方式:使用字面量賦值,,例如:String s = "abc"; 兩個(gè)采用靜態(tài)方式創(chuàng)建的字符串,,如果字面量相同,在方法區(qū)的常量池中,,只產(chǎn)生一個(gè)字符串對(duì)象,,即這兩個(gè)字符串變量的引用相同 2)動(dòng)態(tài)方法:使用內(nèi)存分配符(new),例如:String s = new String("abc"); 每次在堆內(nèi)存中創(chuàng)建一個(gè)新的字符串
3.字符串的構(gòu)造方法 1)String s = new String(); 2)String s = new String(String value); 3)String s = new String(byte[] bytes); 使用平臺(tái)默認(rèn)的字符集解碼字節(jié)數(shù)組,,創(chuàng)建一個(gè)字符串(中文操作系統(tǒng)gbk) 4)String s = new String(byte[] bytes,String charset); 使用指定的字符集解碼字節(jié)數(shù)組,,創(chuàng)建一個(gè)字符串 5)String s = new String(byte[] bytes,int offset,int length,String charset); 把字節(jié)數(shù)組中從offset開始的長(zhǎng)度為length個(gè)字節(jié),使用指定字符集解碼
4.字符串與byte[]之間的轉(zhuǎn)換 getBytes():根據(jù)默認(rèn)的字符集得到字節(jié)數(shù)組 getBytes(String charset):根據(jù)指定的字符集得到字節(jié)數(shù)組 5.使用+操作符連接字符串 6.字符串重寫了equals方法,,用來(lái)比較字符串的內(nèi)容是否相等 7.常用方法:
1.包裝類 1)java中基本數(shù)據(jù)類型不是對(duì)象 2)為每一種基本數(shù)據(jù)類型創(chuàng)建了一個(gè)對(duì)應(yīng)的包裝類 char=》Character int =》 Integer 3)自動(dòng)裝箱和拆箱 4)字符串與包裝類,、基本數(shù)據(jù)類型的轉(zhuǎn)換 String.valueOf(基本數(shù)據(jù)類型);//把基本數(shù)據(jù)類型轉(zhuǎn)換為字符串 包裝類.parseXXX(字符串);//把字符串轉(zhuǎn)換為基本數(shù)據(jù)類型
2.字符串 1)不可改變的unicode字符序列 2)靜態(tài)創(chuàng)建:String s = "tom";//在方法區(qū)中的字符串常量池 動(dòng)態(tài)創(chuàng)建:String s = new String("tom"); 3)字符串與byte[]轉(zhuǎn)換 String s = new String(byte[]);
Byte[] bs = s.getBytes(); 4)常用的方法
五、StringBuffer 1.定義:可以改變的字符序列,,可以動(dòng)態(tài)改變,,不產(chǎn)生額外的對(duì)象 2.構(gòu)造方法: StringBuffer():創(chuàng)建一個(gè)其中不帶有字符的字符串緩沖區(qū),,初始容量為16個(gè)字符 StringBuffer(int capacity):創(chuàng)建一個(gè)具有指定容量的字符串緩沖區(qū) StringBuffer(String value):創(chuàng)建一個(gè)指定初始字符串的字符串緩沖區(qū) 3.常用方法: 1)int capacity():得到容量(緩沖區(qū)大小) 2)int length():返回當(dāng)前字符數(shù) 3)append(String value):在原來(lái)字符串的后面追加字符串 4)toString():得到StringBuffer中的字符序列
5)reverse():逆序 6)setCharAt(int index,char c):修改指定索引處的字符 7)delete(int begin,int end):刪除指定區(qū)間的字符串 8)insert(int index,String s):在指定的索引處插入一個(gè)字符串
六,、StringBuilder 1.StringBuilder設(shè)計(jì)用作StringBuffer的簡(jiǎn)單替代,,用在字符串緩沖區(qū)被單線程方法使用的情況 2.其他使用同StringBuffer相同 七、Math類 1.Math類中提供了大量用于數(shù)學(xué)運(yùn)算的方法 2.Math類final類,,不能被繼承 3.Math類中的方法都是靜態(tài)的,,不用創(chuàng)建實(shí)例就可以使用 4.常量: Math.PI:圓周率 Math.E:自然對(duì)數(shù)的底數(shù) 5.常用方法: 1)abs():求絕對(duì)值 2)ceil(double):天花板,返回大于所給參數(shù)的最小整數(shù),,返回值為double類型 3)floor(double):地板,,返回小于所給定參數(shù)的最大整數(shù),返回值為double類型 4)max(double,double):返回參數(shù)中較大的數(shù) 5)min(double,double):返回參數(shù)中較小的數(shù) 6)random():返回0.0到1.0之間的隨機(jī)數(shù)(大于等于0,,小于1) 7)round(double):返回四舍五入后的整數(shù),,返回值為long類型 8)sqrt(double):開方
八、Date類 1.包:java.util.Date 2.表示特定的瞬間,,精確到毫秒,,在內(nèi)部,保存自1970年1月1日 0:0:00 到某一個(gè)時(shí)刻的間隔毫秒數(shù) 3.getTime():得到內(nèi)部保存的時(shí)間毫秒數(shù) 4.許多方法已過(guò)時(shí) 5.得到當(dāng)前時(shí)間: new Date() 6.before(Date):判斷當(dāng)前日期是否在給定的日期前,,在之前,,返回true,否則返回false 7.after(Date):判斷當(dāng)前日期是否在給定的日期后,,在之后,,返回true,否則返回false 九,、Calendar類 1.是一個(gè)抽象類 2.常用的日期時(shí)間處理對(duì)象 3.獲取Calendar類的實(shí)例 Calendar c = Calendar.getInstance();//得到當(dāng)前時(shí)間 4.設(shè)置時(shí)間: set(int year,int month,int day,int hours,int minutes,int seconds)
setTime(Date) 5.獲取指定時(shí)間 get(int field) 6.轉(zhuǎn)為Date Date d = c.getTime(); 7.為給定的日歷字段添加或減去指定的時(shí)間量 add(int field,int num)
十,、SimpleDateFormat(非常重要) 1.所在包:java.text 2.構(gòu)造方法: SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 3.將格式化的串轉(zhuǎn)換為日期對(duì)象 SimpleDateFormat f = SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = "2018-12-17 14:33:29"; Date d = f.parse(s); 4.將日期格式化成指定的串 format(new Date()) 5.模式字母 M:月 m:分 s:秒 S:毫秒 H:0-23 h:0-11 復(fù)習(xí): 1.StringBuffer和StingBuilder append() toString()
2.Math random() ceil() floor() round() PI E
3.java.util.Date Date date = new Date(); getTime() before after equals
4.Calendar類 抽象類 Calendar.getInstance()
第十章 集合 一、概述 1.集合類也稱為容器類,,用來(lái)存儲(chǔ)對(duì)象 2.在java.util包中 3.與數(shù)組比較 1)數(shù)組定長(zhǎng),,集合大小可以動(dòng)態(tài)調(diào)整 2)數(shù)組中元素可以是基本數(shù)據(jù)類型和引用類型,集合只能存放引用類型元素 4.集合框架 1)Collection接口:無(wú)序,、可重復(fù) 2)List接口:有序(數(shù)據(jù)存入順序與數(shù)據(jù)存儲(chǔ)順序相同),,可重復(fù)(使用equals()判斷) 3)Set接口:無(wú)序(數(shù)據(jù)存入順序與數(shù)據(jù)存儲(chǔ)順序不同),不可重復(fù) 4)Map接口:鍵值對(duì)存儲(chǔ) 5)Itarator接口:對(duì)Collection接口數(shù)據(jù)進(jìn)行遍歷
5.ArrayList: 1)線性順序存儲(chǔ) 2)特性跟數(shù)組相近,,簡(jiǎn)稱:動(dòng)態(tài)數(shù)組 3)構(gòu)造方法: a)ArrayList():初始容量為10的空集合 b)ArrayList(int capacity):創(chuàng)建一個(gè)初始容量為capacity的空集合 c)ArrayList(Collection): 構(gòu)造一個(gè)包含指定 collection 的元素的列表 4)優(yōu)點(diǎn):隨機(jī)訪問(wèn)速度快(就是根據(jù)索引號(hào)來(lái)訪問(wèn)) 5)常用方法: add(Object):把元素添加到最后 add(int index,Object obj):把元素插入到index位置,,index不能超過(guò)集合的size() get(int index):根據(jù)索引號(hào)得到對(duì)應(yīng)的元素,返回Object類型 size():得到集合中元素的個(gè)數(shù) contains(Object obj):判斷集合中是否包含參數(shù)指定的對(duì)象,,包含返回true,,否則返回false(使用equals()方法判斷) toArray():把集合中的元素導(dǎo)入到數(shù)組中,該方法返回導(dǎo)入的數(shù)組
List asList = Arrays.asList(stu1,stu2,stu3);//把多個(gè)元素一次放入到list集合中
set(int index,Object obj):在指定的位置處,,用參數(shù)obj替換
remove(int index):移除指定位置的元素 remove(Object o):調(diào)用equals()移除參數(shù)指定的單個(gè)對(duì)象
indexOf(Object):查找對(duì)象第一次出現(xiàn)的位置,,返回索引號(hào),,沒有找到返回-1 lastIndexOf(Object):查找對(duì)象最后一次出現(xiàn)的位置,返回索引號(hào),,沒有找到返回-1
iteartor():得到迭代器對(duì)象
6)缺點(diǎn):插入和刪除效率不高 6.Iterator 1)迭代器,,對(duì)Collection接口的元素進(jìn)行遍歷操作 2)所有實(shí)現(xiàn)了Collection接口的集合類都會(huì)有一個(gè)iteartor()的方法,返回實(shí)現(xiàn)了Iteartor接口的對(duì)象 3)是為了遍歷操作設(shè)計(jì)的,,能夠從集合中取出元素和刪除元素,,沒有添加元素的方法 4)單向移動(dòng) 5)方法: Object next():返回游標(biāo)右邊的元素并將游標(biāo)移動(dòng)到下一個(gè)位置 boolean hasNext():判斷游標(biāo)右邊是否有元素 void remove():刪除游標(biāo)左邊的元素,在執(zhí)行完next操作后,,該操作只能執(zhí)行一次
7.LinkedList 1)數(shù)據(jù)結(jié)構(gòu)使用雙向鏈表,,元素不要求連續(xù)存儲(chǔ) 2)添加了在頭和尾操作的方法 3)優(yōu)點(diǎn):插入和刪除節(jié)點(diǎn)速度快 4)特有的方法: a)addFirst(Object):把元素插入到第一個(gè)位置處 b)addLast(Object):把元素插入到最后一個(gè)位置處
c)getFirst():得到第一個(gè)元素 d)getLast():得到最后一個(gè)元素
e)removeFirst():移除第一個(gè)元素 f)removeLast():移除最后一個(gè)元素
復(fù)習(xí): 1.集合:容器,存儲(chǔ)對(duì)象 2.與數(shù)組區(qū)別: 1)容量可變 2)只能存放對(duì)象,,不能存儲(chǔ)基本數(shù)據(jù)類型 3.Collection list:有序,、可重復(fù) set:無(wú)序、不可重復(fù) Map:鍵值對(duì) 4.ArrayList:實(shí)現(xiàn)了List接口,,動(dòng)態(tài)數(shù)組,,元素緊挨著存放 add(Object) add(int index,Object) get(int index) contains(Object) size() toArray() 8.泛型的使用 1)非泛型集合的問(wèn)題: 添加對(duì)象的時(shí)候,,對(duì)象被向上轉(zhuǎn)型為Object類型 在從集合中取數(shù)據(jù)的時(shí)候,,需要進(jìn)行強(qiáng)制轉(zhuǎn)換為對(duì)象實(shí)際類型,在運(yùn)行時(shí),,可能會(huì)報(bào)錯(cuò) 2)泛型集合,,在對(duì)象放入集合的時(shí)候,編譯器進(jìn)行類型檢查,,類型不同,,不能放入集合,編譯報(bào)錯(cuò),, 所以,,在取出數(shù)據(jù)的時(shí)候,不用進(jìn)行類型轉(zhuǎn)換,,直接使用即可 3)泛型也稱為參數(shù)化類型,,它能夠像方法一樣,接收不同類型的參數(shù) 4)泛型集合: ArrayList<T> 變量名;//T為某種類型 例如: ArrayList<Student> list = new ArrayList<Student>(); ArrayList<Student> list = new ArrayList<>(); <>//鉆石操作符 9.set集合 1)set的實(shí)現(xiàn)類:HashSet 2)HashSet():創(chuàng)建一個(gè)容量為16的空間 3)常用的方法: add(T):添加元素 remove(T):移除元素 size():得到元素個(gè)數(shù) isEmpty():是否為空集合 iteartor():得到迭代器對(duì)象 clear():清空集合元素 contains(T):判斷元素是否存在
10.Collections 1)max(Collection):找出Collection集合中最大值,,要求集合的元素實(shí)現(xiàn)了Comparable接口 2)max(Collection,Comparator):找出Collection集合中最大值,,按照第二個(gè)參數(shù)的比較器進(jìn)行比較 3)sort(List):使用元素的compareTo()方法比較元素大小,并排序 4)sort(List,Comparator)使用比較器中的比較方法來(lái)比較大小,,并排序
11.Map接口:鍵值對(duì)存儲(chǔ),,鍵不能重復(fù),值可以重復(fù),,鍵可以為null 1)HashMap:map的實(shí)現(xiàn)類 2)常用方法: a)put(K,V):將鍵和值存儲(chǔ)到map集合中,,如果K存在,,替換值 b)V get(K):根據(jù)鍵取值 c)remove(K):根據(jù)鍵移除鍵值對(duì) d)containsKey(K):判斷是否包含指定的鍵,包含返回true e)containsValue(V):判斷是否包含指定的值 f)size():得到鍵值對(duì)的數(shù)量 g)Set keySet():得到鍵的集合(為Set類型) h)Collection values():得到值的集合(為Collection類型) i)entrySet():得到鍵值對(duì)的集合(為Set類型) 12.集合選擇 1)存儲(chǔ)單個(gè)對(duì)象使用Collection,,存儲(chǔ)鍵值對(duì)使用Map 2)Set內(nèi)元素不能重復(fù),、List內(nèi)元素有序 3)ArrayList和LinkedList的區(qū)別:在于隨機(jī)訪問(wèn)性能ArrayList要好,但LinkedList插入和刪除性能好 復(fù)習(xí): 1.集合:容器類 2.Collection list set Map 3.ArrayList:元素連續(xù)存儲(chǔ),,動(dòng)態(tài)數(shù)組 特點(diǎn):隨機(jī)訪問(wèn)快 插入和刪除慢(要移動(dòng)元素) LinkedList:雙向鏈表 特點(diǎn):插入和刪除快 隨機(jī)訪問(wèn)慢 4.HashSet:底層實(shí)現(xiàn)是基于HashMap 5.HashMap: put(K,V) get(K) keySet() values() entrySet() 6.泛型集合,,在對(duì)象放入集合的時(shí)候,編譯器進(jìn)行類型檢查,,類型不同,,不能放入集合,編譯報(bào)錯(cuò) java8新特性 一,、lambda表達(dá)式 1.lambda表達(dá)式是一個(gè)匿名函數(shù) 2.語(yǔ)法: (Type1 param1,Type2 param2,...,TypeN paramN)->{ 語(yǔ)句塊 return 返回值; } 3.其實(shí)lambda表達(dá)式的本質(zhì)只是一個(gè)“語(yǔ)法糖”,,由編譯器推斷并幫你轉(zhuǎn)換包裝為常規(guī)的代碼,因此你可以使用更少的代碼實(shí)現(xiàn)同樣的功能 4.lambda表達(dá)式允許你通過(guò)表達(dá)式來(lái)代替函數(shù)式接口(就是一個(gè)有且僅有一個(gè)抽象方法,,但是可以有多個(gè)非抽象方法的接口) 二,、方法引用 1.方法引用可以調(diào)用一個(gè)已存在的方法,可以使用方法引用 2.作用:簡(jiǎn)化lambda表達(dá)式 3.語(yǔ)法: 使用::操作符
例如:String::compareToIgnoreCase
List<String> list = Arrays.asList("apple","Grape","banana","Pear");
//Collections.sort(list,(x,y)->x.compareToIgnoreCase(y));
Collections.sort(list,String::compareToIgnoreCase);
list.forEach(x->System.out.println(x));
list.forEach(System.out::println);
三,、Stream流 1.Stream可以讓你以一種聲明的方式處理數(shù)據(jù) 2.將要處理的元素集合看做一種流,,流在管道中傳輸,就可以在管道的節(jié)點(diǎn)上進(jìn)行處理,,比如:篩選,、排序、聚合 3.生成流: stream():為集合創(chuàng)建串行流 parallelStream():為集合創(chuàng)建并行流 4.forEach:迭代流中的每一個(gè)元素 list.stream().filter((s)->Integer.parseInt(s) > 50).forEach(System.out::println); 5.map:用于映射每個(gè)元素到對(duì)應(yīng)的結(jié)果 List<Integer> list = Arrays.asList(2,5,4,6,5);
list.stream().map(i->i*i).forEach(System.out::println); 6.filter:用于通過(guò)設(shè)置的條件過(guò)濾出元素 List<Integer> list = Arrays.asList(2,5,4,6,5);
list.stream().map(i->i*i).filter(x->x > 20) .forEach(System.out::println);
7.limit:用于獲取指定數(shù)量的流 limit(long num)
8.sorted:用戶對(duì)流進(jìn)行排序 9.Collectors類實(shí)現(xiàn)了很多規(guī)約操作,,例如將流轉(zhuǎn)換成集合 toList() toSet() joining(String)
String s = list.stream().sorted().map(x->String.valueOf(x)).collect(Collectors.joining(","));
10.統(tǒng)計(jì) List<Integer> list = Arrays.asList(2,5,4,6,5); //用于收集統(tǒng)計(jì)數(shù)據(jù) IntSummaryStatistics s = list.stream().mapToInt(x->x).summaryStatistics();
System.out.println("max="+s.getMax()); System.out.println("min="+s.getMin()); System.out.println("sum="+s.getSum()); System.out.println("avg="+s.getAverage()); System.out.println("count="+s.getCount()); |
|
來(lái)自: 昵稱62574573 > 《待分類》