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