




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
java基礎(chǔ)篇
1.數(shù)據(jù)類(lèi)型
整型:intshortlongbyte
浮點(diǎn)型:floatdouble
char類(lèi)型:表示單個(gè)字符,用單引號(hào)括起來(lái)
Boolean類(lèi)型:判定邏輯條件,false/true
2.變量與常量
變量:變化的值在java9中不能當(dāng)做變量名
首先變量聲明:每一個(gè)變量都有一個(gè)類(lèi)型
變量初始化:用賦值語(yǔ)句對(duì)變量進(jìn)行顯示初始化
常量:固定不變的用關(guān)鍵字final指示常量。
Final:表示只能被賦值一次
Staticfinal:設(shè)置一個(gè)類(lèi)常量(位于main方法的外部)
3.static與final的區(qū)別:
Static作用:方便在沒(méi)有創(chuàng)建對(duì)象的條件下調(diào)用變量或方法。可以修
飾成員方法,成員變量,編寫(xiě)static代碼優(yōu)化程序性能(形成靜態(tài)代碼
塊優(yōu)化程序性能,并且只會(huì)在類(lèi)加載的時(shí)候執(zhí)行一次),
Final:final類(lèi)(最終類(lèi))不可以繼承,沒(méi)有子類(lèi)。
final方法不能被子類(lèi)的方法覆蓋,但可以繼承。
Final不能修飾構(gòu)造方法。
4.靜態(tài)常量:類(lèi)中可以共享數(shù)據(jù)。
5.檢測(cè)字符串是否相等:s.equals⑴檢測(cè)s和t是否相等
第1頁(yè)共130頁(yè)
equalsIgnoreCase不用區(qū)分大小寫(xiě)來(lái)檢測(cè)字符串是否相等。
6.==與equals的區(qū)別:
,==,對(duì)于基本類(lèi)型和引用類(lèi)型是不相同的
基本類(lèi)型:==表示的是值是否相同
引用類(lèi)型:==表示的是引用是否相同
Equals:本質(zhì)上是==但是通過(guò)string和Integer對(duì)equals方法的重寫(xiě),
變成了值的比較。
7.數(shù)組
聲明數(shù)組:類(lèi)型□名字
數(shù)組的拷貝:int[]copiedLucky=Arrays.copyof(Lucky,Lucky.lengyh)
8.JDK與JRE的區(qū)別:
JDK:java開(kāi)發(fā)工具包,提供java的開(kāi)發(fā)環(huán)境和運(yùn)行環(huán)境
JRE:java運(yùn)行環(huán)境,為java運(yùn)行提供環(huán)境
具體的來(lái)說(shuō)JDK包含JRE,還包括編譯java編碼的編譯器javac,以
及java的調(diào)試和分析工具。
9.類(lèi)class類(lèi)名{
類(lèi)體(變量聲明)
(方法定義)}
10.Java里面向?qū)ο蟮娜筇卣魇鞘裁矗?/p>
封裝:將數(shù)據(jù)和行為組合到一個(gè)包中,并對(duì)對(duì)象的使用者隱藏具體
的實(shí)現(xiàn)方式。封裝的思想類(lèi)內(nèi)部數(shù)據(jù)結(jié)構(gòu)的完整性,讓用戶(hù)無(wú)法輕
易直接的操作內(nèi)部數(shù)據(jù),這樣降低對(duì)內(nèi)部數(shù)據(jù)的影響,提高了程序
第2頁(yè)共130頁(yè)
的安全性和可維護(hù)性。
類(lèi)的封裝實(shí)現(xiàn):將成員變量聲明為private,再通過(guò)public的方法對(duì)
這個(gè)變量進(jìn)行訪(fǎng)問(wèn)。對(duì)于一個(gè)變量我們有讀取和賦值的操作,
getXxx(讀取變量),setXxx(對(duì)成員變量進(jìn)行賦值處理)。
封裝的優(yōu)點(diǎn):隱藏類(lèi)的實(shí)現(xiàn)細(xì)節(jié)。
便于修改,增加代碼的可維護(hù)性。
讓使用者使用事先制定好的方法來(lái)訪(fǎng)問(wèn)數(shù)據(jù),方便加入
控制邏輯,限制對(duì)屬性的不合理操作。
繼承:當(dāng)兩個(gè)類(lèi)具有相同的屬性和方法時(shí),可以將相同的部分提取
出
出來(lái)作為父類(lèi),其他的類(lèi)繼承這個(gè)類(lèi)的方法和屬性。
關(guān)鍵字:extends
繼承和權(quán)限:
Hna
Publiic無(wú)修飾PrivateProtectabstractstatic
1
不能
只有同一包不能修飾不能修飾不能修飾
類(lèi)繼承可繼承濠生一段可繼承
中的可繼承類(lèi)突
拔
可重戢(修蜂
不可重
方法重載不能重蚣司■羲r可?能王函數(shù)就不能
H了)
必須鼻個(gè)實(shí)例
成員變量子類(lèi)不能直父集虐性
幺英聶性使除墓攵金原性陵隨我不能脩飾
(屬做(使用sup"R(使用我接訪(fǎng)問(wèn)父類(lèi)(使用ZP衣技付初共享這個(gè)
廣一*辛
取父笑廈性)取父劃■性)的私有變量取父類(lèi)JBa)值類(lèi)變量
多態(tài):同一個(gè)行為用不同的表現(xiàn)形式或形態(tài)的能力。說(shuō)具體點(diǎn)就是
同一接口,使用不同的實(shí)例而執(zhí)行的結(jié)果。
多態(tài)的優(yōu)點(diǎn):消除類(lèi)型之間的耦合關(guān)系可替換性可擴(kuò)充性接口性
第3頁(yè)共130頁(yè)
靈活性簡(jiǎn)化性
實(shí)現(xiàn)多態(tài)的必要條件:要有繼承
要有方法分的重寫(xiě)
父類(lèi)引用指向子類(lèi)對(duì)象
例子:父類(lèi):publicclassHttpServlet{
publicvoidservice(){
System.out.println("HttpServlet-service");
doGet();
)
publicvoiddoGet(){
System.out.print("HttpServlet-doGet");
)
)
子類(lèi):publicclassMyServletextendsHttpServlet{
publicvoiddoGet(){
System.out.println("MyServlet-doGet");
)
)
主類(lèi):publicclassTest{
publicstaticvoidmain(String[]args){
HttpServlets=newMyServlet();
s.service();
第4頁(yè)共130頁(yè)
)
)
結(jié)果:HttpServlet-service
MyServlet-doGet
代碼分析:HttpServlets=newMyServlet();//s雖然是父類(lèi)變量
的引用,但是指向的是子類(lèi)對(duì)象。s.serviceO;//子類(lèi)中沒(méi)有定
service,因此調(diào)用的是繼承父類(lèi)的service方法,然后service方法
中調(diào)doGet,這時(shí)候也是以子類(lèi)中優(yōu)先查找重寫(xiě)的doGet方法。
11.多態(tài)的向上轉(zhuǎn)型和向下轉(zhuǎn)型分別指的是什么?
向上轉(zhuǎn)型:簡(jiǎn)單的說(shuō)就是子類(lèi)對(duì)象賦值給父類(lèi)引用(減少代碼重復(fù))
格式:父類(lèi)類(lèi)型變量名=new子類(lèi)類(lèi)型()Fatherf=new
son()
Personp=newStudent。;
向下轉(zhuǎn)型:已經(jīng)向上轉(zhuǎn)型的子類(lèi)可以使用強(qiáng)制類(lèi)型轉(zhuǎn)換格式,將父
類(lèi)對(duì)象賦值給子類(lèi)引用
格式:子類(lèi)類(lèi)型變量名=(子類(lèi)類(lèi)型)父類(lèi)類(lèi)型變量名
sons=(son)f
Personp=newStudent。;
Studentstu=(Student)p
12.重寫(xiě)和重載的區(qū)別?
重寫(xiě)(override):子類(lèi)定義一個(gè)方法,這個(gè)方法的類(lèi)型和父類(lèi)的方
法類(lèi)型一致,并且方法名字,參數(shù)個(gè)數(shù),參數(shù)類(lèi)型和父類(lèi)是完全相同
的。
重寫(xiě)的規(guī)則:參數(shù)列表與被重寫(xiě)方法的參數(shù)列表必須完全相同。
第5頁(yè)共130頁(yè)
返回類(lèi)型與被重寫(xiě)方法的返回類(lèi)型可以不相同,但是必須是父類(lèi)返
回值的派生類(lèi)(java5及更早版本返回類(lèi)型要一樣,java7及更高版
本可以不同)。
訪(fǎng)問(wèn)權(quán)限不能比父類(lèi)中被重寫(xiě)的方法的訪(fǎng)問(wèn)權(quán)限更低。例如:如果
父類(lèi)的一個(gè)方法被聲明為public,那么在子類(lèi)中重寫(xiě)該方法就不能
聲明為protectedo
父類(lèi)的成員方法只能被它的子類(lèi)重寫(xiě)。
聲明為final的方法不能被重寫(xiě)。
聲明為static的方法不能被重寫(xiě),但是能夠被再次聲明。
子類(lèi)和父類(lèi)在同一個(gè)包中,那么子類(lèi)可以重寫(xiě)父類(lèi)所有方法,除了
聲明為private和final的方法。
子類(lèi)和父類(lèi)不在同一個(gè)包中,那么子類(lèi)只能夠重寫(xiě)父類(lèi)的聲明為
public和protected的非final方法。
重寫(xiě)的方法能夠拋出任何非強(qiáng)制異常,無(wú)論被重寫(xiě)的方法是否拋出
異常。但是,重寫(xiě)的方法不能拋出新的強(qiáng)制性異常,或者比被重寫(xiě)
方法聲明的更廣泛的強(qiáng)制性異常,反之則可以。
構(gòu)造方法不能被重寫(xiě)。
如果不能繼承一個(gè)方法,則不能重寫(xiě)這個(gè)方法。
重載(overload):一個(gè)類(lèi)中可以有多個(gè)方法具有相同的名字,但這
些方法的參數(shù)必須不同(參數(shù)個(gè)數(shù)不同。參數(shù)個(gè)數(shù)相同但參數(shù)表對(duì)
應(yīng)某個(gè)參數(shù)的類(lèi)型不同。)
二者的區(qū)別:重寫(xiě)和重載都是java多態(tài)性的不同表現(xiàn)。重寫(xiě)是子類(lèi)
第6頁(yè)共130頁(yè)
與父類(lèi)之間多態(tài)性的一種表現(xiàn),重載是一個(gè)類(lèi)中多態(tài)性的表現(xiàn)。
13.super關(guān)鍵字怎么使用?
可以用super操作被隱藏的成員變量和方法。
publicclassAverageextendsSum{//子類(lèi)繼承父類(lèi)
intn;//成員變量
floatf(){//方法
floatc;
super.n=n;//sup一r關(guān)鍵字調(diào)用子類(lèi)繼承所隱藏的成員變量
c=super.f();//用對(duì)象名調(diào)用父類(lèi)的f方法
returnc/n;
)
floatg(){
floatc;//局部變量聲明
c=super,();//也是調(diào)用父類(lèi)的f方法但是此時(shí)沒(méi)有用到n
returnc/2;
)
}
publicclassSum{
intn;
floatf(){
floatsum=0;
for(inti=1;i〈=n;i++)//for循環(huán)先進(jìn)行判斷滿(mǎn)足執(zhí)行循環(huán)代碼,然后才是加一
n=100執(zhí)行了100次
sum=sum+i;//循環(huán)代碼1+2+3+++99=n(al+an)/2
returnsum;
}
}
publicclassExample{
publicstaticvoidmain(Stringargs[]){
Averageaver=newAv一rag一();//倉(cāng)U建對(duì)象執(zhí)行的時(shí)候先跳至!JAverag一類(lèi)中
aver.n=100;//賦值n=100
floatresultOne=av一r,f();//調(diào)用方法
floatresultTwe=aver.g();
System.out.printin(nresultOne=n+resultOne);//輸出
System.out.printin(nresultTwe="+resultTwe);
第7頁(yè)共130頁(yè)
使用super調(diào)用父類(lèi)的構(gòu)造方法。
classAnimal{
publicvoidmove(){
System.out.printIn("動(dòng)物可以移動(dòng)*;
}
)
classDogextendsAnimal{
publicvoidmove(){
super.move();//應(yīng)用super類(lèi)的方法
System.out.printIn("狗可以跑和走;
}
}
publicclassTestDog{
publicstaticvoidmain(Stringargs[]){
Animalb=newDog();//Dog對(duì)象
b.move();〃執(zhí)行Dog類(lèi)的方法
}
}
14.構(gòu)造器可以重寫(xiě)嗎?
構(gòu)造器(Constructor):就是和類(lèi)名相同但無(wú)返回類(lèi)型的方法。它
的作用是創(chuàng)建對(duì)象時(shí)進(jìn)行初始化。
構(gòu)造器是不能被繼承的,所以不可以進(jìn)行。verride的,但可以進(jìn)行
重載(overload)
如果父類(lèi)自定義了有參構(gòu)造函數(shù),則子類(lèi)無(wú)論定義構(gòu)造函數(shù)與否,
定義有參構(gòu)造函數(shù)與否,都會(huì)報(bào)錯(cuò),正確的做法是在子類(lèi)的構(gòu)造方
法中添上super(參數(shù)),以表明子類(lèi)構(gòu)造之前先構(gòu)造父類(lèi),而這
句話(huà)必須放在第一句,否則報(bào)"Constructorcallmustbethe
firststatementinaconstructor”的錯(cuò)誤。
類(lèi)的加載順序:
第8頁(yè)共130頁(yè)
首先執(zhí)行父類(lèi)的靜態(tài)代碼塊/初始化靜態(tài)變量(兩者優(yōu)先級(jí)相
同),然后執(zhí)行子類(lèi)的靜態(tài)代碼/初始化靜態(tài)變量(兩者優(yōu)先級(jí)相
同,誰(shuí)寫(xiě)在前面誰(shuí)先執(zhí)行),然后初始化父類(lèi)成員變量/執(zhí)行代碼塊
{}(兩者優(yōu)先級(jí)相同),接著父類(lèi)的構(gòu)造器,然后子類(lèi)的成員變量/
代碼塊,最后子類(lèi)的構(gòu)造器。
15.什么是正則表達(dá)式以及它有什么用途?
在編寫(xiě)處理字符串的程序時(shí),經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī)則的字
符串的需要。正則表達(dá)式就是用于描述這些規(guī)則的工具。換句話(huà)
說(shuō),正則表達(dá)式就是記錄文本規(guī)則的代碼。計(jì)算機(jī)處理的信息更多
的時(shí)候不是數(shù)值而是字符串,正則表達(dá)式就是在進(jìn)行字符串匹配和
處理的時(shí)候最為強(qiáng)大的工具,絕大多數(shù)語(yǔ)言都提供了對(duì)正則表達(dá)式
的支持。
16.int和integer的區(qū)別是什么?
Java是一個(gè)近乎純潔的面向?qū)ο缶幊陶Z(yǔ)言,但是為了編程的方便還
是引入了基本數(shù)據(jù)類(lèi)型,但是為了能夠?qū)⑦@些基本數(shù)據(jù)類(lèi)型當(dāng)成對(duì)
象操作,Java為每一個(gè)基本數(shù)據(jù)類(lèi)型都引入了對(duì)應(yīng)的包裝類(lèi)型
(wrapperclass),int的包裝類(lèi)就是Integer,從Java5開(kāi)始引
入了自動(dòng)裝箱/拆箱機(jī)制,使得二者可以相互轉(zhuǎn)換。
Java為每個(gè)原始類(lèi)型提供了包裝類(lèi)型:
一原始類(lèi)型:boolean,char,byte,short,int,long,float,
double
-包裝類(lèi)型:Boolean,Character,Byte,Short,Integer,
第9頁(yè)共130頁(yè)
Long,Float,Double
包裝類(lèi)的作用:方便對(duì)一些基本類(lèi)型進(jìn)行操作,解決基本類(lèi)解決不
了的問(wèn)題。
集合不允許存放基本數(shù)據(jù)類(lèi)型,只能存放應(yīng)用數(shù)據(jù)類(lèi)型。
add(Objecto)
基本類(lèi)型可以和包裝類(lèi)型直接相互轉(zhuǎn)換,自動(dòng)裝箱拆箱,(自動(dòng)裝
箱:將基本類(lèi)型轉(zhuǎn)換為包裝器類(lèi)型,自動(dòng)拆箱:將包裝器類(lèi)型轉(zhuǎn)換
為基本類(lèi)型)1〃自動(dòng)裝箱
2Integertotal=99;
3
4//自動(dòng)拆箱
5inttotalprim=total;
通過(guò)包裝類(lèi)型的parse方法可以實(shí)現(xiàn)基本數(shù)據(jù)類(lèi)型+String類(lèi)型之間
的相互轉(zhuǎn)換。
函數(shù)需要傳遞進(jìn)去的參數(shù)為Object類(lèi)型,傳入基本數(shù)據(jù)類(lèi)型就不可
行。
17.抽象類(lèi)和接口的區(qū)別?
抽象類(lèi):在面向?qū)ο罄铮械膶?duì)象是通過(guò)類(lèi)來(lái)描繪的,但反過(guò)來(lái)
并不是所有的類(lèi)都是用來(lái)描繪對(duì)象的,通俗一點(diǎn)講,如果一個(gè)類(lèi)中
沒(méi)有包含足夠的信息來(lái)描繪一個(gè)對(duì)象,那么這個(gè)類(lèi)就是抽象類(lèi)。通
常使用關(guān)鍵字abstract來(lái)修飾。
abstract類(lèi)的特點(diǎn):不能實(shí)例化對(duì)象,必須被繼承才能實(shí)現(xiàn)。
abstract類(lèi)不能使用new運(yùn)算符創(chuàng)建對(duì)象。
第10頁(yè)共130頁(yè)
abstract類(lèi)中可以有abstract方法。
一旦一個(gè)類(lèi)里面有abstract方法,那么這個(gè)
類(lèi)必須用abstract修飾。
接口:java編程語(yǔ)言中的一個(gè)抽象類(lèi)型,,是抽象方法的集合,通
常用關(guān)鍵字interface聲明。(隱式抽象不需要關(guān)鍵字abstract
所有方法都是公用的)
interface接口名稱(chēng)[extends其他的接口名]{
//聲明變量常量聲明所有的常量一定都是公共的public而且是static常量
//抽象方法訪(fǎng)問(wèn)權(quán)限一定是public
)
接口的實(shí)現(xiàn):當(dāng)接口要實(shí)現(xiàn)時(shí),類(lèi)要實(shí)現(xiàn)接口中所以有的方法。類(lèi)
使用關(guān)鍵字implements聲明該類(lèi)實(shí)現(xiàn)一個(gè)或多個(gè)接口(多個(gè)時(shí)用逗
號(hào)隔開(kāi))。
publicclassMammalintimplementsAnimal{
publicvoideat(){
System.out.println("Mammaleats");
)
publicvoidtravel(){
System.out.printin("Mammaltravels");
)
publicintnoOfLegs(){
return0;
)
publicstaticvoidmain(Stringargs[]){
Mammalintm=newMammalint();
m.eat();
();
)
)
抽象類(lèi)與接口的區(qū)別:
第11頁(yè)共130頁(yè)
抽象類(lèi)中的方法可以有方法體,就可以實(shí)現(xiàn)方法的具體功能,但接
口就不行。
抽象類(lèi)中的成員變量可以是各種類(lèi)型,但接口中的成員變量只能是
publicstaticfinal類(lèi)型的。
接口里只有常量,不能有變量;但抽象類(lèi)中既有常量也有變量。
接口中不能含有靜態(tài)代碼塊和靜態(tài)方法(static修飾),但是抽象
類(lèi)中就可以有。一個(gè)類(lèi)只能繼承一個(gè)抽象類(lèi),但一個(gè)類(lèi)可以實(shí)現(xiàn)一
個(gè)或多個(gè)接口。abstract類(lèi)中可以有非abstract方法,但是接口
不行(abstract是可以省略的)。
18.java里什么是構(gòu)造函數(shù)?構(gòu)造函數(shù)重載?復(fù)制構(gòu)造函數(shù)?
構(gòu)造函數(shù):是函數(shù)的一種特殊形式,它不需要定義返回類(lèi)型,而且
構(gòu)造函數(shù)的名稱(chēng)和所在類(lèi)的名稱(chēng)相同,其余的與函數(shù)的特性相同,
可以帶有參數(shù)列表,可以存在函數(shù)重載。
作用:創(chuàng)建函數(shù)對(duì)象對(duì)象初始化
Java中構(gòu)造函數(shù)重載和方法重載很相似。可以為一個(gè)類(lèi)創(chuàng)建多個(gè)構(gòu)
造函數(shù)。每一個(gè)構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。
Java不支持像C++中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是因?yàn)槿绻?/p>
你不自己寫(xiě)構(gòu)造函數(shù)的情況下,Java不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函
數(shù)。
19.面向?qū)ο蟮摹傲瓌t一法則”目的分別是什么?
1)一職責(zé)原則:一個(gè)類(lèi)只做它該做的事情(單一職責(zé)原則表達(dá)的是
“高內(nèi)聚”的思想,寫(xiě)代碼最終原則“高內(nèi)聚,低耦合”。高內(nèi)聚
第12頁(yè)共130頁(yè)
通俗的講就是一個(gè)代碼能完成一項(xiàng)功能,在面向?qū)ο笾校绻蛔?/p>
一個(gè)類(lèi)完成該做的事,而不涉及到其它無(wú)關(guān)的類(lèi)就是高內(nèi)聚。)
2)開(kāi)閉原則:設(shè)計(jì)的系統(tǒng)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。怎么理解呢,
開(kāi)閉原則在做新功能開(kāi)發(fā)的時(shí)候經(jīng)常用到,我的理解是當(dāng)我們需要
給一個(gè)類(lèi)添加一個(gè)新的功能時(shí),最好的辦法不是直接修改這個(gè)類(lèi)的
代碼,有可能牽一發(fā)動(dòng)全身,應(yīng)該考慮如何用一個(gè)新的類(lèi)實(shí)現(xiàn)一個(gè)
新的功能,最終的效果是一系列相關(guān)的功能都有自己的類(lèi),當(dāng)然它
們都繼承于父類(lèi)。
3)依賴(lài)倒轉(zhuǎn)原則:高層模塊不應(yīng)該依賴(lài)于底層模塊,二者都應(yīng)該依
賴(lài)于抽象。抽象不應(yīng)該依賴(lài)于具體實(shí)現(xiàn),具體實(shí)現(xiàn)應(yīng)該依賴(lài)于抽
象。其核心思想是面向接口編程。怎么理解吶,就比如說(shuō)我們要把
生產(chǎn)一輛汽車(chē)當(dāng)做一條程序,首先是不是先要建立接口比如車(chē)輪,
車(chē)身,汽車(chē)。每一個(gè)接口都有各自固定的方法,比如車(chē)輪這個(gè)接口
里面就有大小尺寸的方法。比如我們現(xiàn)在要生產(chǎn)一輛轎車(chē),我們就
要寫(xiě)一個(gè)實(shí)現(xiàn)這個(gè)接口的實(shí)現(xiàn)類(lèi),類(lèi)名是轎車(chē)輪。要是生產(chǎn)卡車(chē)呢
就寫(xiě)一個(gè)實(shí)現(xiàn)這個(gè)接口的實(shí)現(xiàn)類(lèi)。這樣一來(lái)既節(jié)省了時(shí)間,也便于
我們更好的維護(hù)。
4)里氏替換原則:所有引用父類(lèi)的地方必須能透明的使用其子類(lèi)的
對(duì)象。比如有兩個(gè)類(lèi)一個(gè)A類(lèi),一個(gè)B類(lèi),并且A是B的父類(lèi)。現(xiàn)
在有一個(gè)方法可以接受A類(lèi)對(duì)象a時(shí),那么這個(gè)方法也能接受B類(lèi)
對(duì)象b。
5)接口隔離原則:接口應(yīng)該小而專(zhuān),不應(yīng)該大而全。
第13頁(yè)共130頁(yè)
6)合成聚合復(fù)用原則:優(yōu)先使用聚合或合成關(guān)系復(fù)合代碼。
7)迪米特法則:最少知識(shí)原則,一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象有盡可能
少的了解。
20.java語(yǔ)言如何處理異常,關(guān)鍵字throw,throws,try,finally
分別代表什么?在宜y塊可以?huà)伋霎惓幔?/p>
異常:程序運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤,比如試圖打開(kāi)一個(gè)根本不存在的文
件夾等。異常大致分為:Error和Exception兩類(lèi),Error是程序無(wú)
法處理的錯(cuò)誤,此類(lèi)錯(cuò)誤一般表示代碼運(yùn)行時(shí)JVM出現(xiàn)的錯(cuò)誤。比
如虛擬機(jī)運(yùn)行錯(cuò)誤或者類(lèi)定義錯(cuò)誤。而Exception代表的是程序本
身能夠捕獲且可以處理的異常。可以分為兩類(lèi)一種是運(yùn)行時(shí)異常
(不受檢異常)一種是非運(yùn)行時(shí)異常(受檢異常)。前者屬于不可
查異常,一般是由邏輯性錯(cuò)誤引起的,在程序中可以選擇捕獲異
常,也可以不處理。而一旦出現(xiàn)后者這種異常,必須對(duì)異常進(jìn)行處
理。比如lOException,要么使用try-catch捕獲,要么使用
throws拋出異常,否則編譯不過(guò)。
Java處理異常機(jī)制:通過(guò)面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把不同的
異常進(jìn)行分類(lèi),并提供良好的接口。當(dāng)一個(gè)方法出現(xiàn)異常時(shí)就會(huì)拋
出一個(gè)異常對(duì)象,這個(gè)對(duì)象包含異常信息,然后調(diào)用這個(gè)對(duì)象的方
法就會(huì)捕獲到異常并進(jìn)行處理。
throw拋出異常對(duì)象thrownew異常類(lèi)名(參數(shù));
publicclassDemoThrow{
publicstaticvoidmain(String[]args){
inta=DemoThrow.div(4,0);
第14頁(yè)共130頁(yè)
System.out.println(a);
)
publicstaticintdiv(inta,intb){
if(b==0)
thrownewArithmeticException("異常信息:除數(shù)不能為0");
//拋出具體問(wèn)題,編譯時(shí)不檢測(cè)
returna/b;
)
)
throws聲明拋出異常
修飾符返回值類(lèi)型方法名(參數(shù))throws異常類(lèi)名工,異常類(lèi)名2...{}
importjava.io.Fileinputstream;
importjava.io.FileNotFoundException;
importjava.io.Inputstream;
publicclassDemoThrows{
publicstaticvoidmain(String[]args)throws
FileNotFoundException{
readFile();
)
publicstaticvoidreadFile()throwsFileNotFoundException{
Inputstreamis=newFileInputStream("E:/iodemo/ch01.txt");
)
)
try:在這個(gè)成員函數(shù)內(nèi)部寫(xiě)另一個(gè)try語(yǔ)句保護(hù)其他代碼。每當(dāng)遇到一
個(gè)try語(yǔ)句,”異常"的框架就放到堆棧上面,直到所有的try語(yǔ)句都
完成。如果下一級(jí)的宜y語(yǔ)句沒(méi)有對(duì)某種“異常”進(jìn)行處理,堆棧就會(huì)
展開(kāi),直到遇到有處理這種“異常”的try語(yǔ)句。
Finally為確保一段代碼不管發(fā)生什么“異常”都被執(zhí)行一段代碼。
importjava.io.Fileinputstream;
importjava.io.FileNotFoundException;
importjava.io.Inputstream;
publicclassDemoTryCatch{
publicstaticvoidmain(String[]args){
//捕獲異常
try(
//可能產(chǎn)生異常的代碼
第15頁(yè)共130頁(yè)
readFile();
}catch(FileNotFoundExceptione){
//異常的處理邏輯,將異常記錄日志,異常封裝后顯示
System.out.printin("系統(tǒng)找不到指定的路徑”);
}
System.out.printIn(“后續(xù)代碼”);
}
publicstaticvoidreadFile()throwsFileNotFoundException{
Inputstreamis=newFileInputStream("E:/iodemo/ch01.txt");
)
)
21.說(shuō)明一下finalfinallyfinalize的區(qū)別?
final聲明屬性、方法、類(lèi),分別表示屬性不可變、方法不可覆蓋、
類(lèi)不可繼承。
finally是異常處理語(yǔ)句的一部分,表示總是執(zhí)行。
finalize是Object類(lèi)的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用
被回收的對(duì)象的此方法,可以覆蓋此方法提供垃圾回收的其他資源。
22.面向?qū)ο蟮奶卣鳎?/p>
抽象::抽象是將一類(lèi)對(duì)象的共同特征總結(jié)出來(lái)構(gòu)造類(lèi)的過(guò)程,包括
數(shù)據(jù)抽象和行為抽象兩方面,抽象只關(guān)注對(duì)象的哪些屬性和行為,并
不關(guān)注這此行為的細(xì)節(jié)是什么
封裝:將數(shù)據(jù)和行為組合到一個(gè)包中,并對(duì)對(duì)象的使用者隱藏具體的
實(shí)現(xiàn)方式。
繼承:當(dāng)兩個(gè)類(lèi)具有相同的屬性和方法時(shí),可以將相同的部分提取
出
出來(lái)作為父類(lèi),其他的類(lèi)繼承這個(gè)類(lèi)的方法和屬性。
多態(tài):同一個(gè)行為用不同的表現(xiàn)形式或形態(tài)的能力。說(shuō)具體點(diǎn)就是
同一接口,使用不同的實(shí)例而執(zhí)行的結(jié)果。
第16頁(yè)共130頁(yè)
23.java是否具支持多繼承?
Java中類(lèi)是不支持多繼承的。(一個(gè)類(lèi)只能有一個(gè)父類(lèi))但java中
接口是支持多繼承的,即一個(gè)接口可以有多個(gè)父接口。
24.如何通過(guò)反射創(chuàng)建對(duì)象?反射:java反射機(jī)制是在運(yùn)行過(guò)程中,
對(duì)任何一個(gè)類(lèi),都可以知道這個(gè)類(lèi)的所有方法和屬性;對(duì)于任何一個(gè)
對(duì)象,都可以知道這個(gè)對(duì)象的所有方法和屬性。
第一種通過(guò)class的newlntance()方法來(lái)創(chuàng)建對(duì)象。
第二種通過(guò)Constructor的newlntance()方法來(lái)創(chuàng)建對(duì)象。
25.string、stringBuffer、stringBulide的區(qū)別?String不可變有
什么好處?
string:是字符串常量string類(lèi)是final的所以string不可以繼
承沒(méi)有子類(lèi)。
stringBuffer:是字符變量,是線(xiàn)程安全的,也就是多線(xiàn)程修改同一
個(gè)StringBuffer對(duì)象的時(shí)候,過(guò)程是同步的,當(dāng)然這就導(dǎo)致了
StringBuffer的效率降低。
不可變對(duì)象是指一個(gè)對(duì)象的狀態(tài)在對(duì)象被創(chuàng)建之后就不再變化。不可
改變的意思就是說(shuō):不能改變對(duì)象內(nèi)的成員變量,包括基本數(shù)據(jù)類(lèi)型
的值不能改變,引用類(lèi)型的變量不能指向其他的對(duì)象,引用類(lèi)型指向
的對(duì)象的狀態(tài)也不能改變。
String不可變是因?yàn)樵贘DK中String類(lèi)被聲明為一個(gè)final類(lèi),
且類(lèi)內(nèi)部的value字節(jié)數(shù)組也是final的,只有當(dāng)字符串是不可
變時(shí)字符串池才有可能實(shí)現(xiàn),字符串池的實(shí)現(xiàn)可以在運(yùn)行時(shí)節(jié)約很多
第17頁(yè)共130頁(yè)
heap空間,因?yàn)椴煌淖址兞慷贾赶虺刂械耐粋€(gè)字符串;如
果字符串是可變的則會(huì)引起很?chē)?yán)重的安全問(wèn)題,譬如數(shù)據(jù)庫(kù)的用戶(hù)名
密碼都是以字符串的形式傳入來(lái)獲得數(shù)據(jù)庫(kù)的連接,或者在socket
編程中主機(jī)名和端口都是以字符串的形式傳入,因?yàn)樽址遣豢勺?/p>
的,所以它的值是不可改變的,否則黑客們可以鉆到空子改變字符串
指向的對(duì)象的值造成安全漏洞;因?yàn)樽址遣豢勺兊模允嵌嗑€(xiàn)
程安全的,同一個(gè)字符串實(shí)例可以被多個(gè)線(xiàn)程共享,這樣便不用因?yàn)?/p>
線(xiàn)程安全問(wèn)題而使用同步,字符串自己便是線(xiàn)程安全的;因?yàn)樽址?/p>
是不可變的所以在它創(chuàng)建的時(shí)候hashcode就被緩存了,不變性也保
證了hash碼的唯一性,不需要重新計(jì)算,這就使得字符串很適合作
為Map的鍵,字符串的處理速度要快過(guò)其它的鍵對(duì)象,這就是
HashMap中的鍵往往都使用字符串的原因。
26.String類(lèi)的常用方法?
publicintlength()獲取string對(duì)象的字符序列長(zhǎng)度。
Stringchina="1998年出生”;
intnlrn2£
nl=chian.lenght();
n2="小鳥(niǎo)fly”.lenght();
nl的值是7,n2的值是5
publicintcompareTo(Strings)按字典序與參數(shù)指定的string對(duì)
象s的字符序列比較大小.如果String對(duì)象的字符序列與s相同,該
方法返回0,大于返回正值。
publicintindexOf(Strings)從當(dāng)前string對(duì)象的字符序列的0
索引位置開(kāi)始檢索首次出現(xiàn)S的位置并返回該位置
Stringtom="Iamagoodcat";
第18頁(yè)共130頁(yè)
//0123456789從零開(kāi)始的并且空格也算一個(gè)數(shù)如果沒(méi)有返回-1
tom.indexOf("a");//值是2
tom.indexOf("good"A2);//值是7從當(dāng)前字符串的第二位開(kāi)始數(shù)
tom.indexOf("wn,2);//-I
publicintindexOf(Strings,intstartpoint)
從當(dāng)前字符串的startpoint位置開(kāi)始檢索字符串s,并返回首次出現(xiàn)s的位置。
沒(méi)有找到的時(shí)候,返回T.
publicintlastlndexOf(Strings)從當(dāng)前String對(duì)象的字符序列
的0索引位置開(kāi)始檢索最后一次出現(xiàn)S的位置并返回該位置
publicbooleanequals(Strings)比較當(dāng)前string對(duì)象的字符
序列是否和參數(shù)相等
Stringtom=newString("天道酬勤”);
Stringboy=newString(“知心朋友”);
Stringjerry=newString(“天道酬勤”);
tom.equlas(boy);//false比較對(duì)象tom和參數(shù)boy是否相等如果相等返回
true否貝!Jfalse
tom.equals(jerry);//true
publicbooleanstartsWith(Strings)string字符前綴是否相等
publicbooleanendWith(Strings)string字符后綴是否相等
publicbooleancontains(Strings)判斷當(dāng)前String對(duì)象的
字符序列是否包含參數(shù)S的字符序列。
publicStringsubstring(intstartpoint)字符串對(duì)象調(diào)用該方法
獲得一個(gè)新的String對(duì)象
27.說(shuō)明Comparator和Comparable接口的區(qū)別以及它們的作用?
Comparator接口里面有兩種方法一種是compare另一種是equals。
compareO方法用來(lái)給輸入兩個(gè)輸入的參數(shù)排序,返回值負(fù)、0、
正分別代表第一個(gè)參數(shù)小于、等于、大于第二個(gè)參數(shù)。equalsO
方法需要一個(gè)對(duì)象作為參數(shù),然后才能決定對(duì)象是否和comparator
相等,如果相等返回true,不相等返回false。
第19頁(yè)共130頁(yè)
comparable接口里面只有一個(gè)compareTo()方法,這個(gè)方法用來(lái)
給兩個(gè)對(duì)象排序。它返回負(fù)數(shù)、0、正數(shù)表示輸入對(duì)象小于、等于、
大于已經(jīng)存在的對(duì)象。
28.解釋一下類(lèi)加載機(jī)制,什么是雙親委派模型?好處是什么?
類(lèi)加載機(jī)制:將類(lèi)的.class文件中的二進(jìn)制數(shù)據(jù)讀入到內(nèi)存中,將
其放在運(yùn)行時(shí)數(shù)據(jù)區(qū)的方法區(qū)內(nèi),然后在堆內(nèi)創(chuàng)建一個(gè)
java.lang.Class對(duì)象,用來(lái)封裝類(lèi)在方法區(qū)的數(shù)據(jù)結(jié)構(gòu)。類(lèi)加載的最
終結(jié)果是堆內(nèi)的class對(duì)象,class對(duì)象封裝了方法區(qū)的數(shù)據(jù)結(jié)
構(gòu),并向程序員提供訪(fǎng)問(wèn)方法區(qū)數(shù)據(jù)結(jié)構(gòu)的接口。
雙親委派機(jī)制:當(dāng)一個(gè)類(lèi)加載器收到類(lèi)加載請(qǐng)求時(shí),它首先不會(huì)自
己加載這個(gè)類(lèi),而是把加載這個(gè)類(lèi)的請(qǐng)求委派給自己的父類(lèi)加載
器,每一層加載器都是這樣,這樣一來(lái)加載請(qǐng)求就會(huì)傳送到頂層的
啟動(dòng)加載器中,只有父類(lèi)加載器無(wú)法完成加載請(qǐng)求時(shí)(搜索范圍沒(méi)
有要加載的類(lèi)),子類(lèi)加載器才會(huì)嘗試去完成類(lèi)的加載。
好處:避免重復(fù)加載,提高效率。父類(lèi)已經(jīng)加載了,子類(lèi)就不需要
加載了。
很好的解決了各個(gè)類(lèi)加載器之間基礎(chǔ)類(lèi)的的同一問(wèn)題,如果不使用
該種方式,那么用戶(hù)隨意定義類(lèi)加載器來(lái)加載核心API,會(huì)帶來(lái)相
關(guān)的隱患。
29.請(qǐng)說(shuō)明static關(guān)鍵字是什么意思?Java中是否可以覆蓋
(override)——個(gè)private或static的方法?
static:static關(guān)鍵字表示一個(gè)成員變量或者成員方法可以在沒(méi)有
第20頁(yè)共130頁(yè)
所屬類(lèi)的實(shí)例變量的情況下被訪(fǎng)問(wèn)。
修飾變量:static變量類(lèi)型變量名
目的:作為共享變量使用減少創(chuàng)建對(duì)象保留唯一副本
修飾方法:【訪(fǎng)問(wèn)權(quán)限修飾符】static方法返回值方法名(參
數(shù)列表)
Java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)
綁定的,而static方法是編譯時(shí)靜態(tài)綁定的。static方法跟類(lèi)的
任何實(shí)例都不相關(guān),所以概念上不適用。
30.列舉object類(lèi)的方法并簡(jiǎn)要說(shuō)明。
object類(lèi):所以類(lèi)的超類(lèi)(父類(lèi))
equals方法:確定兩個(gè)對(duì)象的引用是否相等。
hashCode方法:返回對(duì)象的哈希碼值。publicinthashCode()
getClass方法:返回object運(yùn)行時(shí)的類(lèi)。
publicfinalclassgetClass()
toString方法:返回對(duì)象值的一個(gè)字符串。
publicStringtoString()
StringtoString(){
getClass().getName()+n@n+Integer.toHexString(hashCode());
getClass().getName()++Integer.toHexString(hashCode())這返
回的是:類(lèi)的全路徑名稱(chēng)+它的哈希碼值。
31.類(lèi)和對(duì)象的區(qū)別?
定義上的不同:類(lèi)是現(xiàn)實(shí)世界或思維世界在計(jì)算機(jī)的反映,它將數(shù)
據(jù)和數(shù)據(jù)上的操作封裝起來(lái)。
第21頁(yè)共130頁(yè)
對(duì)象是具有類(lèi)類(lèi)型的變量,兩者是面向?qū)ο缶幊套罨镜母拍睢?/p>
范疇不同:類(lèi)是一個(gè)抽象概念,它不存在現(xiàn)實(shí)世界的時(shí)間、空間
里。類(lèi)知識(shí)為所有對(duì)象定義了抽象的屬性和行為。
對(duì)象則是類(lèi)的一個(gè)具體。
狀態(tài)不同:類(lèi)是一個(gè)靜態(tài)的概念,類(lèi)本身不攜帶任何數(shù)據(jù)。當(dāng)沒(méi)有
為類(lèi)創(chuàng)建任何數(shù)據(jù)時(shí),類(lèi)本身不存在于內(nèi)存空間。
對(duì)象是動(dòng)態(tài)的概念,每一個(gè)對(duì)象都存在著有別于其他對(duì)象的屬性和
行為。
二者的聯(lián)系:類(lèi)是對(duì)象的抽象,對(duì)象是類(lèi)的具體。二者的關(guān)系猶如
模板和鑄件一樣,類(lèi)的實(shí)例化就是對(duì)象。
32.類(lèi)的加載過(guò)程?如何保證我的類(lèi)被指定加載器加載?相同的類(lèi)被
不同的加載器加載,這兩個(gè)類(lèi)相同嗎?
類(lèi)加載機(jī)制:
加載一驗(yàn)證—準(zhǔn)備—,解析一,初始化
加載:在內(nèi)存中生成java.long.class對(duì)象,作為方法區(qū)這個(gè)類(lèi)的
各種數(shù)據(jù)入口。(注意這個(gè)過(guò)程并不是一定要去class類(lèi)中獲取,
還可以從zip包或者運(yùn)行時(shí)計(jì)算生成)
驗(yàn)證:這個(gè)過(guò)程主要確保class文件中的字節(jié)流中包含的信息是否
滿(mǎn)足當(dāng)前虛擬機(jī)的要求。
準(zhǔn)備:準(zhǔn)備階段是正式為類(lèi)變量分配內(nèi)存,設(shè)置變量初始值的階
段。在方法區(qū)中分配這些變量所使用的空間。
解析:虛擬機(jī)將常量池中的符號(hào)引用替換為直接引用的過(guò)程。符號(hào)引
第22頁(yè)共130頁(yè)
用就是class文件中:
CONSTANT_Class_info
CONSTANT_Field_info
CONSTANT_Method_info
等類(lèi)型的常量。
初始化:類(lèi)加載的最后一個(gè)階段,前面的加載階段可以自定義加載
器以外,其他階段都是有jvm主導(dǎo)的。這個(gè)階段是執(zhí)行類(lèi)構(gòu)造器
〈client》方法的過(guò)程。
一個(gè)類(lèi),由不同的類(lèi)加載器實(shí)例加載的話(huà),就會(huì)在方法區(qū)產(chǎn)生兩個(gè)
不同的類(lèi),彼此不可見(jiàn),并且在堆中生成不同的class實(shí)例。
33.什么是集合?它的作用是什么?集合與數(shù)組的區(qū)別?Java集合
框架體系結(jié)構(gòu)?
集合:是一種java工具類(lèi),像是一種容器,用來(lái)存儲(chǔ)任意數(shù)量的具
有相同屬性的對(duì)象。
作用:在類(lèi)的內(nèi)部,對(duì)數(shù)據(jù)進(jìn)行組織。
簡(jiǎn)單快速的搜索大量的條目。
有的集合接口,提供一系列排列有序的元素,并且可以在有
序列中快速的插入刪除有關(guān)元素。
還有一些集合接口,提供映射關(guān)系,可通過(guò)關(guān)鍵字(key)去
快速查找唯一對(duì)應(yīng)的對(duì)象,且這個(gè)關(guān)鍵字的類(lèi)型是任意的。
區(qū)別:數(shù)組長(zhǎng)度固定不變,集合長(zhǎng)度改變。
數(shù)組只能通過(guò)下標(biāo)去訪(fǎng)問(wèn)元素,類(lèi)型固定(整型),有的集
第23頁(yè)共130頁(yè)
合可以通過(guò)任意類(lèi)型查找所映射的具體對(duì)象。
Java集合框架體系結(jié)構(gòu):
lis廂Queue是有序,可以重復(fù)科既U的
list(序列)子接口0實(shí)現(xiàn)類(lèi)ArrayList數(shù)組序列
一~一~Queue(隊(duì)列)子?接口?實(shí)現(xiàn)類(lèi)LinkedList鏈表
Collectionm接口>-----------------------------------------------
1\set(集)子接口0實(shí)現(xiàn)類(lèi)Headset哈希集
java集合框架體系結(jié)構(gòu)無(wú)序,不可重復(fù)科既
<key,Value〉Entry(鍵對(duì)值)內(nèi)音湊
~?實(shí)現(xiàn)類(lèi)HeadMap哈希表
------------------------------------------
34.什么是迭代器(Iterator)?迭代器的fail-fast機(jī)制?主要解
決什么問(wèn)題?
迭代器:是一種設(shè)計(jì)模式,是一個(gè)對(duì)象,它的工作是遍歷并選擇序
列中的對(duì)象。(遍歷就是把每一個(gè)元素訪(fǎng)問(wèn)一邊)(java的迭代器
只能單向移動(dòng))
迭代器方法:next。獲取序列的下一個(gè)元素。
HasNextO檢查序列中是否還有元素(如果有返回
true)o
Remove。刪除上次調(diào)用next()方法返回的元素。
迭代器的作用:為各種容器提供公共的操作接口,使用java的迭代
器iterator可以使對(duì)容器的遍歷操作完全與其底層隔離可以很好地
達(dá)到解耦效果。(解耦:較為具體的說(shuō)明就是有的時(shí)候程序需要修
改,我只需要改正一部分,單是如果程序的耦合性很強(qiáng)的話(huà)就需要
從頭再寫(xiě)一遍很不劃算,而正常的開(kāi)發(fā)中都是改那部分,重寫(xiě)那部
分,把配置文件一改就成了,java中通過(guò)接口(interface),
第24頁(yè)共130頁(yè)
spring技術(shù)中的ioc等實(shí)現(xiàn)的解耦合,重寫(xiě)覆蓋父類(lèi)的方法也是一
種解耦行為)
迭代器源代碼:
importjava.util.*;
publicclassT一st工t一rator{
publicstaticvoidmain(Stringargs[]){
//創(chuàng)建一個(gè)list它是一個(gè)序列化的數(shù)據(jù)
List1ist=newArrayList();
//創(chuàng)建一個(gè)map,它是一個(gè)非序列化的數(shù)據(jù)
Mapmap=newHashMap();
for(inti=0;i<10;i++){
//向容器中添加數(shù)據(jù)
list?add(newString();
map.put(i,newString(”map"+i));
}
//序列化了的數(shù)據(jù)創(chuàng)建迭代器。
IteratoriterList=list?it一rator();//List接口實(shí)現(xiàn)了工t一rabl一接口
//進(jìn)行遍歷如果容器中有下一個(gè)數(shù)據(jù),就獲取下一個(gè)數(shù)據(jù)并打印出來(lái)
while(iterList.hasNext()){
StringstrList=(String)iterList.next();
System.out.printIn(strList.toString());
}
//創(chuàng)建非序列化數(shù)據(jù)的迭代器,要先將其序列化
IteratoriterMap=map.entrySet().iterator();
//進(jìn)行遍歷如果容器中有下一個(gè)數(shù)據(jù),就獲取下一個(gè)數(shù)據(jù)并打印出來(lái)
while(iterMap.hasNext()){
Map.EntrystrMap=(Map.Entry)iterMap.next();
System.out.printin(strMap.getValue());
}
)
}
迭代器的fail-fast機(jī)制:
Fail-fast是java集合中的一種錯(cuò)誤機(jī)制,當(dāng)多個(gè)線(xiàn)程對(duì)同一
集合的內(nèi)容同時(shí)操作時(shí),就可能會(huì)產(chǎn)生fail-fast事件。比如說(shuō)
35.set、Map、List接口存取元素時(shí),各有什么特點(diǎn)?以及
collection^set>map、list之間的聯(lián)系和區(qū)另U?
第25頁(yè)共130頁(yè)
Set(集)接口存取元素時(shí)不允許增加重復(fù)的元素(用對(duì)象的
equals()方法來(lái)區(qū)分元素是否重復(fù))。
publicstaticvoidmain(String[]args){
HashSet<String>hashSet=newHashSet<>();
LinkedHashSet<String>linkedHashSet=newLinkedHashSet<>();
TreeSet<String>treeSet=newTreeSet<>();
for(Stringdata:Arrays.asListC'afaE","afaE","asfweD",
"hfasfae","aefaeA")){
hashSet.add(data);
linkedHashSet.add(data);
treeSet.add(data);
}
//HashSet:無(wú)序,隨機(jī)輸出。底層數(shù)據(jù)結(jié)構(gòu)是哈希表,依賴(lài)hashCode()和
equals()兩個(gè)方法來(lái)保證唯一性。
System.out.printIn("OrderinginHashSet:"+hashSet);
“LinkedHashSet:FIFO插入有序,先進(jìn)先出。底層結(jié)構(gòu)是鏈表和哈希表,
由鏈表保證元素有序,哈希表保證元素唯一。
System.out.println("OrderofelementinLinkedHashSet:"+
linkedHashSet);
//TreeSet:有序,唯一。底層結(jié)構(gòu)是紅黑樹(shù),排序采用自然排序和比較容器
排序,根據(jù)比較的返回值是否為。來(lái)判斷元素唯一。
System.out.printIn("OrderofobjectsinTreeSet:"+
treeSet);
)
*>rubhr->;??,OCXXKOW
*terminated?【JavaApp?c?tior]ew(2019^3^195上午
OrdvringinHji>ehS*t:[af?B.MXVMD,hfaufa?,awfawAj
OrderofelenentinLinkedHashSet:[afaE.asfweDhfasf&e,aefaeA]
Ordercfobj?ctsinTr?eS?t:(??fiwA,af?BrasfweD.hfasf40]
Map(映射)接口存取元素時(shí)采用鍵對(duì)值(key-value)的方式來(lái)存
取。key唯一的,value不唯一可以重復(fù),一個(gè)value有一個(gè)
key對(duì)映。
publicstaticvoidmain(String[]args){
第26頁(yè)共130頁(yè)
//HashMap采用鍵值對(duì)存儲(chǔ)數(shù)據(jù),采用put。方法存放數(shù)據(jù)
Map<IntegerJString>map=newHashMap<Integer,String)。;
map.put(l?“中國(guó)“);
map.put(2?“小日本”);
map.put(3,“美國(guó)佬”);
//foreach遍歷方法》普遍使用,通過(guò)對(duì)hey唯一的特性,進(jìn)行huy遍歷
for(Integerkey:map.keySet()){
System.out.println(key+"+map.get(key));
}
System.out.printin("----------------------------------------------------------------");
//因?yàn)閔ey唯一,key重復(fù)時(shí)會(huì)自動(dòng)覆蓋value之前存儲(chǔ)的數(shù)據(jù)
map.put(3?”英國(guó)佬”);
for(Integerkeyl:map.keySet()){
System.out.println(keyl+"+map.get(keyl));
}
System.out.printin("----------------------------------------------------------------");
//Map.Entry遍歷hey和value,同樣是foreach方法,推薦容量大的時(shí)候
使用
for(Map.Entry<IntegerJString>entry:map.entrySet()){
System.out.printin(entry.getKey()++
entry.getValue());
}
)
.*;,??J>L.OComoU漢
*terminated>Trw&?t1(JwaAppfic?t>on)(2019^3Qi99下*2:16901)
List(列表)接口用特定的索引來(lái)存取,可以有重復(fù)元素。
publicstaticvoidmain(String[]args){
List<Integer>arraylist=newArrayList<>();
arraylist.add(3);
arraylist.add(22);
arraylist.add(31);
arraylist.add(345);
arraylist.add(63);
arraylist.add(3);
第27頁(yè)共130頁(yè)
//ArrayLtst底層是一個(gè)數(shù)組,輸出時(shí)需要于oreach遍歷,查詢(xún)快,增刪慢,線(xiàn)層安全)
效率高
System.out.print("arraylist:
for(Integertest:arraylist){
System.out.print(test+"");
System.out.printin();//換行
//Vector底層是一個(gè)實(shí)現(xiàn)自動(dòng)增長(zhǎng)的對(duì)象數(shù)組,元素會(huì)自動(dòng)添加到數(shù)組中,查詢(xún)快,增
刪慢,線(xiàn)層安全,效率低
Vector<Integer>vector=newVector<>();
vector.add(3);
vector.add(5);
vector.add(25);
vector.add(51);
vector.add(5);
System.out.printin("vector:"+vector);
//LtnhedLtst底層是一個(gè)鏈表,查詢(xún)慢,增刪快,線(xiàn)層不安全,效率高
LinkedList<Integer>linkedList=newLinkedList<>();
linkedList.add(30);
linkedList.add(30);
linkedList.add(34);
linkedList.add(55);
System.out.printIn("linkedlist"+linkedList);
?:QComote
?t?rrntna<?d?IrwSHl(JavaApplicalicn]^0^201\bir(2019*3月19m上學(xué)11:11:19)
&rraylifii:32231345633
vector:[X5,25,51,5]
linkedlifit[30.30,34,55]
Set、list者B是collection接口的子接口,map接口和
collection接口是同等級(jí)的。
36.詳細(xì)介紹java集合框架結(jié)構(gòu)?
list接口的實(shí)現(xiàn)類(lèi):
ArrayList:基于數(shù)組實(shí)現(xiàn),非線(xiàn)性安全、效率高、增刪慢、查找
快。
Vector:基于數(shù)組實(shí)現(xiàn),線(xiàn)性安全、效率低、增刪慢、查找慢。
LinkedList:基于鏈表實(shí)現(xiàn),鏈表內(nèi)存是散列的、增刪快、查找慢。
Map接口的實(shí)現(xiàn)類(lèi):
第28頁(yè)共130頁(yè)
HashMap:基于hash表的map接口實(shí)現(xiàn),非線(xiàn)性安全、高效、支持
null值和null健。
HashTable:線(xiàn)程安全、低效、不支持null值和null健。
sortedMap接口:TreeMap能夠把它保留德記錄根據(jù)健排序,默認(rèn)升
序排序。
Set接口的實(shí)現(xiàn)類(lèi):
HashSet:底層是由HashMap實(shí)現(xiàn),不允許集合中有重復(fù)的值,使
用該方式時(shí)需要重寫(xiě)equals。和hashCode。方法。
第29頁(yè)共130頁(yè)
排列有序,可重復(fù)
底層使用數(shù)坦
ArrayList速磨快,塔珊侵,getter便Gseneq)方法快
送程不安叁倒
當(dāng)零星不婚時(shí),ArrayList是當(dāng)前容量*15*1
排列有序,可里晝
底層使用數(shù)阻
Vector速,章快.塔珊奧
線(xiàn)朝全融低
當(dāng)容量慢氏
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年濰坊市諸城市事業(yè)單位招聘教師筆試真題
- 業(yè)界分享2025年執(zhí)業(yè)醫(yī)師考試試題及答案
- 行政管理與經(jīng)濟(jì)法相輔相成試題及答案
- 2025年執(zhí)業(yè)醫(yī)師考試集體備考方法試題及答案
- 挑戰(zhàn)自我2025主管護(hù)師考試試題及答案
- 2024年贛南醫(yī)科大學(xué)第一附屬醫(yī)院招聘筆試真題
- 尋找最佳復(fù)習(xí)方法的2025年自考行政管理試題及答案
- 護(hù)理溝通與人際關(guān)系2025年試題及答案
- 護(hù)士執(zhí)業(yè)資格考試的典籍試題與答案選集
- 2025年執(zhí)業(yè)藥師考試藥物分析技術(shù)試題及答案
- 套管修復(fù)(2010大賽)
- 酒店工作安全培訓(xùn)(共60張課件)
- 初中七年級(jí)主題班會(huì):團(tuán)結(jié)合作團(tuán)結(jié)就是力量(課件)
- 浙江省杭州市2023年中考英語(yǔ)真題(含答案)
- 銷(xiāo)售團(tuán)隊(duì)競(jìng)爭(zhēng)PK機(jī)制方案
- GB/T 44672-2024體外診斷醫(yī)療器械建立校準(zhǔn)品和人體樣品賦值計(jì)量溯源性的國(guó)際一致化方案的要求
- 歷史人物范仲淹介紹
- 四年級(jí)下冊(cè)數(shù)學(xué)方程題100道及答案
- Know Before You Go:趣談“一帶一路”國(guó)家智慧樹(shù)知到期末考試答案章節(jié)答案2024年貴州理工學(xué)院
- 排水暗渠施工方案
- 小升初奧數(shù)競(jìng)賽題100例附答案(完整版)
評(píng)論
0/150
提交評(píng)論