一. new String("a") + new String("b") 會(huì)創(chuàng)建幾個(gè)對(duì)象?
對(duì)象1:new StringBuilder()
對(duì)象2:new String("a")
對(duì)象3:常量池中的"a"
對(duì)象4:new String("b")
對(duì)象5:常量池中的"b"
深入剖析:StringBuilder中的toString():
對(duì)象6:new String("ab")
強(qiáng)調(diào)一下,toString()的調(diào)用,在字符串常量池中,沒(méi)有生成"ab"
二. 普通類和抽象類有哪些區(qū)別?
抽象類不能被實(shí)例化;
抽象類可以有抽象方法,只需申明,無(wú)須實(shí)現(xiàn);
有抽象方法的類一定是抽象類;
抽象類的子類必須實(shí)現(xiàn)抽象類中的所有抽象方法,否則子類仍然是抽象類;
抽象方法不能聲明為靜態(tài)、不能被static、final修飾。
三. 什么是反射?
所謂反射,是java在運(yùn)行時(shí)進(jìn)行自我觀察的能力,通過(guò)class、constructor、field、method四個(gè)方法獲取一個(gè)類的各個(gè)組成部分。
在Java運(yùn)行時(shí)環(huán)境中,對(duì)任意一個(gè)類,可以知道類有哪些屬性和方法。這種動(dòng)態(tài)獲取類的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能來(lái)自于反射機(jī)制。
四. 什么是Java序列化?什么情況下需要序列化?
序列化就是一種用來(lái)處理對(duì)象流的機(jī)制。將對(duì)象的內(nèi)容流化,將流化后的對(duì)象傳輸于網(wǎng)絡(luò)之間。
序列化是通過(guò)實(shí)現(xiàn)serializable接口,該接口沒(méi)有需要實(shí)現(xiàn)的方法,implement Serializable只是為了標(biāo)注該對(duì)象是可被序列化的,使用一個(gè)輸出流(FileOutputStream)來(lái)構(gòu)造一個(gè)ObjectOutputStream對(duì)象,接著使用ObjectOutputStream對(duì)象的writeObejct(Object object)方法就可以將參數(shù)的obj對(duì)象到磁盤(pán),需要恢復(fù)的時(shí)候使用輸入流。
序列化是將對(duì)象轉(zhuǎn)換為容易傳輸?shù)母袷降倪^(guò)程。
例如,可以序列化一個(gè)對(duì)象,然后通過(guò)HTTP通過(guò)Internet在客戶端和服務(wù)器之間傳輸該對(duì)象。在另一端,反序列化將從流中心構(gòu)造成對(duì)象。
一般程序在運(yùn)行時(shí),產(chǎn)生對(duì)象,這些對(duì)象隨著程序的停止而消失,但我們想將某些對(duì)象保存下來(lái),這時(shí),我們就可以通過(guò)序列化將對(duì)象保存在磁盤(pán),需要使用的時(shí)候通過(guò)反序列化獲取到。
對(duì)象序列化的最主要目的就是傳遞和保存對(duì)象,保存對(duì)象的完整性和可傳遞性。
譬如通過(guò)網(wǎng)絡(luò)傳輸或者把一個(gè)對(duì)象保存成本地一個(gè)文件的時(shí)候,需要使用序列化。
更多關(guān)于“Java培訓(xùn)”的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的好程序員班,高品質(zhì)課程助力你實(shí)現(xiàn)java程序員夢(mèng)想。