黑馬程序員-java基礎加強-JDK1.5新特性

-------------------------ASP.Net+Unity開發、.Net培訓、期待與您交流!--------------------------

靜態導入

1、import 語句導入的是一個包下的某一個類或者是某一個包下的所有的類

         import java.util.*;//導入包util中的所有的類

         import java.util.ArrayList;//導入包util中的某一個類
2、import static導入的是一個類的某一個靜態方法或者是導入一個類的所有的靜態方法
import static java.lang.Math.max;//導入一個類中的某一個靜態方法
import static java.lang.Math.*;//導入一個類中的所有的靜態方法
-------------------------------------------------------------------------------------
可變參數
1、當一個方法接收的參數個數不固定的時候就可以使用可變參數,
   如:add(1,2);
  add(1,2,5);等等
如果在函數中直接利用重載來寫這個函數是很麻煩的事情。所以可以用可變參數
2、可變參數的特點:
a、可變參數只能放在函數參數列表的最後。
b、...位於變量類型和變量名之間,前後有無空格都是可以的。
c、調用可變參數的方法時,編譯器爲該可變參數隱含創建一個數組,在方法中以數組的形式訪問可變參數。
例子:

package cn.itcast.day1;
public class VaribleParameterTest {
	public static void main(String[] args){
		System.out.println(add(2,3));
		System.out.println(add(2,3,5));		
	}
	//定義一個方法來實現不同參數列表的加法運算
	public static int add(int x,int...args){
		int sum=x;
		//通過數組對此可變參數進行操作
		/*for (int i = 0; i < args.length; i++) {
			sum+=args[i];
			
		}*/
		//高級for循環進行遍歷
		for(int arg:args){
			sum+=arg;	
		}
		return sum;		
	}

}
--------------------------------------------------------------------------------------
增加for循環
1、語法格式:
for (type 變量名:集合變量名)
{
}
2、注意事項:
a、迭代變量必須在()中定義
b、集合變量可以是數組或是實現了Iterable接口的集合類
例子:

package cn.itcast.day1;
public class VaribleParameterTest {
	public static void main(String[] args){
		System.out.println(add(2,3));
		System.out.println(add(2,3,5));		
	}
	//定義一個方法來實現不同參數列表的加法運算
	public static int add(int x,int...args){
		int sum=x;
		//通過數組對此可變參數進行操作
		/*for (int i = 0; i < args.length; i++) {
			sum+=args[i];	
		}*/
		//高級for循環進行遍歷
		for(int arg:args){
			sum+=arg;	
		}
		return sum;		
	}
}
-----------------------------------------------------------------------------------
基本數據的自動拆裝箱及享元設計模式
自動拆箱和裝箱:
1、裝箱: Integer i1=12;//將12自動裝箱爲Integer對象
2、拆箱:System.out.println(i1+2);//將i1又拆箱爲基本數據類型進行加法運算
3、享元模式
對於很多很小的對象,當他們有很多相同的屬性時,則在內存中只封裝爲一個對象
將不同的屬性作爲方法的參數,稱爲外部狀態;而相同的屬性稱爲內部狀態。
如:integer 這個單詞中有兩個相同的字母e,只是他們的位置不同(c(char,x,y))則在內存中只有一個這
樣的e對象,並把表示位置的兩個屬性(x和y)作爲方法的參數傳入 如 display(x,y)。x和y成爲外部狀
態,而char稱爲內部狀態。電腦中的文件也是利用的享元模式。
4 例子:

Integer i2=13;
	Integer i3=13;
	System.out.println(i2==i3);//結果爲true

	Integer i2=137;
	Integer i3=137;
	System.out.println(i2==i3);//結果爲false
	即當數值範圍爲一個字節,即爲-128~127時,則此對象直接緩存在內存中,當再有創建跟此對象的值一樣的其他對
	象時,則直接不再創建,而是直接指向此對象。即爲享元模式。

	Integer i2=Integer.valueOf(13);//這個不是自動裝箱,是通過valueOf來轉化的,但是否想等的原理和自動拆箱和裝箱一樣。
	Integer i2=Integer.valueOf(13);
	System.out.println(i2==i3);//結果爲true

	Integer i2=Integer.valueOf(137);//這個不是自動裝箱,是通過valueOf來轉化的
	Integer i2=Integer.valueOf(137);
	System.out.println(i2==i3);//結果爲false
---------------------------------------------------------------
枚舉的作用介紹
1、爲什麼要有枚舉
枚舉就是要讓某個類型的變量的取值只能爲若干個固定值中的一個,否則,編譯器就會報錯,枚舉可以讓編譯器在編譯時就
可以控制源程序中填寫的非法值。
--------------------------------------------------------------
用普通類模擬枚舉的實現原理
步驟:
1、將構造方法私有化
2、每個元素分別用一個公有的靜態成員變量來表示。
3、可以有若干個公有方法或抽象方法,例如,要提供nextDay方法必須是抽象的。採用抽象定義它,就將大量的if else語句轉移成
了一個個獨立的類。

例子:

package cn.itcast.day1;
    public class EnumTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WeekDay1 weekDay=WeekDay1.MON;
		WeekDay1 weekDay2=WeekDay1.SUN;
		System.out.println(weekDay);
		System.out.println(weekDay.nextDay());
		}
	}
package cn.itcast.day1;
public abstract class WeekDay1 {
	//將構造函數私有化
	private WeekDay1(){}
	//定義此類的對象,即定義此類的對象取值範圍,是公有的
	/*public static final WeekDay SUN=new WeekDay();
	public static final WeekDay MON=new WeekDay();*/
	
	/*public String nextDay(){
		if (this==SUN) {
			return "MON";	
		} else {
			return "SUN";
		}
	}*/
	
	//將上述方法中的if else方法變成一個個的類來實現
	public static final WeekDay1 SUN=new WeekDay1(){
		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return MON;
		}	
	};
	public static final WeekDay1 MON=new WeekDay1(){
		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}	
	};
	//將它定義爲抽象的方法  是爲了在具體對象中具體實現它
	public abstract WeekDay1 nextDay();
	//通過實現toString來達到想要打印的對象的值
	public String toString(){
		return this==SUN?"SUN":"MON";
	}
}
-------------------------------------------------------------
枚舉的基本應用
1、枚舉類是一個特殊的類,其中的每個元素都是該類的一個實例對象。
2、定義格式如下:
//枚舉的基本應用
public enum WeekDay{
SUN,MON,TUS,THS,WEN,FID,STA;//此處可加分號,可不加,當下面有內容時必須加上
}
3.枚舉類的幾種方法如下以及具體應用:

public class EnumTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WeekDay w1=WeekDay.SUN;
		System.out.println(w1);//結果爲SUN,即此枚舉類自身實現了toString方法
		System.out.println(w1.name());//打印結果爲SUN
		System.out.println(w1.ordinal());//打印此對象在此類中對應第幾個
		
		//此枚舉類的靜態方法
		//1、此方法是將SUN變爲WeekDay的實例對象,並調用類中的方法toString()
		//來得到相應的值,注意此傳來的字符串應該是枚舉類中具有的元素。
		System.out.println(WeekDay.valueOf("SUN"));
		//2、此方法爲WeekDay[] arr=WeekDay.values();即得到此枚舉類的元素
		System.out.println(WeekDay.values().length);	
	}
	//枚舉的基本應用
	public enum WeekDay{
		//元素列表放在所有語句的前面,此元素列表的所有元素都是靜態的,因爲要被類直接調用。
		SUN,MON,TUS,THS,WEN,FID,STA;//此處可加分號,可不加,當下面有內容時
		                           //必須加上。
	}
}
--------------------------------------------------------------
實現帶有構造方法的枚舉
枚舉類的特點:
1、元素列表必須放在所有語句之前,若元素列表有下面有內容,則元素列表後面必須加
2、構造方法必須私有化,當枚舉中沒寫構造方法時,默認的構造方法也是私有的。
3、每個元素調用的構造函數爲無參構造方法
4、指定使用有參的構造函數,在爲SUN(與構造方法相對應類型的值)
5、枚舉只有一個成員時,就可以作爲一種單例的實現方式。
代碼:

//枚舉的基本應用
	public class EnumTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		WeekDay w1=WeekDay.SUN;
		System.out.println(w1);//結果爲SUN,即此枚舉類自身實現了toString方法
		System.out.println(w1.name());//打印結果爲SUN
		System.out.println(w1.ordinal());//打印此對象在此類中對應第幾個
		
		//此枚舉類的靜態方法
		//1、此方法是將SUN變爲WeekDay的實例對象,並調用類中的方法toString()
		//來得到相應的值,注意此傳來的字符串應該是枚舉類中具有的元素。
		System.out.println(WeekDay.valueOf("SUN"));
		//2、此方法爲WeekDay[] arr=WeekDay.values();即得到此枚舉類的元素
		System.out.println(WeekDay.values().length);
	}
	//枚舉的基本應用
	public enum WeekDay{
		//元素列表必須放在所有語句前面
		SUN,MON,TUS,THS,WEN,FID,STA;//此處可加分號,可不加,當下面有內容時
		                           //必須加上。
		
		//構造方法必須私有化,上面的元素默認的調用的構造函數爲無參的構造函數
		private WeekDay(){
			System.out.println("first");
		}
		//若要想調用此構造函數,則元素列表中的元素應該寫成SUN(1)
		private WeekDay(int day){
			System.out.println("second");	
		}	
	}
}
-----------------------------------------------------------
實現帶有抽象方法的枚舉

public class EnumTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TrafficLamp tl=TrafficLamp.RED;
		System.out.println(tl);
		System.out.println(tl.nextLamp());	
	}
	//交通燈的枚舉類,並且裏面有抽象方法
	public enum TrafficLamp{
		/*
		 * //由於此類爲抽象的,所以沒辦法直接創建對象,所以利用匿名子類來創建子類對象
		//以下是使用無參的構造方法來創建的
		RED{

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return GREEN;
			}	
		},
		GREEN{
			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return YELLOW;
			}	
		},
		YELLOW{
			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return RED;
			}	
		};
		*/
		//利用有參的構造方法
		RED(100){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				//System.out.println(time);
				return GREEN;
			}	
		},
		GREEN(50){
			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return YELLOW;
			}	
		},
		YELLOW(10){
			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return RED;
			}	
		};
		//抽象方法
		public abstract TrafficLamp nextLamp();
		//構造函數私有化
		private TrafficLamp(){}
		private int time;
		private TrafficLamp(int time){
			this.time=time;
		}	
	}
}


-------------------------ASP.Net+Unity開發、.Net培訓、期待與您交流!--------------------------


詳情請查看:http://edu.csdn.net

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