1. JAVA面向對象編程三大特徵
- 封裝:將一個對象的屬性私有化。提供一些可以被外界訪問的屬性方法,如果屬性不想被外界訪問,可以不被提供方法給外界訪問。
- 繼承:使用已存在類的定義作爲基礎建立新類的技術,新類必須繼承父類,可以增加新的功能和數據。
(1) 子類擁有父類對象所有的屬性和方法,父類中的私有屬性和方法子類無法訪問,只是擁有;
(2) 子類可以擁有自己的屬性和方法;
(3) 子類可以用自己的方式實現父類的方法。 - 多態:程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時並不確定,在程序運行期間才確定。
兩種方式:1.繼承——多個子類對同一方法的重寫;2.接口——實現接口並覆蓋接口中同一方法。
- 繼承:使用已存在類的定義作爲基礎建立新類的技術,新類必須繼承父類,可以增加新的功能和數據。
2. String/StringBuffer/StringBuilder的區別
String | StringBuffer | StringBuilder | |
---|---|---|---|
可變性 | 不可變 | 繼承自AbstractStringBuilder類 | 繼承自AbstractStringBuilder類 |
線性安全性 | 對象不可變,線性安全 | 加了同步鎖或對調用的方法加了同步鎖,線程安全 | 非線性安全 |
性能 | 每次改變都會生成一個新的String對象 | 對StringBuffer對象本身進行操作 | 可以獲得10%~15%左右的性能提升 |
總結 | 操作少量數據 | 多線程 | 單線程 |
3. 自動裝箱與拆箱
- 裝箱:將基本類型用它們對應的引用類型包裝起來;
- 拆箱:將包裝類型轉換爲基本數據類型。
4. 在靜態方法內調用一個非靜態成員爲什麼是非法的?
由於靜態方法可以不通過對象進行調用,因此在靜態方法裏不能調用其他非靜態變量,也不可以訪問非靜態變量成員。
5. 在JAVA中定義一個不做事且沒有參數的構造方法的作用
如果Java程序在執行子類的構造方法之前,如果沒有用super()來調用父類特定的構造方法,則會調用父類的沒有參數的構造方法。如果沒有這個方法,則會在編譯時發生錯誤。
6. import java和javax的區別
最開始javax是擴展的JavaAPI,隨着時間的推移,現在javax已經成爲標準API的一部分。
java和javax沒有本質的區別。
7. 接口和抽象類的區別
接口 | 抽象類 | |
---|---|---|
方法 | 默認public | 可以有非抽象方法 |
變量 | 只有static和final變量 | 可以有其他變量 |
一個類 | 可以實現多個接口,接口本身可以通過extends關鍵字擴展多個接口 | 只能實現一個抽象類 |
修飾符 | 默認public | public、protected、default修飾符 |
設計層面 | 對行爲的抽象,是一種行爲的規範 | 抽象是對類的抽象,是一種模板設計 |
8. 成員變量和局部變量的區別
成員變量 | 局部變量 | |
---|---|---|
語法 | 1. 屬於類;2. 可以被修飾符所修飾;3. 兩者均能被final修飾 | 1. 在方法中定義的變量或者是方法的參數; 2. 不能被訪問控制修飾符以及static所修飾 |
存儲方式 | 1. 如果使用static修飾,屬於類; 2. 沒有使用static,屬於實例 | 對象存在於堆內存,局部變量也存在於堆內存 |
生存時間 | 隨着對象創建而存在 | 隨着方法的調用自動消失 |
沒有賦初值 | 自動以類型的默認值賦值(final除外) | 不會自動賦值 |
19. 創建對象用什麼運算符?
使用new運算符創建對象實例(對象實例在堆內存中)。
20. 對象實體和對象引用的不同?
對象引用指向對象實例,可以指向0或1個對象。
一個對象可以有n個引用指向它。
21. 什麼是方法的返回值?返回值在類的方法裏的作用是什麼?
方法的返回值是指獲取到某個方法體中的代碼執行後產生的後果。
作用:接收結果,使其可以進行其他的操作。