JDK1.5新特性:
1.自動裝箱與拆箱:
2.枚舉
3.靜態導入,如:import staticjava.lang.System.out
4.可變參數(Varargs)
5.內省(Introspector),主要用於操作JavaBean中的屬性,通過getXxx/setXxx。一般的做法是通過類Introspector來獲取某個對象的BeanInfo信息,然後通過BeanInfo來獲取屬性的描述器(PropertyDescriptor),通過這個屬性描述器就可以獲取某個屬性對應的getter/setter方法,然後我們就可以通過反射機制來調用這些方法。
6.泛型(Generic)(包括通配類型/邊界類型等)
JDK5以前,對象保存到集合中就會失去其特性,取出時通常要程序員手工進行類型的強制轉換,這樣不可避免就會引發程序的一些安全性問題。
ArrayList list = new ArrayList();
list.add("abc");
Integer num = (Integer) list.get(0); // 運行時會出錯,但編碼時發現不了
JDK5中的泛型允許程序員在編寫集合代碼時,就限制集合的處理類型,從而把原來程序運行時可能發生問題,轉變爲編譯時的問題,以此提高程序的可讀性和穩定性(尤其在大型程序中更爲突出)。
泛型是提供給javac編譯器使用的,它用於限定集合的輸入類型,讓編譯器在源代碼級別上,即擋住向集合中插入非法數據。但編譯器編譯完帶有泛型的java程序後,生成的class文件中將不再帶有泛型信息,以此使程序運行效率不受到影響,這個過程稱之爲“擦除”
使用泛型
使用泛型時,泛型類型須爲引用類型,不能是基本數據類型;
ArrayList<String> list = new ArrayList();
ArrayList list = new ArrayList<String>(); 是正確的,但是在添加數據時編譯器沒有對類型進行校驗。
7.增強for循環
普通for循環
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
for (int i=0;i<list.size();i++) {
Integer a=list.get(i);
System.out.println(a);
}
迭代器
List<String> list=new ArrayList<String>();
list.add("111");
list.add("222");
list.add("333");
Iterator<String> it=list.iterator();
while(it.hasNext()){
System.out.println(it.next));
}
增強for
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
for (Object obj : list) {
int i = (Integer) obj;
System.out.println(i);
}
8.註解 反射
9.協變返回類型:實際返回類型可以是要求的返回類型的一個子類型