----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------
JDK5.0中引入了許多java的新特性,有些特性是爲了簡化書寫,有些特性是爲了進一步滿足開發人員的需求,恰當的使用新特性,能提升代碼的效率,安全性。同時學習並使用新特性是成爲一名優秀的程序員必不可少的技能。體現了開發人員的自學能力,同時也提升了項目的開發進度。JDK5.0引入了較多的新特性。比較有代表性的有以下新特性。
1、增強for循環:迭代數組和實現Iterator接口的集合,不可有進行涉及索引的操作。
當需要對特定元素的操作時,推薦使用不同的for循環。
2、靜態導入:導入包中靜態方法。
需要注意當導入的包中有相同類時需要寫全相應類的包名。
3、可變參數:用於函數的參數上,操作的同一類型的元素個數不確定的時候。 必須放在參數的末尾作爲最後一個參數。
可變參數的內部封裝了數組,可變參數需用在方法參數的最後一個參數的情況。
4、自動拆箱與裝箱:將基本數據類型封裝爲包裝類
Integernum = 4; ---à自定裝箱,等效於Integer num = new Integer(4);
num= num + 1; ---à自動拆箱再裝箱:num+1是拆箱成int,然後裝箱爲Integer
爲了優化內存,包裝類含有緩衝池:Integer池大小:-128~127,一個字節
String池:字符串池,已存在的不再創建新的。
這裏應用了享元設計模式Flyweight。
5、枚舉:enum,限定和固定對象的個數,指定取值內容。
枚舉對象必須放在整個類最前面
私有構造函數,可定義屬性、方法,實現接口、繼承類
枚舉類中可以有抽象方法,但是在對象身上必須實現,即列出的枚舉值必須實現。
比較兩個值,可直接用==即可
6、泛型:爲解決類型的安全機制而出現的。用<>表示
多用於集合中,限定存入集合中的元素類型;類型不確定時也可使用
泛型是提供給編譯器檢查用的,編譯後會去掉“類型”信息,不會影響效率
靜態方法無法訪問類上定義的泛型,需自己定義在方法上
泛型不存在繼承,賦值兩邊類型必須一樣,或也可一邊有泛型
好處:
將運行時期的錯誤轉移到編譯時期,更安全。
避免了強轉的麻煩
通配符:
開發者不知道調用者傳入的類型是什麼的時候,可使用?代表唯一的任意類型。
泛型的限定:
向上限定:? extends E:接收E或E的子類型
向下限定:? super E:接收E或E的父類型
下面是靜態導入的代碼示範:
package cn.itcast.day1;
//import static java.lang.Math.max;
import static java.lang.Math.*;
import cn.itcast.day2.AnnotationTest;
public class StaticImport {
public static void main(String[] args){
AnnotationTest.sayHello();
int x = 1;
try {
x++;
} finally {
System.out.println("template");
}
System.out.println(x);
System.out.println(max(3, 6));
System.out.println(abs(3 - 6));
}
}
下面是制動拆裝箱的代碼示範:
package cn.itcast.day1;
public class AutoBox {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer iObj = 3;
System.out.println(iObj + 12);
String s1 = new String("abc");
String s2 = new String("abc");
Integer i1 = 137;
Integer i2 = 137;
System.out.println(i1 == i2);
Integer i3 = Integer.valueOf(213);
Integer i4 = Integer.valueOf(213);
System.out.println(i3==i4);
}
}
下面的代碼是枚舉的代碼示範:
package cn.itcast.day1;
import java.util.Date;
public class EnumTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WeekDay1 weekDay = WeekDay1.MON;
System.out.println(weekDay.nextDay());
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(WeekDay.valueOf("SUN").toString());
System.out.println(WeekDay.values().length);
new Date(300){};
}
public enum WeekDay{
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}
}
下面是使用普通java類對枚舉的模擬實現:
package cn.itcast.day1;
public abstract class WeekDay1 {
private WeekDay1(){}
public final static WeekDay1 SUN = new WeekDay1(){
@Override
public WeekDay1 nextDay() {
// TODO Auto-generated method stub
return MON;
}
};
public final static WeekDay1 MON = new WeekDay1(){
@Override
public WeekDay1 nextDay() {
// TODO Auto-generated method stub
return SUN;
}
};
public abstract WeekDay1 nextDay();
/* public WeekDay nextDay(){
if(this == SUN){
return MON;
}else{
return SUN;
}
}
*/
public String toString(){
return this==SUN?"SUN":"MON";
}
}
JDK5.0中的新特性是面試中的常考題目,需要掌握好,一方面有助於應付面試,另一方面對於開發也有較大的幫助。