1、重載和重寫的區別
01、定義不同:重載是在同一個類中定義多個方法名相同但參數列表不同的方法;重寫是子類對父類中同名同參數列表的方法進行重新實現
02、范圍不同:重載發生在同一個類中,重寫發生在子類和父類中
03、參數要求不同:重載要求方法參數的類型、個數或者順序不同,重寫要求方法參數列表必須相同
04、返回值要求不同:重載對返回值類型沒有強制要求;重寫要求返回值類型相同或為父類返回值類型的子類
05、訪問修飾符要求不同:重載對訪問修飾符無特殊限制,重寫時子類的訪問修飾符不能比父類的更加嚴格
06、異常處理要求不同:重載對拋出的異常無特殊限制;重寫時子類不能拋出比父類更多或者更寬泛的異常
07、調用方式不同:重載根據調用時的參數列表確定調用哪個方法;重載根據對象的實際類型確定調用子類還是父類的方法。
2、接口與抽象類的區別
? ? ? ? 01、定義不同:接口是方法聲明的集合,不包含方法實現;抽象類是包含抽象方法和具體方法的類
? ? ? ? 02、繼承方式不同:類可以實現多個接口;類只能繼承一個抽象類
? ? ? ? 03、方法實現不同:接口中的方法默認是抽象的;抽象類可以包含抽象方法和具體實現方法
? ? ? ? 04、成員變量不同:接口中成員變量默認是public static final,抽象類可以有各種訪問修飾符的成員變量
? ? ? ? 05、構造造方法不同:接口沒有構造方法;抽象類有構造方法
? ? ? ? 06、設計計目的不同:接口用于定義行為規范,實現多態;抽象類用于代碼復用和繼承體系構建
? ? ? ? 07、訪問問修飾符不同:接口中的訪問修飾符大多是public,抽象類中可以有多種訪問修飾符
? ? ? ? 08、多繼承支持:接口支持多實現;抽象類只能單繼承
3、簡述Java異常體系
異常是程序運行過程中發生的非預期事件,Java中所有的異常都繼承Throwable類:
- Error:由JVM生成并拋出,代表嚴重的系統級錯誤,程序通常無法處理,應避免捕獲
- Exception:程序可以處理的異常:
01、受檢異常:編譯期必須處理的異常,要么用try-catch捕獲,要么用throws聲明拋出
02、非受檢異常:繼承自RuntimeException的異常,編譯期不強制處理,通常由程序邏輯錯誤導致
4、訪問修飾符public、private、protected、以及不寫(default默認)時的區別
01、public修飾的內容可以在本類,本包,其他包子類以及其他包中訪問
02、protected修飾的內容可以在本類,本包,其他包子類中訪問
03、default修飾的內容可以在本類以及本包中訪問
04、private修飾的內容只能在本類中訪問
5、簡述java 128陷阱
Java128陷阱是指:java對-128到127范圍內的Integer對象進行緩存,自動裝箱時會復用緩存對象,此時用“==”比較會返回“true”,但超出這個范圍,每次裝箱都會創建新對象,用“==”比較會返回“false”,因此比較Integer對象值應使用equals()方法。
6、獲取Class對象的三種方式以及如何忽略安全訪問修飾符的安全檢查
01、通過類名.class:直接使用類名.class的方式獲取,這種方式在編譯時就確定了類型,無需創建對象實例
02、通過對象實例.getClass():通過已有對象的getClass()方法獲取,適用于已創建對象的情況
03、通過Class.forName():通過全類名字符串動態加載類并獲取Class對象,需要處理ClassNotFoundException。
7、簡述從泛型類派生子類的兩種情況
01、子類仍是泛型類:子類繼承泛型父類時,保留泛型參數,自身也聲明為泛型類。此時需要指明父類的泛型參數。
02、子類為具體類:子類繼承泛型父類時,明確指明父類的泛型參數為具體類型,自身不再是泛型類。
注意:子類不能直接繼承未指定泛型參數的原始泛型父類,這會丟失泛型類型信息,編譯器會提示警告。