Java學習(三)

Java學習(三)

標籤(空格分隔): Javajava


集合框架

java集合類主要有如下幾種:

List結構的集合類:
ArrayList類,LinkedList類,Vector類,Stack類android

Map結構的集合類:
HashMap類,Hashtable類編程

Set結構的集合類:
HashSet類,TreeSet類數組

Queue結構的集合
Queue接口安全

HashMap和Hashtable的區別

HashMap與Hashtable都是java的集合類,均可以用來存放java對象,這是他們的相同點,可是他們也有區別:網絡

1、歷史緣由:框架

Hashtable 是基於陳舊的Dictionary類的,HashMap是java1.2引進的Map接口的一個實現異步

2、同步性:性能

Hashtable 是同步的,這個類中的一些方法保證了Hashtable中的對象是線程安全的,而HashMap則是異步的,所以HashMap中的對象並非線程安全的,由於同步的要求會影響執行的效率,因此若是你不須要線程安全的集合那麼使用HashMap是一個很好的選擇,這樣能夠避免因爲同步帶來的沒必要要的性能開銷,從而提升效率學習

3、值:HashMap可讓你將空值做爲一個表的條目的key或value可是Hashtable是不能放入空值的(null)

ArrayList和Vector的區別

ArrayList與Vector都是java的集合類,均可以用來存放java對象,這是他們的相同點,可是他們也有區別:
1、同步性:Vector是同步的,這個類中的一些方法保證了Vector中的對象是線程安全的,而ArrayList則是異步的,所以ArrayList中的對象並非線程安全的,由於同步的要求會影響執行的效率,因此若是你不須要線程安全的集合那麼使用ArrayList是一個很好的選擇,這樣能夠避免因爲同步帶來的沒必要要的性能開銷。

2、數據增加:

從內部實現機制來說ArrayList和Vector都是使用數組(Array)來控制集合中的對象,當你向着兩種類型中增長元素的時候,若是元素的數目超出了內部數組目前的長度他們都須要擴展內部數組的長度,Vector缺省狀況下自動增加原來一倍的數組長度,ArrayList是原來的50%,因此最後你得到的這個集合所佔的空閒老是比你實際須要的要大,因此若是你要在集合中保存大量的數據,那麼使用Vector有一些優點,由於你能夠經過設置集合的初始化大小來避免沒必要要的資源開銷。

java的設計者給咱們提供了這些集合類,在編程中是至關有用的,具體何時用什麼集合,要根據集合的異同來選取。

(1)若是要求線程安全,使用Vector、Hashtable

(2)若是不要求線程安全,應使用ArrayList,LinkedList、HashMap

(3)若是要求鍵值時,則使用HashMap、Hashtable

(4)若是數據量很大,又要線程安全考慮Vector

泛型

泛型是java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操做的數據類型被指定爲一個參數,這種參數類型能夠用在類、接口和方法的建立中,分別稱爲泛型類、泛型接口、泛型方法。

Java語言引入泛型的好處是安全簡單

在java SE1.5 以前,沒有泛型的狀況下,經過對類型Object的引用來實現參數的「任意化」,「任意化」帶來的缺點是要作顯式的強制類型轉換,而這種轉換是要求開發者對實際參數類型能夠預知的狀況下進行的。對於強制類型轉換錯誤的狀況,編譯器可能不提示錯誤,在運行的時候纔出現異常,這是一個安全隱患。

泛型的好處是在編譯的時候檢查類型安全,而且全部的強制轉換都是自動和隱式的,提升代碼的重用率。

java->反射機制

 泛型的優勢

使用泛型有下面幾個優勢:
(1)類型安全

(2)向下轉型

(3)層次清晰

(4)性能較高,用GJ編寫的代碼能夠爲java編譯器和虛擬機帶來更多的類型信息,這些信息對java程序作進一步優化提供條件.

異常處理

異常處理——基本概念:當出現程序沒法控制的外部環境問題(用戶提供的文件不存在:文件內容損壞,網絡不可用等)時,java就會用異常對象來描述

java中用2種方法處理異常:

(1)在發生異常的地方直接處理

(2)將異常拋給調用者,讓調用者處理

 

異常分類:
(1)檢查性異常:java.lang.Exception

(2)運行期異常:java.lang.RuntimeException

(3)錯誤:java.lang.Error

頂層是java.lang.Throwable類,檢查性異常,運行期異常,錯誤都是這個類的子孫類,java.lang.Exception和java.lang.Error繼承自java.lang.Throwable,而java.lang.RuntimeException繼承自java.lang.Exception

檢查性異常:程序正確,但由於外在的環境條件不知足引起。例如:用戶錯誤及I/O問題——程序試圖打開一個並不存在的遠程Socket端口,或者是打開不存在的文件時,這不是程序自己的邏輯錯誤,而極可能是遠程機器名字錯誤(用戶拼寫錯誤)。對商用軟件系統,程序開發者必須考慮並處理這個問題,java編譯器強制要求處理這類異常,若是不捕獲這類異常,程序將不能被編譯。

運行期異常:這意味着程序存在bug,如數組越界,0被除,入參不知足規範。這類異常須要更改程序來避免,java編譯器強制要求處理這類異常。

錯誤:通常不多見,也很難經過程序解決,它可能源於程序的bug,但通常更可能源於環境問題。如內存耗盡,錯誤在程序中無須處理,而由運行環境處理。
異常處理:
一、try…catch
程序運行產生異常時,將從異常發生點中斷程序並向外拋出異常信息。

finally

若是把finally塊置try…catch…語句後,finally塊通常都會獲得執行,它至關於一個萬能的保險,即便前面的try塊發生異常,而又沒有對應異常的catch塊,finally塊將立刻執行

如下情形,finally塊將不會被執行:
(1)finally塊中發生了異常:
(2)程序所在線程死亡

(3)在前面的代碼中用了System.exit();

(4)關閉CPU

異常處理
二、將異常拋給調用者,讓調用者處理異常

異常處理
三、多個異常的處理規則
定義多個catch可精確地定位異常,若是爲子類的異常定義了特殊的catch塊,而父類的異常則放在另一個catch塊中,此時,必須知足如下規則:子類異常的處理塊必須在父類異常處理塊的前面,不然會發生編譯錯誤,因此,越特殊的異常越在前面處理,越廣泛的異常越在後面處理,這相似於制訂防火牆的規則次序:較特殊的規則在前,較普通的規則在後。
https://blog.csdn.net/android_jiangjun/article/details/20538417

相關文章
相關標籤/搜索