黑馬程序員_基礎加強

----------- 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中的新特性是面試中的常考題目,需要掌握好,一方面有助於應付面試,另一方面對於開發也有較大的幫助。


----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章