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