最近被問到jdk的新特性,突然發現太菜,都不知道jdk幾個新特性。寫點筆記作爲記錄。主要的幾個特性咱還是要了解下的
首先是1.5的新特性:
1、自動的裝箱與拆箱
自動裝箱:把基本類型用它們對應的包裝類包裝起來,使它們具有對象的特質,可以調用所對應的包裝類所定義的方法,比如toString()等。
Integer i0 = new Integer(0);
Integer i1 = 2;
Integer i1_ = Integer.valueOf(2);
上面的三行代碼第一行是最基本的創建一個integer對象的方式。第二行代碼就是我們這裏要講的自動裝箱。而第三行代碼就是第二行代碼的本質,也就是說,當你使用自動裝箱來得到一個引用數據類型時,jvm實際上調用了valueOf()方法,稍後我們會去研究一下java源碼。
自動拆箱:跟自動裝箱的方向相反,將Integer及Double這樣的包裝類的對象重新簡化爲基本類型的數據。
System.out.println(i1+2);
這句代碼就使用了自動拆箱。i1是我們上面通過自動裝箱得到的一個integer對象,而這個對象是不能直接進行四則運算的,但是我們卻給它+2,這樣就必須將integer對象轉變爲基本數據類型(int),這個過程就是自動拆箱的過程。
p.s.所謂自動,就是說這個過程並不需要程序員去完成,而是jvm自動完成的,jvm會在編譯期根據語法決定是否進行裝箱和拆箱動作。
另外,自動拆箱與自動裝箱的jdk1.5才引入的新特性,所以如果你的jdk版本低於1.5的話,是不可以這樣寫的。
類型包裝器有:Double,Float,Long,Integer,Short,Character和Boolean
2、枚舉
枚舉類型是Java 5中新增特性的一部分,它是一種特殊的數據類型,之所以特殊是因爲它既是一種類(class)類型卻又比類類型多了些特殊的約束,但是這些約束的存在也造就了枚舉類型的簡潔性、安全性以及便捷性
簡單用法:JavaEnum簡單的用法一般用於代表一組常用常量,可用來代表一類相同類型的常量值。
public class DayDemo {
public static final int MONDAY =1;
public static final int TUESDAY=2;
public static final int WEDNESDAY=3;
public static final int THURSDAY=4;
public static final int FRIDAY=5;
public static final int SATURDAY=6;
public static final int SUNDAY=7;
}
上述的常量定義常量的方式稱爲int枚舉模式
複雜用法:Java爲枚舉類型提供了一些內置的方法,同事枚舉常量還可以有自己的方法。可以很方便的遍歷枚舉對象
public class EnumDemo {
public static void main(String[] args){
//直接引用
Day day =Day.MONDAY;
}
}
//定義枚舉類型
enum Day {
MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
3、靜態導入
通過使用 import static,就可以不用指定 Constants 類名而直接使用靜態成員,包括靜態方法。
import xxxx 和 import static xxxx的區別是前者一般導入的是類文件如import java.util.Scanner;後者一般是導入靜態的方法,import static java.lang.System.out。
4、可變參數(Varargs)
5、內省(Introspector)
用於操作JavaBean中的屬性,通過getXxx/setXxx。一般的做法是通過類Introspector來獲取某個對象的BeanInfo信息,然後通過BeanInfo來獲取屬性的描述器(PropertyDescriptor),通過這個屬性描述器就可以獲取某個屬性對應的getter/setter方法,然後我們就可以通過反射機制來調用這些方法。
6、泛型
Java在1.5之前一直沒有相對應的功能。一個集合可以放任何類型的對象,相應地從集合裏面拿對象的時候我們也不得不對他們進行強制得類型轉換。引入了泛型,它允許指定集合裏元素的類型,這樣你可以得到強類型在編譯時刻進行類型檢查的好處。
7、For-Each
For-Each循環得加入簡化了集合的遍歷。假設我們要遍歷一個集合對其中的元素進行一些處理