JDK1 5的新特性 04

2021-06-08 21:48:06 字數 1716 閱讀 1744

摘要:

一,泛型

a.泛型的由來:強轉的麻煩,非法型別的輸入,執行後再修改的費事;

b.泛型的原理:a.編譯時期,編譯器按照泛型限定的型別對程式設計師輸入的元素型別進行鑑定,

型別超出限定的範圍就報;

b.如何證明泛型只作用於編譯器?通過反射得到的集合,可以裝入任意物件;

c.需求的擴充套件:限定範圍多元化

a.單種型別:

b.多種型別:<? extends person> <? super student> <? extends person && super student>

c.任意型別:<?>

d.泛型的應用:自定義泛型

a.自定義方法泛型

b.自定義類泛型

二,類載入器

筆記:36,入門泛型的基本應用

需求:1,在向集合新增元素時,加人了非目的物件,卻沒人提醒,到執行後出錯了才發現問題!

然後回來把不符合條件的物件刪除,事後處理,麻煩又耗時,影響工作效率,能不能給集合做些注釋,

讓編譯器幫忙監督,以確保新增的元素都符合要求?

2,在定義比較器時,型別轉換好麻煩,有沒有更好的辦法?

技術:泛型-指定型別:在定義集合時,給集合進行元素型別限定即可,同理,在定義類,定義方法時,都可以限定型別;

讓型別轉換好麻煩! int i = (integer)collection1.get(1);

有問題:執行的時候拋異常!1角標上的集合元素型別不是integer!!

37,泛型的內部原理及更深應用

原理和應用

提問:如何證明泛型是給編譯器看的,而不是給虛擬機器看的?

編譯時期有作用,執行時期沒作用,反射可以直接獲取位元組碼檔案,不經過編譯,可以向結合新增任意物件;

總結:定義泛型是給編譯器看的,通過反射,可以新增元素,也可以獲取元素,不受型別限制。

泛型引數,不考慮繼承關係,宣告和事例要一致;

思考:vector v1 = new vector();//對嗎?對的

vectorv2 = v1;//對嗎?對的 編譯是對的,執行是錯的。

38,泛型的萬用字元擴充套件應用

需求擴充套件:

1,某種型別:沒有萬用字元 

2,多種型別:不是只允許string類,而且允許其子類!<?extends person> / <? super person> /

如:hashmap(map<? extends k,? extends v> m)

3,區間型別:是某個類的子類,但又是某個類的父類 <? extends *** & super yyy >

4,所有型別:<?>

39,泛型集合的綜合應用案例

需求:如何對其元素進行迭代?

分析:與list和set不同,map集合是成對儲存的,所以迭代器不適用,要對元素進行獲取,

需要對外提供鍵和值的獲取方法方法(鍵作為對映,不需要修改;);

思路:既然map沒有繼承iterable介面,那麼就應該建立乙個內部介面繼承iterable介面

辦法:map子類的內部類entry:map.entry

對自己的能力要有明確要求:1,通過api了解新技術,應用新技術;

2,通過eclipse驗證、應用、學習新技術;

3,通過eclipse方便高效地編寫程式;

40,自定義泛型方法及其應用

用別人的,做自己的出來給別人用。

44,類載入器及其委託機制的深入分析

45,自定義類載入器的編寫原理分析

JDK1 5的新特性

1.靜態匯入 靜態匯入得是靜態方法或靜態類 2.可變引數 overload與override的區別 overload是過載,override是重寫 可變引數就是overload 可變引數的特點 1.可變引數中的.只能出現在引數列表的最後 2.可變引數中的.位於變數型別和變數名之間,前後有無空格都可以...

JDK 1 5 新特性 列舉

1 class myenum 56 public static final myenum e1 new myenum 7public static final myenum e2 new myenum 8public static final myenum e3 new myenum 9 1011 ...

JDK1 5及1 7的新特性

a jdk1.5的新特性 自動拆裝箱 泛型 增強for 可變引數 列舉 b 列舉概述 就是乙個類只能存在幾個固定的物件,那麼這個就是列舉.我們就可以使用這些物件可以表示一些固定的值.舉例 一周只有7天,一年只有12個月等。c 案例演示 自己實現列舉類 a 案例演示 通過enum實現列舉類 a 案例演...