Java SE 知识点
數組(Array)和列表(ArrayList)的區別?什么時候應該使用Array而不是ArrayList?
- Array和ArrayList的不同點: Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。
- Array大小是固定的,ArrayList的大小是動態變化的。
- ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
- 對于基本類型數據,集合使用自動裝箱來減少編碼工作量。但是,當處理固定大小的基本數據類型的時候,這種方式相對比較慢。
解釋什么是值傳遞和引用傳遞?
值傳遞是對基本型變量而言的,傳遞的是該變量的一個副本,改變副本不影響原變量. 引用傳遞一般是對于對象型變量而言的,傳遞的是該對象地址的一個副本, 并不是原對象本身 。 所以對引用對象進行操作會同時改變原對象. 一般認為,java內的傳遞都是值傳遞.
什么是自動拆裝箱?
自動裝箱是Java編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把int轉化成Integer,double轉化成Double,等等。反之就是自動拆箱。
如: Integer a = 3; 編譯器將 int 類型的 3 自動轉換成 Integer 類型
解釋為什么會出現4.0-3.6=0.40000001這種現象?
2進制的小數無法精確的表達10進制小數,計算機在計算10進制小數的過程中要先轉換為2進制進行計算,這個過程中出現了誤差。
說明符號“”比較的是什么?
“”對比兩個對象基于內存引用,如果兩個對象的引用完全相同(指向同一個對象)時,“”操作將返回true,否則返回false。“”如果兩邊是基本類型,就是比較數值是否相等。
解釋Object若不重寫hashCode()的話,hashCode()如何計算出來的?
Object 的 hashcode 方法是本地方法,也就是用 c 語言或 c++ 實現的,該方法直接返回對象的 內存地址
解釋為什么重寫equals還要重寫hashcode?
HashMap中,如果要比較key是否相等,要同時使用這兩個函數!因為自定義的類的hashcode()方法繼承于Object類,其hashcode碼為默認的內存地址,這樣即便有相同含義的兩個對象,比較也是不相等的。HashMap中的比較key是這樣的,先求出key的hashcode(),比較其值是否相等,若相等再比較equals(),若相等則認為他們是相等的。若equals()不相等則認為他們不相等。如果只重寫hashcode()不重寫equals()方法,當比較equals()時只是看他們是否為同一對象(即進行內存地址的比較),所以必定要兩個方法一起重寫。HashMap用來判斷key是否相等的方法,其實是調用了HashSet判斷加入元素 是否相等。重載hashCode()是為了對同一個key,能得到相同的Hash Code,這樣HashMap就可以定位到我們指定的key上。重載equals()是為了向HashMap表明當前對象和key上所保存的對象是相等的,這樣我們才真正地獲得了這個key所對應的這個鍵值對。
Syncronized鎖,如果用這個關鍵字修飾一個靜態方法,鎖住了什么?如果修飾成員方法,鎖住了什么?
synchronized修飾靜態方法以及同步代碼塊的synchronized (類.class)用法鎖的是類,線程想要執行對應同步代碼,需要獲得類鎖。 synchronized修飾成員方法,線程獲取的是當前調用該方法的對象實例的對象鎖。
Query接口的list方法和iterate方法有什么區別?
①list()方法無法利用一級緩存和二級緩存(對緩存只寫不讀),它只能在開啟查詢緩存的前提下使用查詢緩存;iterate()方法可以充分利用緩存,如果目標數據只讀或者讀取頻繁,使用iterate()方法可以減少性能開銷。
② list()方法不會引起N+1查詢問題,而iterate()方法可能引起N+1查詢問題
解釋hashCode()和equals()方法有什么聯系?
Java對象的eqauls方法和hashCode方法是這樣規定的:
?相等(相同)的對象必須具有相等的哈希碼(或者散列碼)。
?如果兩個對象的hashCode相同,它們并不一定相同。
說明JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?
在Java中,每個異常都是一個對象,它是Throwable類或其它子類的實例。當一個方法出現異常后便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常并進行處理。Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。
。一般情況下是用try來執行一段程序,如果出現異常,系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最后(finally)由缺省處理器來處理。用try來指定一塊預防所有”異常”的程序。緊跟在try程序后面,應包含一個catch子句來指定你想要捕捉的”異常”的類型。throw語句用來明確地拋出一個”異常”。throws用來標明一個成員函數可能拋出的各種”異常”。Finally為確保一段代碼不管發生什么”異常”都被執行一段代碼。可以在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另一個try語句保護其他代碼。每當遇到一個try語句,”異常“的框架就放到堆棧上面,直到所有的try語句都完成。如果下一級的try語句沒有對某種”異常”進行處理,堆棧就會展開,直到遇到有處理這種”異常”的try語句。
談談StringBuffer和StringBuilder有什么區別,底層實現上呢?
StringBuffer線程安全,StringBuilder線程不安全,底層實現上的話,StringBuffer其實就是比StringBuilder多了Synchronized修飾符。
說明Collection 和 Collections的區別
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。
總結
以上是生活随笔為你收集整理的Java SE 知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中文域名怎么使用(中文域名怎么使用的)
- 下一篇: Java 集合类