java5.0的新特性
自動裝箱和自動拆箱
自動封箱和自動拆箱,它實現了簡單類型和封裝類型的相互轉化時,實現了自動轉化。
自動封箱解箱只在必要的時候才進行。還有其它選擇就用其它的
byte b -128~127
Byte b 多一個null
簡單類型和封裝類型之間的差別
封裝類可以等於null ,避免數字得0時的二義性。
Integer i=null;
int ii=i; 會拋出NullException 異常。
相當於 int ii=i.intValue();
Integer i=1;相當於Integer i=new Integer(1);
在基礎資料型別 (Elementary Data Type)和封裝類之間的自動轉換
<5.0之前>
Integer i=new Integer(4);
int ii= i.intValue();
<5.0之後>
Integer i=4;
Long l=4.3;
靜態引入
靜態成員的使用,使用import static 引入靜態成員,也就是可以用靜態引入是匯入包中的某個類的靜態成員,在使用時不用再寫類名。
很簡單的東西
例子:
<沒有靜態匯入>
Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
<有了靜態匯入>
import static java.lang.Math.*;
sqrt(pow(x, 2) + pow(y, 2));
其中import static java.lang.Math.*;就是靜態匯入的文法,它的意思是匯入Math類中的所有static方法和屬性。這樣我們在使用這些方法和屬性時就不必寫類名。
需要注意的是預設包無法用靜態匯入,另外如果匯入的類中有重複的方法和屬性則需要寫出類名,否則編譯時間無法通過。
增強for迴圈( for each )
for-each迴圈實現了對數組和集合的便利的統一,解決遍曆數組和遍曆集合的不統一。
import java.util.*;
import java.util.Collection;
public class Foreach{
private Collection<String> c = null;
private String[] belle = new String[4];
public Foreach(){
belle[0] = "西施";
belle[1] = "王昭君";
belle[2] = "貂禪";
belle[3] = "楊貴妃";
c = Arrays.asList(belle);
}
public void testCollection(){
for (String b : c){
System.out.println("曾經的風化絕代:" + b);
}
}
public void testArray(){
for (String b : belle){
System.out.println("曾經的青史留名:" + b);
}
}
public static void main(String[] args){
Foreach each = new Foreach();
each.testCollection();
each.testArray();
}
}
對於集合類型和數群組類型的,我們都可以通過foreach文法來訪問它。上面的例子中,以前我們要依次訪問數組,挺麻煩:
for (int i = 0; i < belle.length; i++){
String b = belle[i];
System.out.println("曾經的風化絕代:" + b);
}
現在只需下面簡單的語句即可:
for (String b : belle){
System.out.println("曾經的青史留名:" + b);
}
對集合的訪問效果更明顯。以前我們訪問集合的代碼:
for (Iterator it = c.iterator(); it.hasNext();){
String name = (String) it.next();
System.out.println("曾經的風化絕代:" + name);
}
現在我們只需下面的語句:
for (String b : c){
System.out.println("曾經的風化絕代:" + b);
}
for each的缺點:
在以前的代碼中,我們可以通過Iterator執行remove操作。
for (Iterator it = c.iterator(); it.hasNext();){
it.remove();
}
但是,在現在的for-each版中,我們無法刪除集合包含的對象。你也不能替換對象。
同時,你也不能並行的for-each多個集合。所以,在我們編寫代碼時,還得看情況而使用它。