第十四:枚举及其他的新特性

//定义一个枚举类
public enum Week {
	MON,TUE,WED,THU,FRI,SAT,SUN
}

//遍历枚举类中的常量
public class EnumList {
	public static void main(String[] args) {
		Week[] days = Week.values();// 把一个enum转换成一个enum类型的数组
		for (Week d : days) {
			System.out.println(d);
		}
	}

}

//枚举类型的使用举例
public class EnumTest {
	public static void main(String[] args) {
		EnumTest et=new EnumTest();
		et.work(Week.SUN);
	}

	public void work(Week day) {
		if(day.equals(Week.SAT)){
			System.out.println("购物!");
		}else if(day.equals(Week.SUN)){
			System.out.println("祈祷!");
		}else{
			System.out.println("工作!");
		}
	}
}

//这个例子与EnumTest例子的一些区别(在常量前加与不加Week的区别)
public class EnumInSwitchTest {
	public static void main(String[] args) {
		EnumInSwitchTest e = new EnumInSwitchTest();
		e.work(Week.FRI);
	}

	public void work(Week day) {
		// bity,char,int,枚举类型,对象类型
		switch (day) {
		case MON:
		case THU:
		case WED:
		case TUE:
		case FRI:
			System.out.println("工作!");
			break;
		case SAT:
			System.out.println("购物!");
			break;
		case SUN:
			System.out.println("祈祷!");
			break;
		default:
			System.out.println("非法的日期!");
		}
	}
}


一.

当您使用“enum”定义枚举类型时,实质上您定义出來的类型继承自java.lang.Enum类型,

而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance),他们都被预设为final,
所以您无法改变他们,他们也是static成員,所以您可以通过类型名称直接使用他们,

当然最重要的,它們都是公开的(public)。

//枚举使用
public class EnumTest {
	public static void doOp(OpConstant opContant) {
		switch (opContant) {
		case TURN_LEFT:
			System.out.println("向左转");
			break;
		case TURN_RIGHT:
			System.out.println("向右转");
			break;
		case SHOOT:
			System.out.println("射击");
			break;
		default:
			System.out.println("错误");
		}
	}

	public static void main(String[] args) {
		doOp(OpConstant.SHOOT);
	}
}

enum OpConstant {
	TURN_LEFT, TURN_RIGHT, SHOOT //每一元素是一个OpContant类型的实例
}


二.

静态导入:

要使用静态成员(方法和变量)我们必须给出提供这个静态成员的类。
使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,
使用这些静态成员无需再给出他们的类名

不过,过度使用这个特性也会一定程度上降低代码的可读性

package com.test.common;

public class MyCommon {
	public static final String NAME="hello world";
	public static int add(int a,int b){
		return a+b;
	}
}

//静态导入的举例

import static com.test.common.MyCommon.*;

public class StaticImport {
	public static void main(String[] args) {
		System.out.println(NAME);
		System.out.println(add(1,2));
	}
}


三.

可变参数:

可变参数使程序员可以声明一个接受可变数目参数的方法。

注意,可变参数必须是方法声明中的最后一个参数

//可变参数的使用举例
public class TestVarargs {
	private static int sum(String str,int...nums){
		System.out.println(str);
		int sum=0;
		for(int num:nums){
			sum+=num;
		}
		return sum;
	}
	public static void main(String[] args) {
		System.out.println(sum("abc",1,2));
		System.out.println(sum("abc",1,2,3));
		System.out.println(sum("abc",1,2,3,4));
	}
}


补充知识:

Enumeration接口

java.util.Enumeration接口作用与Iterator接口类似,
但只提供了遍历Vector和Hashtable(及子类Properties)
类型集合元素的功能,且不支持集合元素的移除操作

你可能感兴趣的:(新特性)