java面試必須掌握的技術點--基礎篇--(一)

基本功

面向對象的特徵
1.抽象

定義:抽象是將一類對象的共同特徵總結出來構造類的過程,包括數據抽象和行爲抽象兩方面,抽象只關注對象的哪些屬性和行爲,並不關注這此行爲的細節是什麼

1.1 研究事物的靜態特徵(屬性)

1.2 研究事物的動態特徵(方法/函數)

1.3 形成結果(類,class)

1.4 類和對象相互轉變(new)

2.封裝
定義:通常認爲封裝是把數據和操作數據的方法綁定起來,對數據的訪問只能通過已定義的接口.面向對象的本質就是將現實世界描繪成一系列完全自治,封閉的對象,可以說,封裝就是隱藏一切可隱藏的東西,只向外界提供最簡單的編程接口。封裝給對象提供了隱藏內部特性和行爲的能力,對象提供一些能這被其它對象訪問的方法來改變它內部的數據。
2.1.提供構造方法(有了構造方法才能通過new去構建一個對象 1.構造方法必須和類名稱一樣2.構造方法不能有返回值)

2.2 靜態塊(做的類的初始化的工作,執行在new之前)

靜態塊用於放創建對象前要做的一系列事情,比如說一個學生,首先要被孕育,然後出生…等等

2.3 控制訪問


具體情況具體分析

3.繼承(關鍵字:extends)
目的:對父類和方法的複用
繼承是從已有類得到繼承信息創建新類的過程,繼承讓變化中的軟件系統有了一定的延續性,同時繼承也是封裝程序中可變因素的重要手段.子類繼承父類屬性(靜態特徵)和方法(動態特徵),繼承必須遵循封裝當中的控制訪問
舉個例子
動物分爲哺乳動物和爬行動物,哺乳動物又包括人類,所以說,哺乳動物,爬行動物都與動物存在父子關係,而哺乳動物與人類也存在父子關係,父親有的行爲和屬性,兒子理應也有

從上邊的代碼中可看出,子類中不要再定義屬性和行爲,直接繼承父類,便有了父類的屬性和行爲,注意:訪問修飾符決定了是否可繼承

4.多態

多態性是指允許相同或不同子類型的對象對同一消息作出不同響應

4.1 重載:同一個動作作用在同一個對象上擁有不同的解釋 overloa

4.2 重寫:同一個動作作用在不同的對象上擁有不同的解釋 override

狹義的多態指重寫

多態(重寫)的機制:

4.2.1 聲明一個父類型的引用指向具體子類型的實例

4.2.2 運行時才能綁定

4.2.3 運行時可變

final, finally, finalize 的區別
final:java中的關鍵字,修飾符。
A).如果一個類被聲明爲final,就意味着它不能再派生出新的子類,不能作爲父類被繼承。因此,一個類不能同時被聲明爲abstract抽象類的和final的類。
B).如果將變量或者方法聲明爲final,可以保證它們在使用中不被改變.
  1)被聲明爲final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。 
  2)被聲明final的方法只能使用,不能重載。
finally:java的一種異常處理機制。
  finally是對Java異常處理模型的最佳補充。finally結構使代碼總會執行,而不管無異常發生。使用finally可以維護對象的內部狀態,並可以清理非內存資源。特別是在關閉數據庫連接這方面,如果程序員把數據庫連接的close()方法放到finally中,就會大大降低程序出錯的機率。
finalize:Java中的一個方法名。
Java技術使用finalize()方法在垃圾收集器將對象從內存中清除出去前,做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒被引用時對這個對象調用的。它是在Object類中定義的,因此所的類都繼承了它。子類覆蓋finalize()方法以整理系統資源或者執行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調用的。

int 和 Integer 有什麼區別
  ①無論如何,Integer與new Integer不會相等。不會經歷拆箱過程,i3的引用指向堆,而i4指向專門存放他的內存(常量池),他們的內存地址不一樣,所以爲false
  ②兩個都是非new出來的Integer,如果數在-128到127之間,則是true,否則爲false
  java在編譯Integer i2 = 128的時候,被翻譯成-> Integer i2 = Integer.valueOf(128);而valueOf()函數會對-128到127之間的數進行緩存
  ③兩個都是new出來的,都爲false
  ④int和integer(無論new否)比,都爲true,因爲會把Integer自動拆箱爲int再去比

重載和重寫的區別

重載 Overload

表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同(即參數個數或類型不同)。

重寫 Override

表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,通過子類創建的實例對象調用這個方法時,將調用子類中的定義方法,這相當於把父類中定義的那個完全相同的方法給覆蓋了,這也是面向對象編程的多態性的一種表現。子類覆蓋父類的方法時,只能比父類拋出更少的異常,或者是拋出父類拋出的異常的子異常,因爲子類可以解決父類的一些問題,不能比父類有更多的問題。子類方法的訪問權限只能比父類的更大,不能更小。如果父類的方法是private類型,那麼,子類則不存在覆蓋的限制,相當於子類中增加了一個全新的方法。

抽象類和接口有什麼區別

                                                             抽象類和接口有什麼區別

參數    抽象類    接口
默認的方法實現    它可以有默認的方法實現    接口完全是抽象的。它根本不存在方法的實現
實現    子類使用 extends 關鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有聲明的方法的實現。    子類使用關鍵字 implements 來實現接口。它需要提供接口中所有聲明的方法的實現
構造器    抽象類可以有構造器    接口不能有構造器
與正常 Java 類的區別    除了你不能實例化抽象類之外,它和普通Java類沒有任何區別    接口是完全不同的類型
訪問修飾符    抽象方法可以有 public、protected 和 default 這些修飾符    接口方法默認修飾符是 public。你不可以使用其它修飾符。
main 方法    抽象方法可以有 main 方法並且我們可以運行它    接口沒有 main 方法,因此我們不能運行它。
多繼承    抽象方法可以繼承一個類和實現多個接口    接口只可以繼承一個或多個其它接口
速度    它比接口速度要快    接口是稍微有點慢的,因爲它需要時間去尋找在類中實現的方法。
添加新方法    如果你往抽象類中添加新的方法,你可以給它提供默認的實現。因此你不需要改變你現在的代碼。    如果你往接口中添加方法,那麼你必須改變實現該接口的類。
說說反射的用途及實現

反射的用途

Java 反射機制是一個非常強大的功能,在很多的項目比如 Spring,MyBatis 都都可以看到反射的身影。通過反射機制,我們可以在運行期間獲取對象的類型信息。利用這一點我們可以實現工廠模式和代理模式等設計模式,同時也可以解決 Java 泛型擦除等令人苦惱的問題。

反射的實現

獲取一個對象對應的反射類,在 Java 中有下列方法可以獲取一個對象的反射類

通過 getClass() 方法
通過 Class.forName() 方法
使用 類.class
通過類加載器實現,getClassLoader()
 

說說自定義註解的場景及實現

註解本質是一個繼承了Annotation的特殊接口,其具體實現類是Java運行時生成的動態代理類。程序運行時,通過反射獲取類中所有的屬性和方法上的註解,這個註解是個動態代理對象$Proxy1。通過代理對象調用註解中自定義的方法,完成註解功能。
————————————————
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章