JDK和JRE的區別?
- JRE是Java運行環境(Java Runtime Environment),包含了JVM和Java核心類庫
- JDK是Java開發工具包(Java Developer's? Kit),包含了JRE和Java常見的開發工具
?==與equals的區別?
- ==可以用來比較基本數據類型,也可以用來比較引用數據類型
- 當==用來比較基本數據類型時比較的是數值的大小
- 當==用來比較引用數據類型時比較的是地址
- equals只能用來比較引用數據類型:因為equals是Object的一個方法,要調用方法必須通過對象調用,而對象就是引用數據類型
- 默認的時候比較的是對象的地址值
- 可以通過重寫Object類中的equals方法,來實現比較對象的屬性
- ==可以用來比較基本數據類型,也可以用來比較引用數據類型
如果兩個對象的hashCode值一樣的時,用equals方法比較的時候也是true嗎?
不是
hashCode和equals都是Object類中的兩個獨立的方法,這兩個方法都可以通過子類重寫,來實現子類自定義的邏輯
final的作用
- 修飾變量上---叫常量,該常量必須初始化,且初始化后不能被修改
- 修飾方法上---該方法不能被重寫
- 修飾類上---該類不能被繼承?
?String是基本數據類型嗎?
- String是引用數據類型
- 基本數據類型有8種:int, short,byte,long, float, double,boolean, char
?對字符串操作的有哪些類,有什么區別?
- 對字符串操作的有String,StringBuffer, StringBuilder
- 區別:
- String不可變,StringBuffer和StringBuilder可變
- StringBuffer線程安全,效率低StringBuilder線程不安全,效率高
?String str="abc"與 String str = new String("abc")的 定義方法一樣嗎?
- 不一樣?
- String str="abc"是創建一個字符串對象到常量池里。
- String str = new String("abc")是創建了兩個對象,"abc"字符串在常量池里,new String("")又創建一個對象
?普通for和增強for的區別
- 作用與應用場景
- 普通for:可以用在所有需要重復執行的某些語句的場景
- 增強型for:只能用在數組和Collection集合
- 使用區別
- 如果使用普通for循環,需要用下標,可以修改數組的元素。
- 如果使用增強型for,不需要使用下標,但是不能修改數組的元素
- 另外,增強for循環只是一種語法糖,增強for循環遍歷數組時編譯器仍然會將對應代碼轉換為普通 for循環;增強for循環遍歷Collection集合時編譯器會將對應代碼轉換為Iterator迭代器遍歷集合的代 碼。
- 作用與應用場景
方法的重載(Overload)與重寫(Override)的區別
- 方法的位置 :
- 重載:在同一個類中,或者在父子類中
- 重寫:在子類中---->只有子類才能實現重寫
- 權限修飾符
- 重載:跟權限修飾符無關
- 重寫:
- private修飾的方法不能重寫。
- 重寫的權限修飾符要>=被重寫方法的權限修飾符
- 其他修飾符
- 重載:無關
- 重寫:final和static修飾的方法也不能被重寫
- 返回值類型
- 重載:無關
- 重寫:
- 基本數據類型和void必須相同
- 引用數據類型:重寫的方法的返回值類型<=被重寫的方法的返回值類型
- 方法名:
- 重載:必須相同
- 重寫:必須相同
- 形參列表
- 重載:必須不同
- 重寫:必須相同
- throws異常列表
- 重載:無關
- 重寫:
- 被重寫的方法如果沒有throws異常,重寫的方法也不能throws異常
- 如果被重寫的方法throws異常,重寫的方法throws異常類型必須<=被重寫的方法
- 什么時候確認調用哪個方法
- 重載:在編譯時期根據形參的不同確定調用的是哪一個方法
- 重寫:在運行時期確定調用哪一個方法,這依賴于對象的實際類型
- 方法的位置 :
抽象類和接口的區別?
- 抽象類:
- 繼承限制:單繼承
- 成員限制:
- 抽象類可以有多種類型的成員變量,包括靜態變量和實例變量
- 抽象類中可以有構造方法,這有助于子類的初始化
- 抽象類可以包含代碼塊(靜態代碼塊/非靜態代碼塊)
- 抽象類可以包含抽象方法和普通方法
- 接口:
- 多實現:一個類可以實現多個接口
- 成員:
- 接口的成員變量默認是public,static,final的即常量
- 接口不允許有構造方法和代碼塊
- 接口的方法默認是public的。jdk9之后運行有private的方法
- jdk8之前接口的方法都默認是抽象的,jdk8之后可以包含默認方法和靜態方法
- 抽象類:
?談談你對面向對象三大特性的理解
- 面向對象的三大特性分別是:封裝,繼承和多態
封裝:
將對象的屬性和行為隱藏到類的內部只能通過方法的調用來訪問屬性。提高了代碼的安全性和穩定性同時也提高了代碼的可維護性
繼承:
子類繼承父類可以復用父類的屬性和方法,也可以之際擴展父類的行為。減少了代碼的重復。
多態: - 同一個對象以不同的角度(類型)展現不同的行為方法。使用父類或接口類型的引用指向子類對象,然后調用方法時,會根據對象的實際類型來決定調用哪個方法的實現。這樣可以編寫出更加靈活和可擴展的代碼。
- 面向對象的三大特性分別是:封裝,繼承和多態