黑马程序员 java基础知识加强---枚举

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------


使用简单程序完成枚举的功能

使用简单的类实现枚举操作

class Color{
public static final Color RED = new Color("红色") ;//定义第一个对象
public static final Color GREEN = new Color("绿色") ;//定义第二个对象
public static final Color BLUE = new Color("蓝色") ;//定义第三个对象
private String name ;
private Color(String name){ //构造方法私有化,同时设置颜色的名称
   this.setName(name) ; //为颜色的名字赋值
}
public String getName() { //取得颜色名称
   return this.name;
}
public void setName(String name) { //设置颜色名称
   this.name = name;
}

public static Color getInstance(int i){ //得到一个颜色,只能从固定的几个颜色中取得
  
   switch (i){
    case 1 :{    //返回红色对象
     return RED ;
    }
    case 2 :{    //返回绿色对象
     return GREEN ;
    }
    case 3 :{    //返回蓝色对象
     return BLUE ;
    }
    default:{    //错误的值
     return null ;
    }
   }
}

}

public class ColorDemo {
public static void main(String args[]){
   Color c1 = Color.RED ;   //取得红色
   System.out.println(c1.getName());//输出名字
   Color c2 = Color.getInstance(3) ;//根据编号取得名字
   System.out.println(c2.getName());//输出名字
}
}

程序将Color类中的构造方法私有,之后在类中准备了若干个实例化对象,以后如果要取得
Color类的实例,则只能从RED、GREEN、BLUE3个对象中取得,这样就有效地限制了对象 的
取得范围。
以上使用的Color对象指定的范围,是通过一个个常量对每个对象进行编号的。也就是说,
一个个的对象就相当于用常量表示了,所以,按照这个思路也可以直接使用一个接口规定
出一组常量的范围。


使用接口表示一组范围

public interface Color{
public static final int RED = 1 ; //表示红色
public static final int GREEN = 2 ; //表示绿色
public static final int BLUE = 3 ; //表示蓝色
}

以上表示出的各个颜色是通过接口指定好的常量范围,与之前相比更加简单。但是这样做也会
存在另外一个问题,如果现在使用如下的代码:

public class ColorDemo{
public static void main(String args[]){
   System.out.println(Color.RED + Color.GREEN) ; //颜色相加
}
}

两个颜色的常量相加后形成“3”,这样的结果看起来会令人很困惑,操作很不明确。


定义一个枚举类型

//定义一个Color的枚举类型

public enum Color{   //定义枚举类型
RED,GREEN,BLUE ; //定义枚举的3个类型
}

以上的Color定义出来的枚举类型,其中包含RED,GREEN,BLUE3个数据。可以使用“枚举.variable”的形式
取出枚举中的指定内容。

//取出一个枚举的内容

public class GetEnumContent {
public static void main(String args[]){
   Color c = Color.BLUE ; //取出蓝色
   System.out.println(c); //输出信息
}
}

枚举类型的数据也可以使用“枚举.values()”的形式,将全部的枚举类型变为对象数组的形式,之后直接使用foreach进行输出。

//使用foreach输出枚举内容

public class PrintDemo {
public static void main(String args[]){
   for(Color c : Color.values()){   //枚举.values()表示得到 全部枚举的内容
    System.out.println(c);
   }
}
}

枚举中的每个 类型也可以使用switch进行判断,但在switch语句中使用枚举类型时,一定
不能在每一个枚举类型值的前面加上枚举类型的类名(如Color.BlUE),否则编译器将会报错。

//使用switch进行判断

public class SwitchPrintDemo {
public static void main(String args[]){
   for(Color c : Color.values()){   //枚举.values()表示得到 全部枚举的内容
    print(c);
   }
}

public static void print(Color color){
   switch(color){    //判断每个颜色
    case RED:{   //直接判断枚举内容
     System.out.println("红颜色");
     break ;
    }
    case GREEN:{   //直接判断枚举内容
     System.out.println("绿颜色");
     break ;
    }
    case BLUE:{   //直接判断枚举内容
     System.out.println("蓝颜色");
     break ;
    }
    default :{   //未知内容
     System.out.println("未知颜色");
     break ;
    }
   }
}
}

上面的Color.values()方法表示取得枚举中的全部内容,返回的是一个对象数组,这是枚举本身支持的一个方法。



---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值