JavaSE知識(shí)點(diǎn)總結(jié)(個(gè)人整理)_第1頁(yè)
JavaSE知識(shí)點(diǎn)總結(jié)(個(gè)人整理)_第2頁(yè)
JavaSE知識(shí)點(diǎn)總結(jié)(個(gè)人整理)_第3頁(yè)
JavaSE知識(shí)點(diǎn)總結(jié)(個(gè)人整理)_第4頁(yè)
JavaSE知識(shí)點(diǎn)總結(jié)(個(gè)人整理)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2. 面向?qū)ο蟮睦斫饷嫦驅(qū)ο笫荍ava的基本特征,是軟件開發(fā)過(guò)程使用的基于面向過(guò)程一種思維方式,將功能封裝進(jìn)對(duì)象,強(qiáng)調(diào)具備功能的對(duì)象和調(diào)用結(jié)果,不關(guān)注具體實(shí)現(xiàn)這個(gè)功能的過(guò)程。面向?qū)ο筇攸c(diǎn):是一種更符合人們思考習(xí)慣的思想,可以將復(fù)雜的事情簡(jiǎn)單化,將程序由執(zhí)行者轉(zhuǎn)換成為指揮者。面向?qū)ο筇匦裕悍庋b,繼承,多態(tài)封裝:封裝是把數(shù)據(jù)和方法包裝進(jìn)類中,隱藏其具體實(shí)現(xiàn)細(xì)節(jié),對(duì)外提供公共訪問方法。封裝的結(jié)果是一個(gè)同時(shí)帶有特征和行為的數(shù)據(jù)類型。(安全性,復(fù)用性)繼承:當(dāng)一個(gè)類的屬性與行為均與現(xiàn)有類相似,屬于現(xiàn)有類的一種時(shí),這一個(gè)類可以定義為現(xiàn)有類的子類?;蛘撸?dāng)多個(gè)類具有相同的屬性和行為,我們可以抽取出共性的內(nèi)容

2、定義父類,再創(chuàng)建相似的”兄弟”類時(shí)只要繼承父類即可。當(dāng)子類繼承父類后,擁有了父類非私有的方法并可以直接調(diào)用。如果認(rèn)為父類提供的方法不夠強(qiáng)大,子類可以按照子類自身的邏輯重寫繼承過(guò)來(lái)的父類方法。(復(fù)用性,可維護(hù)性,多態(tài)前提)多態(tài):繼承是多態(tài)的前提,多態(tài)是指一種事物具有多種形態(tài),比如貓具有貓類的形態(tài),也具有動(dòng)物的形態(tài),多態(tài)的具體表現(xiàn)是父類引用指向子類對(duì)象,父類的引用也可以接收自己子類的對(duì)象。(可維護(hù)性,擴(kuò)展性)面試:跟我談?wù)勈裁词敲嫦驅(qū)ο? 面向?qū)ο笫腔诿嫦蜻^(guò)程的2 什么是面向過(guò)程什么是面向?qū)ο? 面向?qū)ο蟮奶攸c(diǎn)3. 面向?qū)ο蠛兔嫦蜻^(guò)程的區(qū)別面向過(guò)程強(qiáng)調(diào)的是功能行為,分析解決問題所需的步驟,以函數(shù)

3、為基礎(chǔ),完成各種步驟的操作和實(shí)現(xiàn)。面向?qū)ο笫腔诿嫦蜻^(guò)程的,將功能封裝成對(duì)象,強(qiáng)調(diào)的是具備了這些功能的對(duì)象,讓對(duì)象去調(diào)用方法來(lái)解決問題。面向?qū)ο笈e例4. abstract與哪些關(guān)鍵字不能共存為什么private:私有的方法是不可見的,無(wú)法被重寫 final:被final修飾的方法是最終方法,無(wú)法被重寫 static:被static修飾的方法,要隨類加載到方法區(qū),由于抽象方法沒有方法體所以不能加載5. static的特點(diǎn)(1) 隨著類的加載而加載;優(yōu)先于對(duì)象存在;被所有對(duì)象所共享;可以直接被類名所調(diào)用。(2) 靜態(tài)方法只能訪問靜態(tài),非靜態(tài)方法既可以訪問靜態(tài)也可訪問非靜態(tài)(3) 靜態(tài)方法中不可以定

4、義this、super關(guān)鍵字,因?yàn)殪o態(tài)優(yōu)先于對(duì)象存在,this和super所代表的對(duì)象還不存在。6. 類與類、類與接口、接口與接口的關(guān)系繼承(單繼承,多層繼承,object),實(shí)現(xiàn)(多實(shí)現(xiàn)),繼承(多繼承)7. final、finally、finalize的區(qū)別final:可以修飾類、方法和變量,被final修飾的類無(wú)法被繼承,方法無(wú)法被重寫,變量為常量只能賦值一次finally:異常處理,和try、catch結(jié)合使用,可以添加也可以不添加,用于執(zhí)行一些必須執(zhí)行的代碼,如釋放資源等f(wàn)inalize:Object類中的方法,其中定義了對(duì)象要被垃圾收集器回收之前要做的相關(guān)的清理工作8. 什么是多態(tài)

5、,多態(tài)的好處和弊端多態(tài)可以理解為事物存在的多種體現(xiàn)形態(tài)。父類的引用指向了自己的子類對(duì)象;父類的引用也可以接收自己子類的對(duì)象。提高了程序的可維護(hù)性和擴(kuò)展性弊端:父類的引用只能訪問父類中有的成員而無(wú)法調(diào)用子類中特有的方法10. wait()和sleep()的區(qū)別(1)所在的類不同:wait是Object類中的方法,sleep是Thread類中的方法 (2)sleep方法沒有釋放同步鎖,而wait方法釋放了同步鎖,使得其他線程可以使用。(3)sleep()必須指定時(shí)間,wait()可以指定也可以不指定時(shí)間。(4)wait,notify和notifyAll只能在同步方法或者同步代碼塊里面使用,而sle

6、ep可以在任何地方使用(5)sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常16. 對(duì)匿名內(nèi)部類的理解匿名內(nèi)部類就是沒有名字的內(nèi)部類,是內(nèi)部類的簡(jiǎn)化形式。一般只使用一次的時(shí)候使用匿名內(nèi)部類,匿名內(nèi)部類本質(zhì)上是一個(gè)匿名子類對(duì)象。匿名內(nèi)部類的使用前提:內(nèi)部類繼承一個(gè)類或?qū)崿F(xiàn)接口。匿名內(nèi)部類包括兩個(gè)步驟:創(chuàng)建一個(gè)類或者接口的子類,即刻創(chuàng)建該子類的對(duì)象。簡(jiǎn)化書寫。17. IO體系字節(jié)流InputStream/OutputStream |-FileInputStream/FileOutputStream:文件字節(jié)流,用于文件的讀寫操作 |-BufferedInputSt

7、ream/BufferedOutputStream:加緩沖區(qū)的字節(jié)流,用于提高效率 字符流Reader/Writer |-FileReader/FileWriter:文件字符流,用于文本文件的讀寫操作 |-BufferedReader/BufferedWrite:加緩沖區(qū)的字符流,用于提高效率 轉(zhuǎn)換流InputStreamReader/OutputStreamWriter:是字節(jié)流和字符流之間的橋梁18. 集合體系|-Vector:功能同ArrayList類似,底層也是數(shù)組,線程是同步的,所以是安全的,效率較低,數(shù)據(jù)增長(zhǎng)是50%的增長(zhǎng)。|-Set:元素是無(wú)序的,元素不允許重復(fù),底層用到了Map

8、 |-HashSet:底層hash表,存儲(chǔ)的對(duì)象最好復(fù)寫hashCode和equals方法,|-TreeSet:底層自平衡的二叉樹,存儲(chǔ)的對(duì)象具備比較性,有兩種方法:自然排序、比較器排序|-Collection |-List:元素是有序的,元素允許重復(fù),因?yàn)樵摷象w系都具有索引 |-ArrayList:底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢速度快,增刪操作較慢,線程不同步|-LinkedList:底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢效率較低,增刪操作快,線程不同步,數(shù)據(jù)增長(zhǎng)是100%的增長(zhǎng)。 保證元素不會(huì)重復(fù) |-Map:數(shù)據(jù)是以鍵值對(duì)的形式存儲(chǔ)的,有的元素存在映射關(guān)系就可以使用該集合,|-HashMap:允許有nul

9、l鍵或值,線程不同步 ,鍵是唯一的|-TreeMap:元素可排序|-HashTable:類似HashMap,不允許有null鍵或值,線程同步,元素不允許重復(fù)21. 局部變量和成員變量區(qū)別成員變量定義位置:類中,整個(gè)類中均可以訪問,通常用private修飾。內(nèi)存:成員變量隨著對(duì)象的建立而建立,存在于對(duì)象所在的堆內(nèi)存中。默認(rèn)值:成員變量有默認(rèn)值。回收:隨著對(duì)象的回收而回收。局部變量定義位置:定義在局部范圍,如方法內(nèi),語(yǔ)句內(nèi)等。內(nèi)存:局部變量存在于棧內(nèi)存中。默認(rèn)值:沒有默認(rèn)值?;厥眨弘S著作用域結(jié)束而回收,通常為語(yǔ)句或方法范圍。22. 同步函數(shù)與同步代碼塊的區(qū)別 同步代碼塊使用的鎖可以是任意對(duì)象。同步

10、函數(shù)使用的鎖是this,靜態(tài)同步函數(shù)的鎖是該類的字節(jié)碼文件對(duì)象。在一個(gè)類中只有一個(gè)同步的話,可以使用同步函數(shù)。如果有多同步,必須使用同步代碼塊,來(lái)確定不同的鎖。所以同步代碼塊相對(duì)靈活一些。23. 數(shù)組和集合的區(qū)別容器長(zhǎng)度:集合長(zhǎng)度可變,數(shù)組長(zhǎng)度固定存儲(chǔ)內(nèi)容類型:集合存儲(chǔ)引用數(shù)據(jù)類型,數(shù)組存儲(chǔ)任意類型是否可存儲(chǔ)不同類型數(shù)據(jù):數(shù)組只能存儲(chǔ)同種數(shù)據(jù)類型的元素,集合可以存儲(chǔ)不同類型(鍵值)的元素。有序可重復(fù):數(shù)組是有序可重復(fù)的集合中有些是有序可重復(fù)的如list,有些是無(wú)序不可重復(fù)的如set,map24. StringBuffer和StringBuilder的區(qū)別StringBuffer是同步的,所以線

11、程安全,但是效率低,StringBuilder是不同步的,所以線程不安全,但是效率高。StringBuilder要比StringBuffer快。單線程的程序使用StringBuilder比較好,多線程的情況下可以自己加鎖,也可以 直接使用StringBuffer。25. String和StringBuffer區(qū)別String對(duì)象一經(jīng)創(chuàng)建就不會(huì)發(fā)生變化了,即便是賦新值也不是在原對(duì)象的基礎(chǔ)上改變,而是創(chuàng)建一個(gè)新的字符串對(duì)象,將引用指向這個(gè)新的對(duì)象,會(huì)造成空間的浪費(fèi),效率較低。StringBuffer只創(chuàng)建一個(gè)對(duì)象,是在同一個(gè)實(shí)例的基礎(chǔ)之上追加,效率更高,當(dāng)需要用到String的時(shí)候toString

12、就可以了第二部分 知識(shí)點(diǎn)26. 說(shuō)明Java中String str=null與String str=""的區(qū)別?String str = null 表示聲明了一個(gè)String對(duì)象的引用str,但是沒有為其分配內(nèi)存空間。 String str = "" 表示創(chuàng)建了一個(gè)長(zhǎng)度等于0的空字符串,并在內(nèi)存中為其分配了內(nèi)存空間。String str = new String("tw"); str在內(nèi)存中有兩個(gè)對(duì)象,1.堆內(nèi)存有一個(gè) new Sting2.常量池中有一個(gè)字符串。27. 使用運(yùn)算符"= ="和方法equals()

13、進(jìn)行比較對(duì)象的區(qū)別?使用"= ="算符比較基本數(shù)據(jù)類型時(shí),比較的是值相等;使用"="算符比較對(duì)象時(shí),比較的是內(nèi)存地址值使用equals()方法 比較對(duì)象時(shí),比較的是對(duì)象的內(nèi)容,與地址無(wú)關(guān),如果沒有重寫equals()方法就直接調(diào)用的是Object的equals()方法。28. 接口和抽象類有何區(qū)別?(1)成員特點(diǎn):構(gòu)造方法:接口沒有構(gòu)造方法;抽象類有構(gòu)造方法。成員變量:接口中只有常量;抽象類中可以是常量,也可以是變量。成員方法:接口中只有抽象方法;抽象類中既有抽象方法,也有非抽象方法。(2)關(guān)系特點(diǎn):類與類:類與類之間只有單繼承,可以有多層繼承。類與接口

14、:類與接口之間是實(shí)現(xiàn)關(guān)系,可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn)。 接口與接口:接口與接口之間是繼承關(guān)系,可以單繼承,也可以多繼承。(3)設(shè)計(jì)理念:接口對(duì)應(yīng)的設(shè)計(jì)模式是簡(jiǎn)單工廠設(shè)計(jì)模式,抽象類對(duì)象的設(shè)計(jì)模式是模板設(shè)計(jì)模式。(5)必須實(shí)現(xiàn)抽象類或接口的所有抽象方法才可以實(shí)例化。黑馬程序員入學(xué)面試題32. 不借用第三方變量,互換兩個(gè)變量。n=nm;m=nm;/(nm)m一個(gè)數(shù)異或另一個(gè)數(shù)兩次,還是得原來(lái)那個(gè)數(shù) n=nm/n(nm)33. 傳統(tǒng)for和增強(qiáng)for有什么區(qū)別呢?1. 增強(qiáng)for對(duì)集合進(jìn)行遍歷,集合不能為空。只能獲取集合元素,但是不能對(duì)集合進(jìn)行操作。增強(qiáng)for有一個(gè)局限性,必須要有被遍歷的目標(biāo)。2.

15、迭代器除了遍歷,還可以進(jìn)行remove集合中元素的動(dòng)作。如果是用ListIterator,還可以在遍歷過(guò)程中進(jìn)行增刪改查的動(dòng)作。建議在遍歷數(shù)組的時(shí)候,還是希望是用傳統(tǒng)for。因?yàn)閭鹘y(tǒng)for可以定義角標(biāo)。1.增強(qiáng)for循環(huán)和iterator遍歷的效果是一樣的,也就說(shuō)增強(qiáng)for循環(huán)的內(nèi)部也就是調(diào)用iteratoer實(shí)現(xiàn)的,但是增強(qiáng)for循環(huán)有些缺點(diǎn),例如不能在增強(qiáng)循環(huán)里動(dòng)態(tài)的刪除集合內(nèi)容。不能獲取下標(biāo)等。2.ArrayList由于使用數(shù)組實(shí)現(xiàn),因此下標(biāo)明確,最好使用普通循環(huán)。34. Collection和Colections的區(qū)別是什么?Collection是一個(gè)單列集合的頂層接口,它是List、

16、Set、Queue等接口的父接口。在這個(gè)接口中,定義了集合類中通用的方法。Collections是針對(duì)集合操作的工具類,有對(duì)集合進(jìn)行排序和二分查找等靜態(tài)方法。37. 線程的狀態(tài):線程的五種狀態(tài):1)新建(new) 用new語(yǔ)句創(chuàng)建的線程對(duì)處于新建狀態(tài),此時(shí)它和其它Java對(duì)象一樣,僅僅在Heap中被分配了內(nèi)存。當(dāng)一個(gè)線程處于新建狀態(tài)時(shí),它僅僅是一個(gè)空的線程對(duì)象,系統(tǒng)不為它分配資源。 Thread t = new Thread(new Runner();2)就緒(Runnable) 程序通過(guò)線程對(duì)象調(diào)用啟動(dòng)方法start()后,系統(tǒng)會(huì)為這個(gè)線程分配它運(yùn)行時(shí)所需的除處理器之外的所有系統(tǒng)資源。這時(shí),

17、它處在隨時(shí)可以運(yùn)行的狀態(tài),在隨后的任意時(shí)刻,只要它獲得處理器即會(huì)進(jìn)入運(yùn)行狀態(tài)。 t.start()3)運(yùn)行(Running) 處于這個(gè)狀態(tài)的線程占用CPU,執(zhí)行程序代碼。在并發(fā)環(huán)境中,如果計(jì)算機(jī)只有一個(gè)CPU,那么任何時(shí)刻只會(huì)有一個(gè)線程處于這個(gè)狀態(tài)。如果計(jì)算機(jī)中有多個(gè)CPU,那么同一時(shí)刻可以讓幾個(gè)線程占用不同的CPU,使它們都處于運(yùn)行狀態(tài),只有處于就緒狀態(tài)的線程才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)。4)阻塞(Blocked) 阻塞狀態(tài)是指線程因?yàn)槟承┰蚍艞塁PU,暫時(shí)停止運(yùn)行。當(dāng)線程處于阻塞狀態(tài)時(shí),Java虛擬機(jī)不會(huì)給線程分配CPU,直到線程重新進(jìn)入就緒狀態(tài),它才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)。阻塞狀態(tài)可分為以下3種:

18、位于對(duì)象等待池中的阻塞狀態(tài)(Blocked in object's wait pool):當(dāng)線程處于運(yùn)行狀態(tài)時(shí),如果執(zhí)行了某個(gè)對(duì)象的wait()方法,Java虛擬機(jī)就會(huì)把線程放到這個(gè)對(duì)象的等待池中。位于對(duì)象鎖池中的阻塞狀態(tài)(Blocked in object's lock pool):當(dāng)線程處于運(yùn)行狀態(tài),試圖獲得某個(gè)對(duì)象的同步鎖時(shí),如果該對(duì)象的同步鎖已經(jīng)被其他線程占用,Java虛擬機(jī)就會(huì)把這個(gè)線程放到這個(gè)對(duì)象的鎖池中。其他阻塞狀態(tài)(Otherwise Blocked):當(dāng)前線程執(zhí)行了sleep()方法,或者調(diào)用了其他線程的join()方法,或者發(fā)出了I/O請(qǐng)求時(shí),就會(huì)進(jìn)入這個(gè)狀

19、態(tài)。當(dāng)一個(gè)線程執(zhí)行System.out.println()或者System.in.read()方法時(shí)是,就會(huì)發(fā)出一個(gè)I/O請(qǐng)求,該線程放棄CPU,進(jìn)入阻塞狀態(tài),直到I/O處理完畢,該線程才會(huì)恢復(fù)執(zhí)行。5)死亡(Dead) 當(dāng)線程退出run()方法時(shí),就進(jìn)入死亡狀態(tài),該線程結(jié)束生命周期。線程有可能是正常執(zhí)行完run()方法而退出,也有可能是遇到異常而退出。不管線程是正常結(jié)束還是異常結(jié)束,都不會(huì)對(duì)其他線程造成影響。40. 集合集合名稱閱讀技巧:JDK1.2出現(xiàn)的集合框架中常用的子類對(duì)象前綴名是結(jié)構(gòu)名,后綴名是體系名。ArrayList:數(shù)組結(jié)構(gòu),看到Array就知道查詢速度快,看到List就知道可

20、以又重復(fù)元素,可以增刪改查L(zhǎng)inkedList:鏈表結(jié)構(gòu),增刪快HashSet:哈希結(jié)構(gòu),查詢速度更快,不保證有序,不可以重復(fù),必須覆蓋hashCode和equals方法LinkedHashSet:鏈表加哈希結(jié)構(gòu),可以實(shí)現(xiàn)有序TreeSet:二叉樹結(jié)構(gòu),可以排序。有兩種方法:1.自然排序compable,2.比較器 comparator Java提供了只包含一個(gè)compareTo()方法的Comparable接口。這個(gè)方法可以個(gè)給兩個(gè)對(duì)象排序。具體來(lái)說(shuō),它返回負(fù)數(shù),0,正數(shù)來(lái)表明輸入對(duì)象小于,等于,大于已經(jīng)存在的對(duì)象。Java提供了包含compare()和equals()兩個(gè)方法的Compar

21、ator接口。compare()方法用來(lái)給兩個(gè)輸入?yún)?shù)排序,返回負(fù)數(shù),0,正數(shù)表明第一個(gè)參數(shù)是小于,等于,大于第二個(gè)參數(shù)。equals()方法需要一個(gè)對(duì)象作為參數(shù),它用來(lái)決定輸入?yún)?shù)是否和comparator相等。只有當(dāng)輸入?yún)?shù)也是一個(gè)comparator并且和當(dāng)前comparator的排序結(jié)果是相同的時(shí)候,這個(gè)方法才返回true.ArrayList 和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,允許直接按序號(hào)索引元素. 但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized 方法(線程安

22、全),通常性能上較ArrayList 差,Vector屬于遺留容器,現(xiàn)在已經(jīng)不推薦使用,LinkedList 使用雙向鏈表實(shí)現(xiàn)存儲(chǔ)(將內(nèi)存中零散的內(nèi)存單元通過(guò)附加的引用關(guān)聯(lián)起來(lái),形成一個(gè)可以按序號(hào)索引的線性結(jié)構(gòu),這種鏈?zhǔn)酱鎯?chǔ)方式與數(shù)組的連續(xù)存儲(chǔ)方式相比,其實(shí)對(duì)內(nèi)存的利用率更高),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。由于ArrayList和LinkedListed都是非線程安全的,如果需要多個(gè)線程操作同一個(gè)容器,可以通過(guò)工具類Collections中的synchronizedList方法將其轉(zhuǎn)換成線程安全的容器后再使用(這其實(shí)是裝潢模

23、式最好的例子,將已有對(duì)象傳入另一個(gè)類的構(gòu)造器中創(chuàng)建新的對(duì)象來(lái)增加新功能)。Map集合Map(k,v) k:此映射所維護(hù)的鍵的類型 v:映射值的類型Map集合:雙例集合,一次存一對(duì),稱為鍵值對(duì)。要保證鍵的唯一性。Map集合沒有迭代器,必須先將map集合轉(zhuǎn)成set集合,在使用迭代器,就可以取出結(jié)合中的元素;或者使用map集合特有的entrySet方法,也可以取出map集合中雖有元素。 Map集合常見子類:1.HashTable:底層數(shù)據(jù)結(jié)構(gòu)是哈希表結(jié)構(gòu),線程同步的,不允許null鍵,null值;2.HashMap:哈希表結(jié)構(gòu),不同步,允許null鍵,null值3.TreeMap:二叉樹結(jié)構(gòu),不同步

24、,可以對(duì)map集合眾多鍵進(jìn)行排序。41. 為什么需要配置path,什么時(shí)候需要答:path路徑:是操作系統(tǒng)的環(huán)境變量,目的是希望在任意目錄下都能執(zhí)行該命令操作起來(lái)更加方便快捷;classpath是給類提供路徑:想在其他目錄下執(zhí)行java程序時(shí)需要配置classpath路徑。42. IO流輸入流:InputStream 輸出流:OutputStream字節(jié)輸入流:FileInputStream 字節(jié)輸出流:FileOutoutStream字節(jié)輸入流緩沖區(qū):BufferedInputStream 字節(jié)輸出流緩沖區(qū):BufferedOutputStream轉(zhuǎn)換流:InputStreamReader

25、字符輸出流:OutputStreamWriter字符流:FileReader FileWriter字符輸入流緩沖區(qū):BufferedReader 字符輸出流緩沖區(qū):BufferedWriter49. list, set, map是否繼承自collection接口? list,set是 map不是。50. arraylist和vector的區(qū)別。一.同步性:vector是線程安全的,也就是說(shuō)是同步的,而arraylist是線程序不安全的,不是同步的二.數(shù)據(jù)增長(zhǎng):當(dāng)需要增長(zhǎng)時(shí),vector默認(rèn)增長(zhǎng)為原來(lái)一培,而arraylist卻是原來(lái)的一半51. hashmap和hashtable的區(qū)別一.歷史

26、原因:hashtable是基于陳舊的dictionary類的,hashmap是java 1.2引進(jìn)的map接口的一個(gè)實(shí)現(xiàn)二.同步性:hashtable是線程安全的,也就是說(shuō)是同步的,而hashmap是線程序不安全的,不是同步的三.值:只有hashmap可以讓你將空值作為一個(gè)表的條目的key或value7:給成員變量賦值的方式有幾種?分別怎么實(shí)現(xiàn)?答:A:給靜態(tài)的成員變量賦值(1)可以通過(guò)類中的方法給成員變量賦值(私有成員變量的也可以) public void setXXX().(2)可以通過(guò)構(gòu)造方法給成員變量賦值(私有成員變量的也可以)public XXX().(3)可以通過(guò)代碼塊完成成員變量

27、的初始化值(私有成員變量的也可以)xxx = .;(4)可以通過(guò)類名.成員變量賦值 B:給非靜態(tài)的成員變量賦值(1)可以通過(guò)類的方法賦值 public void setXXX().(2)可以通過(guò)對(duì)象調(diào)用(3)可以通過(guò)代碼塊完成成員變量的初始化值xxx = .; 如何理解字符串一旦初始化就不可以被改變。不可以被改變說(shuō)的是常量池中的值,并不是引用s(s是可以重新被賦值的)2、String s1 = new String("abc");和String s2 = "abc";兩者的區(qū)別第一種方式:第一種方式在內(nèi)存中存在兩個(gè)"abc"字符串,一

28、個(gè)是在常量池中,一個(gè)是在堆內(nèi)存當(dāng)中.第二種方式:在內(nèi)存中只存在一個(gè)"abc"在常量池中.異常:異常是在程序運(yùn)行過(guò)程中,發(fā)生的各種不正常狀況。Java中引入異常,以異常類Exception對(duì)這些不正常狀況進(jìn)行封裝,通過(guò)異常處理機(jī)制對(duì)程序運(yùn)行時(shí)可能發(fā)生的各種問題進(jìn)行處理。Throwable頂層類,包括error錯(cuò)誤,Exception異常,異常分為運(yùn)行時(shí)異常和編譯時(shí)異常處理方式:throws聲明拋出,try catch捕捉處理,finally一定會(huì)被執(zhí)行(釋放資源)運(yùn)行時(shí)異常,運(yùn)行時(shí)可能會(huì)報(bào)錯(cuò),可以不處理。編譯時(shí)異常,編譯時(shí)無(wú)法編譯通過(guò),必須處理。throw和throws:th

29、rows表示拋出異常類,由方法調(diào)用者使用;throws用在方法聲明后面,跟的是異常類名;throws后可以跟多個(gè)異常類名,用逗號(hào)隔開。throw用在方法體內(nèi),跟的是異常對(duì)象名;表示拋出異常,由方法體內(nèi)的語(yǔ)句處理。只能拋出一個(gè)異常對(duì)象名;異常注意事項(xiàng):子類拋出的異常 比父類拋出的異常小。如果父類拋出了多個(gè)異常,子類覆蓋父類方法時(shí),只能拋出相同的異常或者是他的子集父類方法沒有拋出異常,子類覆蓋父類該方法時(shí)也不可拋出異常。此時(shí)子類產(chǎn)生該異常,只能捕獲處理,不能聲明拋出泛型:(提前使用未知數(shù)據(jù)類型)什么是泛型:泛型的本質(zhì)是參數(shù)化類型,也就是說(shuō)所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。這種參數(shù)類型可以用在類、接

30、口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。泛型替代了Object來(lái)代表任意類型,在編譯時(shí)會(huì)擦除。泛型類:定義:類名后<變量> 使用:創(chuàng)建對(duì)象時(shí)確定類型泛型方法:定義:方法返回值前<變量> 使用:調(diào)用方法時(shí)確定類型泛型接口:定義:接口名后<變量> 使用:1、定義類時(shí)確定類型,2、始終不確定類型,直到創(chuàng)建對(duì)象時(shí)確定類型泛型優(yōu)點(diǎn):提高程序的安全性,將運(yùn)行期問題轉(zhuǎn)移到了編譯期,省去了類型強(qiáng)轉(zhuǎn)的麻煩,優(yōu)化了程序設(shè)計(jì)線程:每個(gè)運(yùn)行的程序都是一個(gè)進(jìn)程,在一個(gè)進(jìn)程中還可以有多個(gè)執(zhí)行單元同時(shí)運(yùn)行,這些執(zhí)行單元均是程序執(zhí)行的一條條執(zhí)行路徑,這些執(zhí)行路徑就是線程,如果

31、希望程序中實(shí)現(xiàn)多段程序代碼同時(shí)運(yùn)行,則需要多線程技術(shù)。是由cpu高速切換執(zhí)行,java使用的是搶占式調(diào)度模型。1.直接繼承Thread類重寫run方法,2. 線程與線程執(zhí)行目標(biāo)分離方式,實(shí)現(xiàn)runnable接口,重寫run方法,相比較而言,2避免了1方法單繼承的局限性,且能夠用多個(gè)線程操作同一份共享數(shù)據(jù),把線程和線程數(shù)據(jù)有效的分離開,也體現(xiàn)java面向?qū)ο笏枷搿4送?,還有線程池技術(shù),提交任務(wù),開啟線程。五種狀態(tài):新建狀態(tài):new,可運(yùn)行狀態(tài):start方法啟動(dòng),運(yùn)行狀態(tài):獲得cpu死亡狀態(tài):run方法執(zhí)行完,Exception,error等待或阻塞狀態(tài):wait-notify,join-調(diào)用j

32、ion的線程終止,sleep-時(shí)間到,io阻塞方法如read-阻塞方法返回,等待同步鎖-獲得同步鎖線程安全問題:當(dāng)多個(gè)線程共同操作一份數(shù)據(jù)時(shí),當(dāng)線程1操作數(shù)據(jù)到一半時(shí),線程2搶走CPU,會(huì)導(dǎo)致”1使用的數(shù)據(jù)已經(jīng)被其他數(shù)據(jù)修改為1不想要的數(shù)據(jù)了”。Java中使用synchronized關(guān)鍵字來(lái)解決,將一個(gè)完整動(dòng)作使用synchronized包裹。即線程A中操作數(shù)據(jù)的代碼與線程B中操作數(shù)據(jù)的代碼均使用synchronized包裹,并使用相同的鎖對(duì)象。這時(shí)線程B會(huì)等待線程A中synchronized包裹的代碼執(zhí)行完畢后再執(zhí)行,此時(shí)線程A已經(jīng)操作完了代碼,反之線程A也會(huì)等待線程B。線程執(zhí)行目標(biāo)類成員位

33、置定義多個(gè)線程要共享的同一份數(shù)據(jù)。線程執(zhí)行目標(biāo)類成員位置定義多個(gè)線程要共享的同一把鎖對(duì)象。鎖可以是任意類型的對(duì)象,只要多個(gè)線程使用同一把鎖就可以使多個(gè)線程操作相同數(shù)據(jù)時(shí)同步。死鎖:兩個(gè)線程在運(yùn)行時(shí)都在等待對(duì)方的鎖,造成了程序的停滯,稱為死鎖。基本數(shù)據(jù)類型包裝類:基本類型是內(nèi)置的數(shù)據(jù)類型,為了使基本數(shù)據(jù)類型代表的數(shù)據(jù)使用起來(lái)更方便,統(tǒng)一面向?qū)ο蟮乃枷耄琂ava設(shè)計(jì)了基本類型包裝類,即每一種基本類型都對(duì)應(yīng)一種引用類型的包裝數(shù)據(jù)類型。除去整型與字符型,其他基本數(shù)據(jù)類型將首字母大寫即為包裝數(shù)據(jù)類型。自動(dòng)裝箱拆箱:jdk1.5之后裝箱就是把基礎(chǔ)類型封裝成一個(gè)類。比如把int封裝成Integer,這時(shí)你就

34、不能把他當(dāng)成一個(gè)數(shù)了,而是一個(gè)類了,對(duì)他的操作就需要用它的方法了。拆箱就是把類轉(zhuǎn)換成基礎(chǔ)類型。比如你算個(gè)加法什么的是不能用類的,就得把它轉(zhuǎn)換成基本類型迭代器:使用迭代器完成集合遍歷的過(guò)程是反復(fù)獲得集合中元素的過(guò)程,通常我們將這個(gè)反復(fù)獲取的過(guò)程叫做迭代。增強(qiáng)for循環(huán)底層也是通過(guò)迭代器實(shí)現(xiàn)的。迭代過(guò)程中不能對(duì)集合元素進(jìn)行增刪動(dòng)作,否則會(huì)發(fā)生并發(fā)修改異常(運(yùn)行時(shí))遞歸:遞歸就是“在一個(gè)方法內(nèi)可以再次調(diào)用自身”遞歸調(diào)用必須要在某個(gè)條件下結(jié)束,否則就是死遞歸。遞歸調(diào)用的層次不能太多,否則會(huì)堆棧溢出。構(gòu)造方法不能遞歸調(diào)用。四種訪問權(quán)限:Private:類訪問級(jí)別默認(rèn):包訪問級(jí)別Protected:子類訪

35、問級(jí)別Public:公共訪問級(jí)別IO:IO是output和input,是Java中實(shí)現(xiàn)程序與設(shè)備之間數(shù)據(jù)交互動(dòng)作的途徑,java中將這種數(shù)據(jù)傳輸抽象為流。字節(jié)流:頂層父類:outputstream,inputstreamFileoutputstream,F(xiàn)ileinputstream ,bufferedoutputstream,bufferedinputstream字符流:頂層父類:Writer,readerFileWriter,F(xiàn)ileReader,BufferedWriter,BufferedReader轉(zhuǎn)換流:OutputStreamWriter,InputStreamReader字節(jié)流

36、和字符流區(qū)別:字節(jié)流以字節(jié)為單位傳輸數(shù)據(jù),傳輸?shù)氖?101數(shù)據(jù),所以可以處理任何數(shù)據(jù),字符流是為了方便處理文本數(shù)據(jù),通過(guò)字符碼表實(shí)現(xiàn)字符與二進(jìn)制數(shù)的轉(zhuǎn)換。常見的字符碼表:ASCII,Unicode,UTF-8,GBK(兼容GB2312并提供更多中文),GB2312匿名內(nèi)部類:匿名內(nèi)部類是創(chuàng)建某個(gè)類型子類對(duì)象的快捷方式。匿名內(nèi)部類有兩個(gè)步驟:臨時(shí)定義一個(gè)類型的子類定義后即刻創(chuàng)建剛剛定義的這個(gè)類的對(duì)象匿名內(nèi)部類就是沒有名字的內(nèi)部類,是內(nèi)部類的簡(jiǎn)化形式。一般只使用一次的時(shí)候使用匿名內(nèi)部類,匿名內(nèi)部類本質(zhì)上是一個(gè)匿名子類對(duì)象。匿名內(nèi)部類的使用前提:內(nèi)部類繼承一個(gè)類或?qū)崿F(xiàn)接口。匿名內(nèi)部類包括兩個(gè)步驟:創(chuàng)

37、建一個(gè)類或者接口的子類,即刻創(chuàng)建該子類的對(duì)象。簡(jiǎn)化書寫。網(wǎng)絡(luò)通信協(xié)議:在計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行連接和通信的規(guī)則。對(duì)數(shù)據(jù)的傳輸格式,傳輸速率,傳輸步驟等有統(tǒng)一的規(guī)定,通信雙方需要同時(shí)遵守才能完成數(shù)據(jù)交換。IP地址:網(wǎng)絡(luò)通信中計(jì)算機(jī)設(shè)備的唯一標(biāo)識(shí) 端口:用于標(biāo)識(shí)計(jì)算機(jī)設(shè)備中接收數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用程序具體是哪一個(gè),有效端口065535,01024為系統(tǒng)端口及保留端口TCP與UDP:UDP:面向無(wú)連接,是不可靠協(xié)議,不能保證數(shù)據(jù)完整性,不安全。每個(gè)數(shù)據(jù)報(bào)限制在64k以內(nèi),發(fā)送數(shù)據(jù)較少,速度快,視頻。TCP:面向連接的通信協(xié)議,通過(guò)三次握手建立連接通路,是可靠協(xié)議,保證數(shù)據(jù)安全,可進(jìn)行大量的數(shù)據(jù)傳輸,速度慢,效率

38、較低。OSI和TCP/IP模型:OSI:應(yīng)用層,表示層,會(huì)話層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層TCP/IP:應(yīng)用層傳輸層,網(wǎng)際層,主機(jī)至網(wǎng)絡(luò)層網(wǎng)絡(luò)編程:在Internet上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件,同時(shí)提供幾種服務(wù)。每種服務(wù)都打開一個(gè)Socket,并綁定到一個(gè)端口上,不同的端口對(duì)應(yīng)于不同的服務(wù)。Socket就是為網(wǎng)絡(luò)編程提供的一種機(jī)制,又叫套接字編程。特點(diǎn):網(wǎng)絡(luò)編程三要素:IP(網(wǎng)絡(luò)通信中計(jì)算機(jī)設(shè)備的唯一標(biāo)識(shí)),端口(用于表示計(jì)算機(jī)中接收網(wǎng)絡(luò)數(shù)據(jù)的應(yīng)用程序是哪一個(gè)),通信協(xié)議(客戶端和服務(wù)器之間連接和通信的規(guī)則,通常使用TCP/IP,三次握手建立連接)通信的兩端都有Socket。網(wǎng)絡(luò)通

39、信其實(shí)就是Socket間的通信。數(shù)據(jù)在兩個(gè)Socket間通過(guò)IO傳輸。Socket編程一般使用TCP與UDP兩種協(xié)議,我們主要使用TCP:TCP協(xié)議通過(guò)三次握手協(xié)議將客戶端與服務(wù)器端連接,兩端使用各自的Socket對(duì)象。Socket對(duì)象中包含了IO流,供數(shù)據(jù)傳輸。數(shù)據(jù)庫(kù):1.數(shù)據(jù)庫(kù)就是存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù),其本質(zhì)是一個(gè)文件系統(tǒng),數(shù)據(jù)按照特定的格式將數(shù)據(jù)存儲(chǔ)起來(lái),用戶可以對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行增加,修改,刪除及查詢操作。比如MySQL,Oracle,SQLServer,DB2等等。2.數(shù)據(jù)庫(kù)是真正存儲(chǔ)數(shù)據(jù)的地方。數(shù)據(jù)庫(kù)中以表為組織單位存儲(chǔ)數(shù)據(jù),類似于java中的類。根據(jù)表字段鎖規(guī)定的數(shù)據(jù)類型,可以向其中

40、添加數(shù)據(jù),表中的每條數(shù)據(jù)類似于對(duì)象。SQL語(yǔ)句是用于我們和數(shù)據(jù)庫(kù)進(jìn)行交互的命令,完成增刪改查等等。數(shù)據(jù)定義語(yǔ)言: DDL,用來(lái)定義數(shù)據(jù)庫(kù)對(duì)象:數(shù)據(jù)庫(kù),表,列等,例如創(chuàng)建、刪除、修改:數(shù)據(jù)庫(kù)、表結(jié)構(gòu)等;數(shù)據(jù)操作語(yǔ)言: DML,用來(lái)對(duì)數(shù)據(jù)庫(kù)中表的記錄進(jìn)行更新,例如:增、刪、改表記錄;數(shù)據(jù)控制語(yǔ)言:DCL,用來(lái)定義數(shù)據(jù)庫(kù)的訪問權(quán)限和安全級(jí)別,及創(chuàng)建用戶;數(shù)據(jù)查詢語(yǔ)言:簡(jiǎn)稱DQL,用來(lái)查詢數(shù)據(jù)庫(kù)中表的記錄。具體命令查文檔JDBC用于完成在Java代碼中操作數(shù)據(jù)庫(kù)。作用:連接數(shù)據(jù)庫(kù);向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句;操作SQL語(yǔ)句的返回結(jié)果JDBC連接數(shù)據(jù)庫(kù)過(guò)程:導(dǎo)入mysql的驅(qū)動(dòng)程序jar包通過(guò)DriverM

41、anager注冊(cè)驅(qū)動(dòng)通過(guò)DriverManager獲取連接對(duì)象Connection通過(guò)Connection獲取一個(gè)可以向數(shù)據(jù)庫(kù)發(fā)送sql語(yǔ)句的對(duì)象Statement通過(guò)Statement對(duì)象執(zhí)行sql語(yǔ)句(select) 得到一個(gè)結(jié)果集ResultSet遍歷結(jié)果集ResultSet,得到數(shù)據(jù)表中的數(shù)據(jù)釋放資源JDBC優(yōu)點(diǎn):Java語(yǔ)言和JDBC結(jié)合起來(lái)使程序員不必為不同的平臺(tái)編寫不同的應(yīng)用程序,只須寫一遍程序就可以讓它在任何平臺(tái)上運(yùn)行。接口和抽象類:抽象類即不能創(chuàng)建實(shí)例的類,僅用來(lái)描述一種類型應(yīng)該具備的基本特征與功能。抽象方法即只有功能聲明,沒有功能主體實(shí)現(xiàn)的方法。包含抽象方法的類一定是抽象類

42、。接口是功能的集合,是比抽象類更為抽象的類,同樣是一種數(shù)據(jù)類型,定義的是一種規(guī)則。必須實(shí)現(xiàn)抽象類或接口的所有抽象方法才可以實(shí)例化。區(qū)別:(1)成員特點(diǎn):構(gòu)造方法:接口沒有構(gòu)造方法;抽象類有構(gòu)造方法。成員變量:接口中只有常量;抽象類中可以是常量,也可以是變量。成員方法:接口中只有抽象方法;抽象類中既有抽象方法,也有非抽象方法。(2)關(guān)系特點(diǎn):類與類:類與類之間只有單繼承,可以有多層繼承。類與接口:類與接口之間是實(shí)現(xiàn)關(guān)系,可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn)。 接口與接口:接口與接口之間是繼承關(guān)系,可以單繼承,也可以多繼承。抽象類被繼承體現(xiàn)的是所屬關(guān)系is a關(guān)系,抽象類中定義的是繼承體系中的共性功能;接口被

43、實(shí)現(xiàn)體現(xiàn)的是like a 關(guān)系,接口中定義的是繼承體系中的擴(kuò)展功能。接口特點(diǎn):Java支持繼承一個(gè)類同時(shí)實(shí)現(xiàn)多個(gè)接口。接口可以繼承接口。類可以在繼承一個(gè)類的同時(shí),實(shí)現(xiàn)多個(gè)接口。接口與父類的功能可以重復(fù),均代表要具備某種功能。接口中的成員是固定的:變量修飾符為:public static final(static與final明天講解)方法修飾符為:public abstract(所以重寫接口方法時(shí),必須使用public)方法重寫與方法重載:所謂方法重載是指在一個(gè)類中,多個(gè)方法的方法名相同,但是參數(shù)列表不同。參數(shù)列表不同指的是參數(shù)個(gè)數(shù)、參數(shù)類型或者參數(shù)的順序不同。構(gòu)造方法就是重載形式存在的。重載注

44、意事項(xiàng):方法名相同,參數(shù)列表不同(參數(shù)個(gè)數(shù)、參數(shù)類型或者參數(shù)的順序不同),與返回值無(wú)關(guān)。當(dāng)子類繼承父類后,擁有了父類非私有的方法并可以直接調(diào)用。如果認(rèn)為父類提供的方法不夠強(qiáng)大,子類可以按照子類自身的邏輯重新定義繼承過(guò)來(lái)的父類方法,這個(gè)重新定義一個(gè)方法的過(guò)程叫做方法重寫。重寫的結(jié)果是子類的方法便將父類的方法覆蓋。一般情況下,繼承就是為了方法重寫,不重寫子類和父類一樣就沒有意義了。Java中方法重寫規(guī)則:訪問權(quán)限相同或子類方法權(quán)限更大方法名稱和參數(shù)列表必須相同返回值為基本類型時(shí)必須相同返回值為引用類型時(shí)相同或子類小構(gòu)造方法的特點(diǎn)?構(gòu)造方法的注意事項(xiàng)?構(gòu)造方法的特點(diǎn):1.方法名與類名相同2.沒有返回

45、值類型,連void都沒有構(gòu)造方法注意事項(xiàng):如果我們沒有給出構(gòu)造方法,系統(tǒng)將自動(dòng)提供一個(gè)無(wú)參構(gòu)造方法如果我們給出了構(gòu)造方法,系統(tǒng)將不再提供默認(rèn)的無(wú)參構(gòu)造方法。注意:這個(gè)時(shí)候,如果我們還想使用無(wú)參數(shù)構(gòu)造方法,就必須自己給出。建議永遠(yuǎn)自己給出無(wú)參數(shù)構(gòu)造方法。This和super:this:訪問本類對(duì)象成員變量調(diào)用本類普通方法本類構(gòu)造方法調(diào)用本類其他構(gòu)造super:訪問本類對(duì)象當(dāng)中的父類成員變量調(diào)用本類對(duì)象當(dāng)中的父類普通方法本類構(gòu)造方法調(diào)用父類構(gòu)造注意:this與super在調(diào)用構(gòu)造方法時(shí),均必須在第一行,只能調(diào)用其中的一個(gè)。0x2254 new Chinese()thisString address

46、Chinese c = 0x2254棧內(nèi)存堆內(nèi)存super String nameint agenull(Angela)0(18)null(北京)3. 對(duì)象內(nèi)存圖For ,while,do while:循環(huán)變量作用域 for循環(huán)的循環(huán)變量其作用域僅限于循環(huán)體內(nèi),而while循環(huán)的循環(huán)變量作用域不局限在循環(huán)體內(nèi)。 2.循環(huán)條件 for循環(huán)的循環(huán)條件為空是是死循環(huán),而while循環(huán)的循環(huán)條件不能為空。3.dowhile無(wú)論條件是否滿足,循環(huán)體至少執(zhí)行一次。Break,continue,return:break : (1).結(jié)束當(dāng)前整個(gè)循環(huán),執(zhí)行當(dāng)前循環(huán)下邊的語(yǔ)句。忽略循環(huán)體中任何其它語(yǔ)句和循環(huán)條件

47、測(cè)試。 (2).只能跳出一層循環(huán),如果你的循環(huán)是嵌套循環(huán),那么你需要按照你嵌套的層次,逐步使用break來(lái)跳出。逐層判斷,逐步跳出 (3).break在循環(huán)體內(nèi),強(qiáng)行結(jié)束循環(huán)的執(zhí)行,也就是結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立,直接轉(zhuǎn)向循環(huán)語(yǔ)句下面的語(yǔ)句。 (4).當(dāng)break出現(xiàn)在循環(huán)體中的switch語(yǔ)句體內(nèi)時(shí),其作用只是跳出該switch語(yǔ)句體。 總的來(lái)說(shuō):就近原則,結(jié)束當(dāng)前的整個(gè)循環(huán)。 2. continue: 終止本次循環(huán)的執(zhí)行,即跳過(guò)當(dāng)前這次循環(huán)中continue語(yǔ)句后尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次循環(huán)條件的判斷。3.return:結(jié)束方法,帶參返回一個(gè)值給調(diào)用者。類與對(duì)

48、象的關(guān)系:具有相同特征(屬性)和行為(功能)的一類事物的抽象。,體現(xiàn)的是現(xiàn)實(shí)事物的映射關(guān)系,對(duì)象是類的具體實(shí)例。類的使用是創(chuàng)建對(duì)象,一個(gè)類可以有多個(gè)對(duì)象,可以說(shuō)創(chuàng)建對(duì)象是類最主要的使用方式。String,StringBuffer,StringBuilder:String是不可變的字符序列,String對(duì)象一經(jīng)創(chuàng)建就不會(huì)發(fā)生變化了,即便是賦新值也不是在原對(duì)象的基礎(chǔ)上改變,而是創(chuàng)建一個(gè)新的字符串對(duì)象,將引用指向這個(gè)新的對(duì)象,會(huì)造成空間的浪費(fèi),效率較低。StringBuffer只創(chuàng)建一個(gè)對(duì)象,是在同一個(gè)實(shí)例的基礎(chǔ)之上追加,效率更高,當(dāng)需要用到String的時(shí)候toString就可以了StringBu

49、ffer和StringBuilder的區(qū)別StringBuffer是同步的,所以線程安全,但是效率低,StringBuilder是不同步的,所以線程不安全,但是效率高。StringBuilder要比StringBuffer快。單線程的程序使用StringBuilder比較好,多線程的情況下可以自己加鎖,也可以 直接使用StringBuffer。什么時(shí)候使用字符串緩沖區(qū):數(shù)據(jù)多,個(gè)數(shù)無(wú)所謂確定,類型無(wú)所謂確定,只要最后都轉(zhuǎn)變成字符串,就用字符串緩沖區(qū)。對(duì)于三者使用的總結(jié):效率:StringBuilder > StringBuffer > StringString中的對(duì)象是不可變的,也可以理解為常量,線程安全,效率低;Stri

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論