黑马程序员_JDK1.5新特性(一)静态导入、可变参数、增强for循环、自动装箱和拆箱、枚举

------- android培训java培训、期待与您交流! ----------

1、静态导入:

格式:import static java.lang.Math.*;

静态导入后,代码中就可以直接使用导入类中的静态方法,而不需要再加类名。

静态导入可以导入一个类,或某个包中的所有类。

package cn.itcast.day1;

//静态导入
//import static java.lang.Math.max;
//导入全部静态方法
import static java.lang.Math.*;

public class StaticImport {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(max(3, 6));
		System.out.println(abs(3 - 6));

	}

}

2、可变参数

  • 只能出现在参数列表的最后;
  • ...位于变量类型和参数名之间,前后有无空格都可以;
  • 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

3、增强for循环(for each)

语法:for(type 变量名 : 集合变量名){...}

  • 迭代变量必须在 ( ) 中定义!
  • 集合变量可以是数组或实现了Iterable接口的集合类。

4、基本数据类型的自动装箱和拆箱

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);//自动拆箱
		//享元设计模式
		//-128 ~ 127之间的Integer对象使用同一个对象。
		Integer i1 = 13;
		Integer i2 = 13;
		System.out.println(i1 == i2);//true
		//超过这个范围的Integer对象每次都要新建一个对象。
		Integer i3 = 128;
		Integer i4 = 128;
		System.out.println(i3 == i4);//false
		
		Integer i5 = Integer.valueOf(3);
		Integer i6 = Integer.valueOf(3);
		System.out.println(i5 == i6);//true
	}

}
扩展:享元设计模式

5、枚举

package cn.itcast.day1;

public class EnumTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WeekDay weekDay = WeekDay.FRI;
		System.out.println(weekDay);
		System.out.println(weekDay.name());
		System.out.println(weekDay.ordinal());
		System.out.println(weekDay.getClass());
		//静态方法
		System.out.println(WeekDay.valueOf("SUN"));
		System.out.println(WeekDay.values().length);
		

	}
	//枚举类
	public enum WeekDay{
		SUN(0),MON(),TUE,WED,THI,FRI,SAT; //列表后面没有内容时,可以没有;
		private WeekDay() {}
		private WeekDay(int day){}
	}
	
	//带有抽象方法的枚举类
	public enum TrafficLamp{
		RED (45){
			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return GREEN;
			}
		},GREEN(30) {
			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return YELLOW;
			}
		},YELLOW (3){
			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return RED;
			}
		};
		public abstract TrafficLamp nextLamp();
		private int time;
		private TrafficLamp(int time){this.setTime(time);}
		public int getTime() {
			return time;
		}
		public void setTime(int time) {
			this.time = time;
		}
	}
	//枚举只有一个成员时,就可以作为一种单例的实现方式。
}
用普通类模拟枚举类

package cn.itcast.day1;

public abstract class WeekDayDemo {
	private WeekDayDemo(){}
	
	public final static WeekDayDemo SUN = new WeekDayDemo(){

		@Override
		public WeekDayDemo nextDay() {
			// TODO Auto-generated method stub
			return MON;
		}
		
	};
	public final static WeekDayDemo MON = new WeekDayDemo(){

		@Override
		public WeekDayDemo nextDay() {
			// TODO Auto-generated method stub
			return TUE;
		}};
	public final static WeekDayDemo TUE = new WeekDayDemo(){

		@Override
		public WeekDayDemo nextDay() {
			// TODO Auto-generated method stub
			return WEN;
		}};
	public final static WeekDayDemo WEN = new WeekDayDemo(){

		@Override
		public WeekDayDemo nextDay() {
			// TODO Auto-generated method stub
			return THI;
		}};
	public final static WeekDayDemo THI = new WeekDayDemo(){

		@Override
		public WeekDayDemo nextDay() {
			// TODO Auto-generated method stub
			return FRI;
		}};
	public final static WeekDayDemo FRI = new WeekDayDemo(){

		@Override
		public WeekDayDemo nextDay() {
			// TODO Auto-generated method stub
			return SAT;
		}};
	public final static WeekDayDemo SAT = new WeekDayDemo(){

		@Override
		public WeekDayDemo nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}};
	//用抽象方法定义nextDay()
	public  abstract WeekDayDemo nextDay(); 
	
/*	public WeekDay nextDay(){
		if (this == SUN) {
			return MON;
		}else if (this == MON) {
			return TUE;
		}else if (this == TUE) {
			return WEN;
		}else if (this == WEN) {
			return THU;
		}else if (this == THU) {
			return FRI;
		}else if (this == FRI) {
			return SAT;
		}
		return SUN;
	}*/
	

}

枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法

枚举元素必须位于枚举体中最开始的部分,枚举元素列表的后面要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报错。

带构造方法的枚举

  • 构造方法必须定义成私有的
  • 如果有多个构造方法,该如何选择哪个构造方法?
  • 枚举元素MON和MON()的效果一样,都是调用默认的构造方法。

带方法的枚举

如上例

  • 定义枚举TrafficLamp
  • 实现普通的next方法
  • 实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
  • 增加上表示时间的构造方法

枚举只有一个成员时,就可以作为一种单例的实现方式。




------- android培训java培训、期待与您交流! ----------
详细请查看:http://edu.csdn.net/heima/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值