在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

java枚举类

2017-2-9 13:06| 发布者: zhangjf| 查看: 642| 评论: 0

摘要: 原文 http://www.cnblogs.com/xujiming/p/4638494.html 枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰。 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。 若枚举类显 ...
原文 http://www.cnblogs.com/xujiming/p/4638494.html

枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰。

枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。

若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。

必须在枚举类的第一行声明枚举类对象。

枚举类和普通类的区别:

1.使用 enum 定义的枚举类默认继承了 java.lang.Enum 类

2.枚举类的构造器只能使用 private 访问控制符

3.枚举类的所有实例必须在枚举类中显式列出(以,分隔 以; 结尾). 列出的实例系统会自动添加 public static final 修饰

JDK1.5之前需要自定义枚举类:

  1. /*枚举类的自定义方式*/
  2. public class TestSeason {
  3. public static void main(String[] args){
  4. Season spring=Season.SPRING;
  5. System.out.println(spring);
  6. System.out.println(spring.getSeasonName());
  7. }
  8. }
  9. //枚举类
  10. class Season{
  11. //1.提供类的属性,声明为private final
  12. private final String seasonName;
  13. private final String seasonDesc;
  14. //2.声明为final的属性,在构造器中初始化
  15. private Season(String seasonName,String seasonDesc){
  16. this.seasonName=seasonName;
  17. this.seasonDesc=seasonDesc;
  18. }
  19. public static final Season SPRING=new Season("spring","春暖花开");
  20. public static final Season SUMMER=new Season("summer","夏日炎炎");
  21. public static final Season AUTOMN=new Season("automn","秋高气爽");
  22. public static final Season WINTER=new Season("winter","白雪皑皑");
  23. //通过公共的方法来调用属性
  24. public String getSeasonName() {
  25. return seasonName;
  26. }
  27. public String getSeasonDesc() {
  28. return seasonDesc;
  29. }
  30. @Override
  31. public String toString() {
  32. return "Season [seasonName=" + seasonName + ", seasonDesc="
  33. + seasonDesc + "]";
  34. }
  35. }
复制代码

JDK 1.5 新增的 enum 关键字用于定义枚举类:

枚举类的主要方法:

1.values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。

2.valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常。

若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法

  1. /*
  2. * 一.枚举类
  3. * 1.如何自定义枚举类
  4. * 2.如何使用enum关键字定义枚举类
  5. * 常用的方法;values(),valueOf(String str)
  6. * 如何使枚举类实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同(相当于每个对象重写抽象方法)
  7. * */
  8. public class TestSeason1{
  9. public static void main(String[] args){
  10. SeasonEnum spring=SeasonEnum.SPRING;
  11. System.out.println(spring);
  12. System.out.println(spring.getSeasonName());
  13. //1.values方法可以返回枚举类型的对象数组,可以方便遍历所有的枚举值
  14. SeasonEnum[] seasons=SeasonEnum.values();
  15. for(int i=0;i<seasons.length;i++){
  16. System.out.println(seasons[i]);
  17. }
  18. //2.valueOf方法可以把一个字符串转为对应的枚举类对象,要求字符串必须是枚举类对象的“名字”
  19. String str="WINTER";
  20. SeasonEnum sea=SeasonEnum.valueOf(str);
  21. System.out.println(sea);
  22. //不同的枚举类对象调用重写的show方法得到不同的效果
  23. spring.show();
  24. sea.show();
  25. }
  26. }
  27. //接口
  28. interface Info{
  29. public void show();
  30. }
  31. //实现接口的枚举类
  32. enum SeasonEnum implements Info{
  33. //必须在枚举类的第一行声明枚举类对象
  34. SPRING("spring","春暖花开"){
  35. public void show(){
  36. System.out.println("春天在哪里");
  37. }
  38. },
  39. SUMMER("summer","夏日炎炎"){
  40. public void show(){
  41. System.out.println("生如夏花");
  42. }
  43. },
  44. AUTOMN("autumn","秋高气爽"){
  45. public void show(){
  46. System.out.println("金色的秋天");
  47. }
  48. },
  49. WINTER("winter","白雪皑皑"){
  50. public void show(){
  51. System.out.println("冬天里的一把火");
  52. }
  53. };
  54. private final String seasonName;
  55. private final String seasonDesc;
  56. private SeasonEnum(String seasonName, String seasonDesc) {
  57. this.seasonName = seasonName;
  58. this.seasonDesc = seasonDesc;
  59. }
  60. public String getSeasonName() {
  61. return seasonName;
  62. }
  63. public String getSeasonDesc() {
  64. return seasonDesc;
  65. }
  66. }
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-10 02:53

Copyright 2015-2025 djqfx

返回顶部