/-matool API查詢網(wǎng)站
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:空間域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、淮北網(wǎng)站維護(hù)、網(wǎng)站推廣。重點內(nèi)容:
第一階段:變量:數(shù)據(jù)類型
運算符:二進(jìn)制
控制結(jié)構(gòu):循環(huán)
數(shù)組排序和查找:數(shù)組
面向?qū)ο缶幊蹋撼蓡T方法,成員方法傳參機(jī)制,構(gòu)造器
面向?qū)ο缶幊蹋ㄖ屑墸悍庋b,繼承,多態(tài)
第二階段:面向?qū)ο缶幊蹋ǜ呒墸侯愖兞亢皖惙椒?,接口,?nèi)部類
Exception:異常體系圖,異常處理
常用類:string,stringbuffer,stringbuilder
集合:
泛型:自定義泛型
線程:線程使用,Synchronized,互斥鎖
IO流:輸入流,輸出流
開發(fā)注意事項:
1一個源文件中最多只能有一個public類,其他類的個數(shù)不限
2如果源文件包含一個public類,則文件名必須按該類名命名
3.一個源文件中最多只能有一個public類。其它類的個數(shù)不限,也可以將main方法寫在非public類中,然后指定運行非public類,這樣入口方法就是非public的main方法
/r為回車:回車后光標(biāo)會回到“韓”字前,然后“韓順”被“北京”代替
使用tab鍵,實現(xiàn)縮進(jìn),整體右移。Shift+tab整體左移。
相對路徑和絕對路徑:
加號的說明:
兩邊都是數(shù)值型的時候做加法運算,左右兩邊有一方為字符串時做拼接運算
基本數(shù)據(jù)類型:
+byte
使用long類型時,需要在變量后面加一個‘l’或“L“
例:long a = 10l;
Java默認(rèn)浮點型常量為double型,因此在使用float型時需要在變量后面加上l或L
例:floa a = 1.1l;
浮點型可以寫成.123 等價于0.123
對于運算結(jié)果時小數(shù)的進(jìn)行判斷時,應(yīng)該用兩個數(shù)的差值的絕對值,在某個精度范圍內(nèi)判斷。
不同的字符編碼表之間有所不同:
ASCII編碼表:一個字符一個字節(jié)
Unicode編碼表:字母和漢字都占用兩個字節(jié)(最多編碼2的16次方個字符)
utf-8:字母一個字節(jié),漢字三個字節(jié)
等等。
布爾類型(boolean):賦值只能為true/false
在將精度(容量)大的數(shù)據(jù)類型轉(zhuǎn)換成精度(容量)小的數(shù)據(jù)類型時會報錯。
(Byte,short)和char之間不能相互轉(zhuǎn)換,也不能自動轉(zhuǎn)換
Byte,short,char之間或者同類型之間進(jìn)行運算時,會轉(zhuǎn)換為int類型。
Boolean不參與類型的自動轉(zhuǎn)換。
字符串和其它數(shù)據(jù)類型之間的轉(zhuǎn)換:
其它類型轉(zhuǎn)字符串:+“”
字符串轉(zhuǎn)其它類型:
取模:a % b =a-a/b*a;
結(jié)果的正負(fù)值要取決于a的負(fù)號。
重點:
關(guān)系運算符的運算結(jié)果為布爾類型:即ture或false
短路與:&& 邏輯與:&
對于短路與,如果第一個條件為假,則后面的條件不再判斷,即不執(zhí)行,效率高
對于邏輯與,如果第一個條件為假,后面的語句仍會執(zhí)行
短路或:|| 邏輯或:|
效果同短路與和邏輯與
^:邏輯異或
復(fù)合賦值運算符會進(jìn)行類型轉(zhuǎn)換
byte b = 3;
b +=2;等價于b = (byte)(b+2);
輸入的實現(xiàn):
1引入java.util.Scanner,java.util下的Scanner類
2.創(chuàng)建一個類的對象,new創(chuàng)建對象
Scanner myScanner = new Scanner(System.in);
3.接收
String name = myScanner.next();輸入為字符串類型
int age = myScanner.nextInt();輸入為整形
double salary = myScanner.nextDouble();輸入為浮點型
四種進(jìn)制:
二進(jìn)制:以O(shè)B或Ob開頭
八進(jìn)制:以數(shù)字0開頭
十六進(jìn)制:以O(shè)X或Ox開頭 ,并且A-F不區(qū)分大小寫
按位與:&
按位或:|
按位異或:^
按位取反:~
位運算符:
>>算數(shù)左移:地位補0
<<算數(shù)右移:高位補符號位
>>>邏輯右移:地位溢出,高位補0
沒有邏輯左移
switch:返回類型必須是byte,short,int,char,enum,String類型之一。
case:值必須為常量或者常量表達(dá)式
break后面加標(biāo)簽:可以表示終止某個循環(huán),類似于goto
判斷兩個字符串:推薦第二種
如:String name;
Name.equals(“字符串內(nèi)容”)或”字符串內(nèi)容”.equals(name)
數(shù)組:
數(shù)組類型[ ] 數(shù)組名 ([ ])= new 數(shù)組類型[個數(shù)]
double[] score = new double[5];
或
double score[];
score = new double[5];
數(shù)組賦值:arr2是arr1的一份拷貝,當(dāng)arr2改變時,arr1也改變
冒泡排序:優(yōu)化:j初始值為1,增加count變量,若執(zhí)行一次交換則count增加,若count在循環(huán)后為0則提前終止循環(huán)。
動態(tài)開辟二維數(shù)組空間:
面向?qū)ο螅ɑA(chǔ)):
對象中的整型放在堆區(qū),字符串類型放在方法區(qū)中的常量池。
過程:
1先加載類信息(屬性和方法信息,只會加載一次)
2在堆中分配空間,進(jìn)行默認(rèn)初始化
3把地址賦給用類創(chuàng)建的變量,變量指向?qū)ο?/p>
4.進(jìn)行指定初始化
方法重載:減輕記名麻煩
要求:方法名相同,形參的類型或個數(shù)或順序不同。
注意:返回類型不同不能構(gòu)成重載。
可變參數(shù),寫法(變量類型... 變量名)
可以接受0-多個參數(shù),此時的變量名相當(dāng)于數(shù)組名,可以用變量名.length獲得參數(shù)個數(shù),用變量名[i]訪問每個變量。
細(xì)節(jié):
可變參數(shù)的實參可以為數(shù)組,即直接傳入一個數(shù)組。
可以同時存在普通類型的參數(shù)和可變參數(shù),但是可變參數(shù)必須在最后。
一個形參列表中只能出現(xiàn)一個可變參數(shù)。
作用域細(xì)節(jié):
屬性和局部變量可以重名,訪問時遵循就近原則。如:
此時name的值為“king”
全局變量可以加修飾符
局部變量不能加修飾符
構(gòu)造方法/構(gòu)造器:完成對新對象的初始化,類似于構(gòu)造函數(shù)
細(xì)節(jié):
一個類可以定義多個構(gòu)造器,即構(gòu)造器重載
This指針:當(dāng)構(gòu)造方法中的形參的類的對象名字相同時,可以在對象前加this.來區(qū)分
在一個構(gòu)造器中訪問另一個構(gòu)造器時(本類),需要使用this(參數(shù)列表)
注意:需要將this語句放在第一條語句,只能在構(gòu)造器中使用。
在需要獲取數(shù)組的大值時,為了避免傳入的數(shù)組為空值,或者數(shù)組地址為null時,需要加上判斷,當(dāng)?shù)刂窞閚ull時,arr.length語句會報錯。
直接new 類名(),此方法只創(chuàng)建一個對象,而沒有返回,屬于匿名對象,匿名對象在使用后,就不能使用。
IDEA中的快捷鍵:
Ctrl+D 刪除當(dāng)前行(自己配置)
Alt+/ 補全代碼
Ctrl+alt+l 格式化代碼
Alt+r 運行程序(自己配置)
將光標(biāo)放在方法上,ctrl+B(或鼠標(biāo)左鍵)可以定位到方法
模板快捷鍵:
Fori,輸出for循環(huán)
Sout,輸出System.out.println語句
包
創(chuàng)建不同的文件夾來保存類文件
方法如下:
命名規(guī)則:不能以數(shù)字開頭,不能是關(guān)鍵字或保留字。
命名規(guī)范:com.公司名.項目名.業(yè)務(wù)模塊名
如:
Arrays.sort(數(shù)組名),對數(shù)組進(jìn)行升序排列。
Package的作用是聲明當(dāng)前類所在的包,需要放在類(或者文件)的最上面。
類只能用public和默認(rèn)來修飾。
類的成員方法和屬性可以用四個來修飾。
封裝:
可以隱藏實現(xiàn)細(xì)節(jié)
可以對數(shù)據(jù)進(jìn)行驗證,保證安全合理
實現(xiàn):
將屬性私有化
提供一個公共的set方法,用于修改私有屬性的值
提供一個公共的get方法,用于獲取私有屬性的值
構(gòu)造器也同樣需要對數(shù)據(jù)進(jìn)行檢測,因此可以把set方法寫入構(gòu)造器中,實現(xiàn)對數(shù)據(jù)賦值的同時完成驗證。
繼承:
可以解決代碼復(fù)用。
基本語法:
class 子類(派生類) extends 父類(基類){}
細(xì)節(jié):
子類必須調(diào)用父類的構(gòu)造器,完成對父類的初始化
子類在調(diào)用構(gòu)造器時,會自動調(diào)用父類的無參構(gòu)造器,super語句(被隱藏)
若父類中無無參構(gòu)造器,則需要用super語句指定構(gòu)造器
super()和this()都只能放在構(gòu)造器第一行,因此這兩個方法不能共存在一個構(gòu)造器。
Object類時所有類的基類
父類構(gòu)造器的調(diào)用不限于直接父類!將一直追溯到Object類,即父類的父類的無參構(gòu)造器也會被調(diào)用等。
Java中是單繼承機(jī)制,即一個類只能繼承一個,可以用A繼承B,B繼承C,來實現(xiàn)A同時繼承B和C。
繼承訪問:
此時aa.name的值為大頭兒子,aa.hobby的值為旅游:以此方法在訪問變量時,會從當(dāng)前類開始尋找,若當(dāng)前類沒有,會依次往上尋找,直到找到為止或報錯。
此時aa.age會報錯,在Father類中有age但是沒有權(quán)限,不會再往上尋找。
Super的使用:(訪問父類)
super.語句,訪問父類屬性和方法,private屬性除外
訪問父類構(gòu)造器
語句:super();
方法重寫(覆蓋):
實現(xiàn)條件:子類和父類的方法,參數(shù),方法名均相同。此時子類的方法覆蓋父類的方法。
1返回類型可以相同,或者子類的返回類型是父類返回類型的子類。如:
String是Object的子類
2子類方法不能縮小父類方法的訪問權(quán)限。
錯誤示例:子類是protected,父類是public。
多態(tài):
方法的多態(tài):體現(xiàn)在方法的重載和重寫
對象的多態(tài):
一個對象的編譯類型和運行類型可以不一致。
編譯類型看定義時 = 號的左邊,運行類型看 = 號的右邊
animal1的編譯類型時animal,運行類型時cat。
此時animal1.cry()相當(dāng)于cat.cry(),因為animal的運行類型時cat。
重新指定后:
animal1的編譯類型依然是animal,運行類型變?yōu)閐og。
細(xì)節(jié):
1向上轉(zhuǎn)型:父類的引用指向了子類的對象。如上圖舉例。
2向下轉(zhuǎn)型:
animal可以通過強轉(zhuǎn)再次變成cat類型,因為animal本身在編譯后為cat類型,但是不能轉(zhuǎn)換成dog類型。
屬性沒有重寫之說!屬性的值看編譯類型,如下圖輸出結(jié)果為10.
Instaniof語句,用于判斷對象的運行類型是否是XX類型或其子類型。
動態(tài)綁定機(jī)制:
1當(dāng)調(diào)用對象方法的時候,改方法會和該對象的內(nèi)存地址/運行類型綁定
2當(dāng)調(diào)用對象屬性時,沒有動態(tài)綁定機(jī)制,哪里聲明哪里使用
多態(tài)數(shù)組:如
Object類:
==運算符:判斷兩個值是否相等,或是兩個地址是否相同
equals是Object類中的方法,只能判斷引用類型地址
查看方法源碼:ctrl+左鍵
注意:
在Object子類中往往重寫改方法,用于判斷內(nèi)容是否相等。
HashCode方法:
1提高具有哈希結(jié)構(gòu)的容器的效率
2兩個引用,如果指向的是同一個對象,則哈希值肯定是一樣的,如果不是,則哈希值肯定不一樣。
3哈希值主要根據(jù)地址號來,但是不完全等價于地址
Tostring方法:
方法重寫后:把對象的屬性輸出,也可以自己修改
直接用sout輸出一個對象等價于sout 對象名.toString
Debug斷點調(diào)試:可以在調(diào)試過程中加斷點
F8逐行執(zhí)行
F7跳入方法(查看方法)
Shift+F8跳出方法
F9直接跳到下一個斷點
零錢通:
日期顯示:
類變量:
用static修飾的變量,是類共有的變量,可以通過類名來訪問。同時需要遵守訪問修飾符的權(quán)限。
類方法和類變量相似。
細(xì)節(jié):
類方法中不能使用和對象有關(guān)的關(guān)鍵字,如this和super。
類方法只能訪問靜態(tài)變量或靜態(tài)方法。
要在靜態(tài)方法中訪問,非靜態(tài)方法或變量的話,可以通過在靜態(tài)方法中new一個類,通過類訪問非靜態(tài)成員。
main方法:
由java虛擬機(jī)調(diào)用,而虛擬機(jī)所在為不同類,因此為public
Java虛擬機(jī)在執(zhí)行main方法時,不必創(chuàng)建對象,所以為static
Java執(zhí)行的程序,參數(shù)1,參數(shù)2,參數(shù)3,作為三個字符串?dāng)?shù)組傳入args數(shù)組中
代碼塊:
(修飾符(static)){
代碼
}(;)
代碼塊在構(gòu)造器被調(diào)用時優(yōu)先執(zhí)行。
當(dāng)有static修飾時,代碼塊隨著類的加載而執(zhí)行,并且只會執(zhí)行一次
普通代碼塊:在對象創(chuàng)建時執(zhí)行(new)
類的加載:在創(chuàng)建對象實例時(new)
創(chuàng)建子類對象實例,父類也會被加載(父類先加載)
使用類的靜態(tài)成員時
創(chuàng)建對象時:在一個類中調(diào)用順序:
(1)使用new創(chuàng)建對象之后,靜態(tài)代碼塊和靜態(tài)屬性初始化調(diào)用的優(yōu)先級一樣,哪個在前先調(diào)用哪個,如上圖先調(diào)用靜態(tài)代碼塊。多個靜態(tài)代碼塊和多個靜態(tài)屬性初始化的調(diào)用順序同樣。
(2)普通代碼塊和普通對象初始化,順序同上
(3)調(diào)用構(gòu)造方法
構(gòu)造器代碼順尋:
(1).父類構(gòu)造器
(2)本類代碼塊
(3)本類構(gòu)造器代碼
總結(jié):先執(zhí)行靜態(tài)(先父類后子類),再普通(先父類后子類)。
靜態(tài)代碼塊只能調(diào)用靜態(tài)成員,普通代碼塊可以調(diào)用任意成員。
單例模式-餓漢式:
1將構(gòu)造器私有化
2在類的內(nèi)部直接創(chuàng)建
3提供一個公共的static方法,返回對象
缺點:創(chuàng)建了對象但是沒有使用,造成資源浪費
單例模式-餓漢式:
1構(gòu)造器私有化
2定義一個static靜態(tài)對象
3提供一個public的static方法,可以返回一個對象
4當(dāng)用戶使用getInstacnce時才返回對象,再次使用時返回同一個對象。
final關(guān)鍵詞:
1可以用來修飾類:使類無法被繼承(不希望被其中方法被重寫)
2修飾方法,使方法無法被改寫
3修飾屬性,使屬性無法被修改
4修飾局部變量,使無法被修改
細(xì)節(jié):
1被final修飾的變量,需要在進(jìn)行初始化,如在定義時,通過構(gòu)造器,通過代碼塊
如果還有static修飾,則不能在構(gòu)造器中賦值(代碼塊為靜態(tài))
2.final不能修飾構(gòu)造器
3..final和static搭配使用,效率更高,不會導(dǎo)致類加載
4.包裝類都是final類型,如String
抽象類:
當(dāng)父類的一些方法不能確定時,用abstra修飾該方法。
用abstra修飾的方法沒有方法體
抽象類不能被實例化(不能通過new的方式創(chuàng)建)
抽象類可以沒有抽象方法,有抽象方法的類必須是抽象類
abstra只能修飾類和方法
抽象類本質(zhì)還是類,可以有任意成員
當(dāng)一個類繼承抽象類后,它本身必須是一個抽象類或者實現(xiàn)父類中所有的抽象方法
抽象方法不能被private,final,static關(guān)鍵詞修飾
接口:
interface 接口名{}
class 類名 implements 接口{
自己的屬性
自己的方法:
必須實現(xiàn)的接口的抽象方法
}
細(xì)節(jié):
接口不能被實例化(即new)
接口中的方法都是public方法,抽象方法可以不用abstra修飾
一個普通類實現(xiàn)接口,必須將改接口所有方法實現(xiàn),可以使用alt+enter
抽象類去實現(xiàn)接口時,可以不實現(xiàn)接口的抽象方法
一個類可以實現(xiàn)多個接口
接口中的屬性都是public static final 修飾符
接口可以繼承接口,不能繼承類
接口的修飾符只能是public或者默認(rèn),和類相同
接口可以解決單繼承的問題
內(nèi)部類:
局部內(nèi)部類:
即在類中的一個方法中的類,該類可以直接訪問外部類所有的成員(包括私有),不能使用修飾符(本質(zhì)上是局部變量),但是可以用final修飾
作用域:僅僅在定義它的方法或代碼塊中。
外部類在方法中可以創(chuàng)建內(nèi)部類對象,然后調(diào)用成員
當(dāng)外部類和內(nèi)部類的成員重名時,訪問時默認(rèn)遵循就近原則,可以通過外部類.this.成員,來訪問
匿名內(nèi)部類:
是一個類,同時是一個對象。是一個局部變量。
作用:簡化開發(fā)
匿名內(nèi)部類的本質(zhì)是一個匿名類繼承一個類或者實現(xiàn)一個接口
第二個演示表示匿名內(nèi)部類是一個對象。
匿名內(nèi)部類可以當(dāng)作實參直接傳遞
創(chuàng)建內(nèi)部成員類的方法:
2.
靜態(tài)內(nèi)部類:
是類的成員,遵循相同的訪問規(guī)則。
枚舉:
將構(gòu)造器私有化,刪掉set方法,將定義常量對象寫在前面。
細(xì)節(jié):
創(chuàng)建枚舉對象時,自動繼承了Enum類。
成員必須放在前面,且用逗號隔開,最后一個用分號。
如果調(diào)用的構(gòu)造器是無參時,“()”可以省略。
Enum的成員方法:
name()返回成員名稱
ordinal()返回成員序號(從0開始)
values()返回成員數(shù)組
可以通過增強for循環(huán)來實現(xiàn)遍歷
valueOf(“常量名”),在枚舉中尋找該常量名
常量1.compare To(常量2),返回得到常量1的編號減常量2的編號。
注解:
如:重寫方法上的@Override
只能用在方法上,可以刪掉,加上后編譯器會檢驗方法是否被重寫。
@Deprecated
可以修飾方法,類,字段,參數(shù)等到,用于做版本升級過渡
@SuppressWarnings
用于抑制警告,可以使用@ SuppressWarnings({“all“})抑制所有警告,也可以換成其它類型用于抑制相應(yīng)類型的警告。
異常處理:
當(dāng)程序出現(xiàn)一個異常后,可以讓程序繼續(xù)向下執(zhí)行
使用ctrl+alt+t對可能出現(xiàn)異常的代碼塊進(jìn)行異常處理。
細(xì)節(jié):
當(dāng)異常發(fā)生時,異常后面的代碼不再執(zhí)行,直接跳入catch代碼塊中
如果異常沒有發(fā)生,則catch代碼塊不執(zhí)行
finall代碼塊無論如何都會執(zhí)行
可以沒有catch,只有try和finally,此時若發(fā)生異常,程序會在執(zhí)行完finally后結(jié)束。
Finally代碼塊必須執(zhí)行,雖然在catch中返回3
Throws:
Throws的對象可以是異常類型本身也可以是它的父類
子類在重寫父類的方法時,拋出的異常類型要么和父類一致,要么是父類所拋出異常的子類異常
包裝類:
精度提升,三元運算符是一個整體
包裝類的轉(zhuǎn)換
包裝類中的方法:
String類
String類有很多構(gòu)造器:
用finally修飾的變量指向的地址不可改變。
當(dāng)常量池中有變量時
String字符串特性:
該語句創(chuàng)建了兩個對象(若常量池中無haha)
說明:String時一個finally類,其內(nèi)容不可改變。
編譯器會優(yōu)化:判斷創(chuàng)建的常量池對象是否有引用的指向
等價于 Sting a = “helloabc”;
String 中的intern方法:
如果池中有“s1+s2“字符串,則返回該字符串的地址,若沒有則創(chuàng)建一個該字符串
常用方法:
示例:如果找不到,則返回-1;第一次出現(xiàn)的位置??梢哉易址?/p>
從下標(biāo)6開始截取字符串
前閉后開截取字符串
示例:
注意:原字符串沒有被替換
StringBuffer:
直接父類:AbstractStringBuilder
父類中有屬性 char[] value 不是final類型
StringBuffer是一個finally類,不能被繼承
String轉(zhuǎn)StringBuffer
StringBuffer轉(zhuǎn)String
StringBuffer中的方法:
如果要對String進(jìn)行大量修改,就不要使用String,考慮StringBuffer,如果是單線程同時考慮StringBuilder
Math方法:
round為四舍五入保留整數(shù)
Arrays類:
如果傳入的值為負(fù)數(shù),則會報錯
System方法:
System.exit(0)
0表示程序正常退出
Src:原數(shù)組
0:從原數(shù)組開始拷貝的位置
Dest:目的數(shù)組
0:從目的數(shù)字開始拷貝的位置
處理大數(shù)和需要保持高精度計算時使用
Date:
Calendar:
Local:
集合:
ArrayList演示:
迭代器:
List接口:
集合中的元素有序,且可以重復(fù)
每個元素都有對應(yīng)的索引
可以根據(jù)其索引號來獲取元素
ArraysList:
1.ArrayList基本等同于vector,效率高,但是不安全
2.ArrayList中維護(hù)了一個Object類型的數(shù)組
Transient表示該屬性不會被序列化
當(dāng)創(chuàng)建ArrayList對象時,如果用的是無參構(gòu)造器,則初始容量為0,第一次添加時數(shù)組擴(kuò)容為10,如果需要再次擴(kuò)容則擴(kuò)容為當(dāng)前容量的1.5倍。
如果使用指定大小的構(gòu)造器,則在需要再次擴(kuò)容則擴(kuò)容為當(dāng)前容量的1.5倍。
Vector:
底層依然是一個可變的數(shù)組
安全,但是效率不高
如果是無參,則在第一次添加后擴(kuò)容為10,以后每次需要擴(kuò)容為當(dāng)前的2倍
ArrayList和LinkList都是不安全的
Set接口:
無序,沒有索引
不允許重復(fù)元素
雖然取出的順序不是添加的順序,但是順序是固定的。
可以用迭代器和增強for循環(huán)進(jìn)行遍歷,不能用普通for循環(huán),因為沒有g(shù)et方法
HashSet底層是hashmap,是一個數(shù)組加鏈表的結(jié)構(gòu)
再添加一個元素時,先得到hash值,然后轉(zhuǎn)換成索引值。
根據(jù)索引值存放到數(shù)組對應(yīng)的位置
若對應(yīng)的位置已有元素,則調(diào)用equals方法與元素進(jìn)行比較,如果相同則放棄添加,如果不相同則添加到最后。
當(dāng)一條鏈表的元素個數(shù)超過8以后,并且table的大小>=64,就會進(jìn)行樹化。
當(dāng)添加的元素個數(shù)大于閾值(當(dāng)前數(shù)組大小的0.75倍,數(shù)組初始化大小為16)時,數(shù)組會進(jìn)行擴(kuò)容,擴(kuò)大為原來的兩倍,同時閾值也會擴(kuò)大為2倍。
Map:
保存具有映射關(guān)系的數(shù)據(jù)
Key和value可以是任何引用類型的數(shù)據(jù),會封裝到HashMap$Node對象中
Key不允許重復(fù),否則會覆蓋
Key和value都可以為null,但是key只能有一個,value可以有多個
5.k-v最后是HashMap$Nodenode = newNode(hash,key,value,null)
6.為了方便程序員遍歷,還會創(chuàng)建EntrySet集合,該集合存放的元素的類型Entry,而一個Entry對象就有k,v,EntrySet
7.entrySet中定義的類型是Map.Entry,但是實際上存放的還是HashMap$Node,因為Node實現(xiàn)了Map.Entry
8.當(dāng)把HashMap$Node對象存放到EntrySet就方便我們的遍歷,因為Map.Entry提供了重要的方法:getKey和getValue
遍歷方式:
HashTable:
鍵和值都不能為空,否則會拋出異常
使用方法基本和HashMap一樣
每次擴(kuò)容變?yōu)樵萘康?倍+1,初始容量為11
Properties:
Treeset:有序,可以自定義
自定義比較器的作用:決定了數(shù)據(jù)的順序,同時決定了數(shù)據(jù)能否被添加進(jìn)去的規(guī)則,如上圖:以長度升序排列字符串,如果有長度相同的情況則無法添加
Collection工具類:
下面的代碼會報錯,原因是在底層要嘗試把加進(jìn)去的對象轉(zhuǎn)換成Comparable,對象沒有實現(xiàn)comparable接口,因此會有轉(zhuǎn)換類型的異常。
泛型:
1.為了約束數(shù)據(jù)類型
2.省去轉(zhuǎn)型的麻煩
約束加入的類型只能為Dog
不用再向下轉(zhuǎn)型
用來解決數(shù)據(jù)的安全性問題
作用:可以在類聲明時通過一個表示表示類中的某個屬性,或是某個方法的返回類型,或是參數(shù)類型
泛型使用細(xì)節(jié):
1.泛型指向的數(shù)據(jù)類型要求是引用類型,不能是基本數(shù)據(jù)類型。如:
Int是基本數(shù)據(jù)類型
2.在指定泛型后,傳入的數(shù)據(jù)類型可以是其本身。也可以是其子類
3.使用形式:后面的括號里的內(nèi)容可以省略,推薦這種寫法
4.如果沒有指定泛型,則默認(rèn)為Object類型
自定義泛型:
1.泛型標(biāo)識符可以有多個,一般都是大寫字母
2.普通成員(屬性,方法)可以使用泛型
3.使用泛型的數(shù)組不能初始化(因為數(shù)組在new時,不能確定類型,因此無法開辟空間)
4.靜態(tài)方法中不能使用泛型(靜態(tài)方法在類加載時,對象還未創(chuàng)建,無法完成初始化)
自定義泛型接口:
1.接口中,靜態(tài)成員不能使用泛型
2.泛型接口的類型,在繼承接口或?qū)崿F(xiàn)接口時確定
3.沒有指定類型,默認(rèn)為Object
泛型在方法中的使用:
1.泛型方法可以定義在普通類中,也可以定義在泛型類中
2.當(dāng)泛型方法被調(diào)用時,類型會確定
3.泛型方法,可以使用類聲明的泛型類型,也可以使用自己聲明的泛型
4.注意泛型方法和方法使用了泛型的區(qū)別
形如:
R要在參數(shù)中使用,在調(diào)用方法時,會根據(jù)傳入的參數(shù)的類型,變化R的類型
Say1方法使用了泛型
Say2方法是泛型方法,同時也使用了泛型
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
名稱欄目:循序漸進(jìn)學(xué)java-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article30/csgipo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、電子商務(wù)、軟件開發(fā)、移動網(wǎng)站建設(shè)、微信公眾號、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容