JAVA基礎理解(二)

一、JAVA基礎理解

1、方法重寫的規則

參數列表、方法名、返回值類型必須一致;構造方法不能被重寫,聲明爲final的方法不能被重寫;聲明爲static的方法不存在重寫(重寫和多態聯合纔有意義),訪問權限不能比父類更低,重寫之後的方法不能拋出更寬泛的異常;

2、throw 和 throws的區別

throw: throw語句用在方法體內,表示拋出異常,由方法體內的語句處理。

是具體向外拋出異常的動作,所以它拋出的是一個異常實例,執行throw一定是拋出了某種異常。

throws: 是用在方法聲明後面,表示如果拋出異常,由該方法調用者來進行異常的處理

throws主要是聲明這個方法會拋出某種類型的異常,讓它的使用者要知道需要捕獲的異常的類型。

throws表示出現異常的一種可能性,並不一定會發生這種異常。

3、抽象類和接口的區別

1、接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。

2、類可以實現很多個接口,但是隻能繼承一個抽象類

3、類如果要實現一個接口,它必須要實現接口聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。

4、抽象類可以再不提供接口方法實現的情況下實現接口。

5、Java接口中的成員變臉默認是final的。抽象類的可以包含非final 的變量。

6、Java接口中的成員函數默認是public的。抽象類的成員函數可以是private,protected或者是public。

7、接口是絕對抽象的,不可以被實例化(java8已支持在接口中實現默認的方法)。抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調用的。

4、java的基礎類型和字節大小

byte 字節型 8位

short 短整形 16位

int 整形 32位

long 長整形 64位

char 字符型 char 16位

float 浮點型 32位

double 雙精度 64位

boolean 布爾型 8位

5、四個訪問修飾符合訪問級別?

private,default,protected,public

6、String和StringBuffer的區別

String 和 StringBuffer主要區別是性能:String 是不可變對象,每次對String類型進行操作都等同於產生一個新的String對象,然後指向新的String對象。所以儘量不要對String進行大量拼接操作,否則會產生很多臨時對象,導致GC開始工作,影響系統性能。StringBuffer是對象本身操作,而不是產生新的對象,因此在有大量拼接的情況下,我們建議使用StringBuffer(線程安全)。

7.HashSet的底層實現是什麼?

HashSet的實現是依賴於HashMap的,HashSet的值都是存儲在HashMap中的。在HashSet的構造方法中會初始化一個HashMap對象,HashSet不允許值重複。因此,HashSet的值是作爲HashMap的key存儲在HashMap中,當存儲的值已經存在時返回false。

8.HashMap的工作原理是什麼。

HashMap內部是是通過一個數組實現的,只是這個數組比較特殊,數組裏存儲的元素是一個Entry實體(在JAVA8中爲Node),這個Entry實體主要包含Key、Value以及一個指向自身的next指針。

HashMap是基於hashing實現的,當進行put操作時,根據傳遞的key值得到它的hashcode,然後再用這個hashcode 與數組的長度進行模運算,得到一個int值,就是Entry要存儲在數組的位置(下標);當通過get方法獲取指定key的值時,會根據這個key算出它的hash值(數組下標),根據這個hash值獲取數組下標對應的Entry,然後判斷Entry裏的key,hash值或者通過equals()比較是否與要查找的相同,如果相同,返回value,否則的話,遍歷該鏈表(有可能就只有一個Entry,此時直接返回null),直到找到位置,否則返回null.

HashMap之所有在每個數組元素存儲的是一個鏈表,是爲了解決hash衝突問題,當兩個對象的hash值相等時,那麼一個位置肯定是放不下兩個值的,於是HashMap採用鏈表來解決這種衝突,hash值相等的兩個元素會形成一個鏈表。

9.抽象類的意義

抽象類含義:

  • 爲其他子類提供一個公共的類型。

  • 封裝子類中重複定義的內容

  • 定義抽象方法,子類雖然有不同的實現,但是定義是一致的。

10.你重寫過hashcode和equals方法麼

hashCode()的作用是獲取哈希碼,也稱散列碼;它實際上是返回一個Int整數。這個哈希碼的作用是確定該對象在哈希表中的索引位置。如果兩個對象相等,則hashcode一定也是相同的hashcode 值,他們也不一定是相等的因此,equals方法被覆蓋過,則hashCode方法也必須被覆蓋。

hashCode()的默認行爲是對堆上的對象產生獨特值。如果沒有重寫hashCode(),則該class的兩個對象無論如何都不會相等(即使這兩個對象指向相同的數據)。

11.HashSet 與 TreeSet的區別

HashSet是由一個hash表來實現的,因此,它的元素是無序的。add(),remove(),contains()方法的事件複雜度是O(1).TreeSet是由一個樹形的結構來實現的,它裏面的元素是有序的。因此,add(),remove(),contains()方法的時間複雜度是0(logn)。

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