一. 舉例說(shuō)明什么情況下會(huì)更傾向于使用抽象類(lèi)而不是接口?
接口和抽象類(lèi)都遵循”面向接口而不是實(shí)現(xiàn)編碼”設(shè)計(jì)原則,它可以增加代碼的靈活性,可以適應(yīng)不斷變化的需求。下面有幾個(gè)點(diǎn)可以幫助你回答這個(gè)問(wèn)題:在 Java 中,你只能繼承一個(gè)類(lèi),但可以實(shí)現(xiàn)多個(gè)接口。所以一旦你繼承了一個(gè)類(lèi),你就失去了繼承其他類(lèi)的機(jī)會(huì)了。
接口通常被用來(lái)表示附屬描述或行為如: Runnable 、 Clonable 、 Serializable 等等,因此當(dāng)你使用抽象類(lèi)來(lái)表示行為時(shí),你的類(lèi)就不能同時(shí)是 Runnable 和 Clonable( 注:這里的意思是指如果把 Runnable 等實(shí)現(xiàn)為抽象類(lèi)的情況 ) ,因?yàn)樵?Java 中你不能繼承兩個(gè)類(lèi),但當(dāng)你使用接口時(shí),你的類(lèi)就可以同時(shí)擁有多個(gè)不同的行為。
在一些對(duì)時(shí)間要求比較高的應(yīng)用中,傾向于使用抽象類(lèi),它會(huì)比接口稍快一點(diǎn)。如果希望把一系列行為都規(guī)范在類(lèi)繼承層次內(nèi),并且可以更好地在同一個(gè)地方進(jìn)行編碼,那么抽象類(lèi)是一個(gè)更好的選擇。有時(shí),接口和抽象類(lèi)可以一起使用,接口中定義函數(shù),而在抽象類(lèi)中定義默認(rèn)的實(shí)現(xiàn)。
二. 實(shí)例化創(chuàng)建對(duì)象有哪幾種方式
1. 實(shí)例化對(duì)象的方式有如下幾種:
new
clone()
通過(guò)反射機(jī)制創(chuàng)建
序列化反序列化
2. 反射示例代碼
3. 序列化示例代碼:
三. byte類(lèi)型127+1等于多少
byte的范圍是-128~127。
字節(jié)長(zhǎng)度為8位,最左邊的是符號(hào)位,而127的二進(jìn)制為01111111,所以執(zhí)行+1操作時(shí),01111111變?yōu)?0000000。
大家知道,計(jì)算機(jī)中存儲(chǔ)負(fù)數(shù),存的是補(bǔ)碼的興衰。左邊第一位為符號(hào)位。
那么負(fù)數(shù)的補(bǔ)碼轉(zhuǎn)換成十進(jìn)制如下:
一個(gè)數(shù)如果為正,則它的原碼、反碼、補(bǔ)碼相同;一個(gè)正數(shù)的補(bǔ)碼,將其轉(zhuǎn)化為十進(jìn)制,可以直接轉(zhuǎn)換。
已知一個(gè)負(fù)數(shù)的補(bǔ)碼,將其轉(zhuǎn)換為十進(jìn)制數(shù),步驟如下:
1先對(duì)各位取反;
2將其轉(zhuǎn)換為十進(jìn)制數(shù);
3加上負(fù)號(hào),再減去1;
4例如10000000,最高位是1,是負(fù)數(shù),①對(duì)各位取反得01111111,轉(zhuǎn)換為十進(jìn)制就是127,加上負(fù)號(hào)得-127,再減去1得-128;
四. float 和 double 的區(qū)別是什么?
1. 內(nèi)存中占有的字節(jié)數(shù)不同
單精度浮點(diǎn)數(shù)在內(nèi)存中占有4個(gè)字節(jié);
雙精度浮點(diǎn)數(shù)在內(nèi)存中占有8個(gè)字節(jié);
2. 有效數(shù)字位數(shù)不同
單精度浮點(diǎn)數(shù)有效數(shù)字8位;
雙精度浮點(diǎn)數(shù)有效數(shù)字16位;
3. 數(shù)值取值范圍不同
單精度浮點(diǎn)數(shù)的表示范圍:-3.40E+38~3.40E+38
雙精度浮點(diǎn)數(shù)的表示范圍:-1.79E+308~-1.79E+308
4. 在程序中處理速度不同
一般來(lái)說(shuō),CPU處理單精度浮點(diǎn)數(shù)的速度比雙精度浮點(diǎn)數(shù)的速度快。如果不聲明,默認(rèn)小數(shù)是double類(lèi)型,如果想用float,要進(jìn)行強(qiáng)轉(zhuǎn)。
5. 舉例
float f = 1.3;會(huì)編譯報(bào)錯(cuò),正確的寫(xiě)法是float f = (float)1.3;或者float a = 1.3f;(f或F都可以不區(qū)分大小寫(xiě))。
6. 注意
float是八位有效數(shù)字,第七位會(huì)四舍五入。
7. 相關(guān)面試題
7.1 Java中3*0.1==0.3會(huì)返回什么?true還是false?
答:返回false,因?yàn)楦↑c(diǎn)數(shù)不能完全精確的表示出來(lái),一般會(huì)損失精度;
7.2 Java中float f = 3.4;是否正確?
答:不正確。因?yàn)?.4是雙精度浮點(diǎn)數(shù),將雙精度賦給單精度屬于向下轉(zhuǎn)型,會(huì)造成精度損失,因此需要強(qiáng)制類(lèi)型轉(zhuǎn)換 float=(float)3.4; 或者寫(xiě)成 float f = 3.4f。
更多關(guān)于“Java培訓(xùn)”的問(wèn)題,歡迎咨詢(xún)千鋒教育在線(xiàn)名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專(zhuān)業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的好程序員班,高品質(zhì)課程助力你實(shí)現(xiàn)java程序員夢(mèng)想。