1. 程式人生 > >java異常、泛型和反射

java異常、泛型和反射

(1)異常
異常的概念:所謂異常是指程式在執行過程中發生的一些不正常事件。(如:除0溢位,陣列下標越界,所讀取的檔案不存在)
異常導致的結果:java程式的執行過程中如出現異常事件,可以生成一個異常類物件。該異常物件封裝了異常事件的資訊,並將其提交給java執行時系統,這個過程成為丟擲異常,不處理的話會直接導致程式直接中斷。
java的異常是通過兩種機制來處理的
捕獲:try-catch-finally try:監控區域,執行可能產生異常的程式碼 catch:捕獲、處理異常 finally:處理善後,無論是否發生異常,程式碼總能執行
丟擲:throw,throws
throw:手動丟擲異常  throws:宣告方法可能要丟擲的異常
try-catch-finally try
try{}語句塊中放的是要檢測的java程式碼,可能有會丟擲異常,也可能會正常執行
catch(異常型別){}塊是當java執行時系統接收到try塊中所丟擲異常物件時,會尋找處理這一異常catch塊來進行處理(可以有多個catch塊)
finally{}不管系統有沒有丟擲異常都會去執行,一般用來釋放資源。除了在之前執行了System.exit(0)
throw和throws
throw用於手動丟擲異常。作為程式設計師可以在任意位置手動丟擲異常;
throws用於在方法上標識要暴露的異常。丟擲的異常交由呼叫者處理
兩者區別:throw用在方法內,後面跟上要丟擲的異常類物件;throws修飾在方法上,告訴呼叫者此方法可能會丟擲異常,後面跟上可能要丟擲的異常類名。
自定義異常
常見異常:RuntimeException,IOException,SQLException,ClassNotFoundException
自定義異常:java提供的異常體系不可能遇見所以希望加以報告的錯誤
自定義異常類必須從已有的異常類繼承
建立新的異常型別最簡單的方法就是讓編譯器產生預設構造方法
對異常來說,最重要的部分就是它的類名

可以為異常類定義一個接受字串引數的構造方法,字串引數描述異常資訊。

(2)泛型
泛型是JDK1.5引入的新特性,也是最重要的一個特性;泛型可以在編譯時檢查型別安全,並且所有的強制轉換都是自動和隱私的;泛型的原理就是“型別的引數化”,即把型別看做引數。也就是說把所有操作的資料型別看做引數,就像方法的形式引數是執行時傳遞的值的佔位符一樣;簡單的說,型別變數扮演的角色就如同一個引數,它提供給編譯器用來型別檢查的資訊;泛型可以提高程式碼的擴充套件性和重用性。
總結:所謂泛型,即通過引數化型別來實現在同一份程式碼上操作多種資料型別,泛型程式設計是一種程式設計正規化,它利用“引數化型別”將型別抽象化,從而實現更為靈活的複用。
泛型類
泛型的型別引數可以是泛型類
泛型類可以同時設定多個型別引數
泛型類可以繼承泛型類
泛型類可以實現泛型介面
限制泛型可用型別
在定義泛型類別時,預設在例項化泛型類的時候可以使用任何型別,但是如果想要限制使用泛型型別時,只能用某個特定型別或者是其子類才能例項化該型別時,可以在定義型別時,使用extends關鍵字指定這個型別必須是繼承某個類,或者實現某個介面
當沒有指定泛型繼承的型別或介面時,預設使用extends Object,所以預設情況下任何型別都可以作為引數傳入
型別萬用字元宣告
同一泛型類,如果例項化時給定的實際型別不同,則這些例項的型別是不相容的,不能相互賦值
泛型類例項之間的不相容性會帶來使用的不便。我們可以使用泛型萬用字元(?)宣告泛型類的變數就可以解決這個問題
泛型通配的方式:“?”表示任意一個型別
和限制泛型的上限相似,同樣可以使用extends關鍵字限定萬用字元匹配型別的上限,還可以使用super關鍵字將萬用字元匹配型別限定為某個型別及其父型別

(3)反射
概念:主要指程式可以訪問、檢測和修改它本身狀態或行為的一種能力
java反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類所以屬性和方法;對於任意一個物件,都能呼叫它的任意一個方法;這種動態獲取資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。
簡單的來說,反射機制指的是程式在執行時能夠獲取自身的資訊。在java中,只要給定類的姓名,那麼就可以通過反射機制來獲得類的所有資訊。包括其訪問修飾符、父類。實現的介面、屬性和方法的所有資訊,並可在執行時建立物件、修改屬性(包括私有的)、呼叫方法(包括私有的)。
反射機制的優點就是可以實現動態建立物件和編譯,體現出很大的靈活性。
java反射機制主要提供了以下功能
在執行時判斷任意一個物件所屬的類
在執行時構造任意一個類的物件
在執行時判斷任意一個類所具有的成員變數和方法
在執行時呼叫任意一個物件的方法