P424枚举的引出
P424枚举
package emun;
public class Enumeration {
public static void main(String[] args) {
System.out.println(Season.SPRING);
}
}
class Season{
private String name;
private String desc;
//1.将构造器私有化,防止直接new
//2.去掉set方法防止被修改
//3.直接在season内部创建固定的对象
//4.优化可以加入final优化
public static final Season SPRING=new Season("Chun","温暖");
public static final Season SUMMER=new Season("夏","热呀");
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
package emun;
//演示直接使用enum关键字
public class Enumeration {
public static void main(String[] args) {
System.out.println(Season2.SPRING);
}
}
enum Season2{//1.使用关键字来替代class
//2.直接使用SPRING("春天",“温暖”);常量名(实参列表)
//3.如果有多个对象,使用逗号间隔即可
//4.如果使用emum来实现枚举,要求将定义常量的对象放在前面
SPRING("春天","wwnuan"),SUMMER("夏天","re");//这句话在前面
private String name;
private String desc;
private Season2(String name, String desc) {
this.name = name;
this.desc = desc;
}
@Override
public String toString() {
return "Season2{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
P427enum关键字细节
SPRING("春天","wwnuan"),SUMMER;//这句话在前面
private String name;
private String desc;
Season2() {//无参构造器
}
private Season2(String name, String desc) {
this.name = name;
this.desc = desc;
}
//SUMMER使用无参构造器,创建常量对象SUMMER,可以省略()
enum的toString()返回的是name
P429java的enum成员方法
package emun;
public class EnumMethod {
public static void main(String[] args) {
Season2 sum=Season2.SUMMER;
Season2 spring=Season2.SPRING;
System.out.println(sum.name());//输出枚举对象的名称
System.out.println(sum.ordinal());//输出该枚举对象的次序,从0开始
System.out.println(Season2.SPRING.ordinal());
Season2.values();//Valus,返回Season2[],含定义的所有枚举对象
Season2[] values=Season2.values();
for(Season2 season:values){//增强for,每次将values中的元素传给一个season
System.out.println(season);
//输出结果Season2{name='春天', desc='wwnuan'}
//Season2{name='null', desc='null'}
}
//valueof:将字符串转成枚举对象,要求字符串必须为已有的常量名否则报错
//执行流程:根据你输入的“SPRING”到Season的枚举对象去查找,如果找到了就返回,如果没有找到就报错
Season2 spring11=Season2.valueOf("SPRING");
System.out.println("spring11="+spring11);
System.out.println(spring==spring11);//输出true
//compareTo:比较枚举敞亮,比较的就是编号
System.out.println(Season2.SPRING.compareTo(Season2.SUMMER));//输出-1
//源码显示是self.ordinal-other.ordinal=0-1=-1
/*
int []nums={1,2,3};
for(int i:nums){//等同于(int i=0;i<nums.length;i++)
System.out.println("i="+i);
}
*/
}
}
P431-P435
不是很重要,看清源码即可