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