枚举,注解

  1. 枚举什么时候需要,(只读,不需要修改)
  2. 枚举是一组常量的集合
  3. 可以这样理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象
  4. 枚举实现的两种方式
    1. 自定义类实现枚举
      package com.jshedu.enum_;
      
      public class Enumeration01 {
          public static void main(String[] args) {
              System.out.println(Season.WINTER.getName());
      
      
          }
      }
      //演示自定义枚举的实现
      class Season{
          private String name;
          private String desc;
          //定义了四个对象,固定
          public static final Season SPRING = new Season("春天", "温暖");
          public static final Season WINTER = new Season("冬天", "寒冷");
          public static final Season SUMMER = new Season("夏天", "炎热");
          public static final Season AUTUMN = new Season("秋天", "凉爽");
      
      
          //1.将构造器私有化,目的防止直接new
          //2.去掉setter方法,防止属性被修改
          //3.在Season内部,直接创建固定的对象
          //4.优化,可以加入final修饰符
          private Season(String name, String desc) {
              this.name = name;
              this.desc = desc;
          }
      
          public String getName() {
              return name;
          }
      
      
      
          public String getDesc() {
              return desc;
          }
      
      }

      把固定的对象创建到类中,并且把类的构造器改成私有的,外部不能直接创建对象,把set方法删掉,以防数据被更改

    2. 不需要提供set方法,因为枚举对象值通常为只读

    3. 对枚举对象/属性使用final+static共同修饰,实现底层优化

    4. 枚举对象名通常使用全部大写

    5. 枚举根据对象,可以有多个属性。

    6. 第二种方式,enum关键字实现枚举

      package com.jshedu.enum_;
      
      /**
       * @author Mr.jia
       * @version 1.0
       */
      
      public class Enumeration02 {
          public static void main(String[] args) {
              System.out.println(Season2.WINTER);
          }
      }
      enum Season2{
      
          //定义了四个对象,固定
      //    public static final Season SPRING = new Season("春天", "温暖");
      //    public static final Season WINTER = new Season("冬天", "寒冷");
      //    public static final Season SUMMER = new Season("夏天", "炎热");
      //    public static final Season AUTUMN = new Season("秋天", "凉爽");
          //如果使用了enum来实现枚举类
          //1.使用关键字enum替代class
          //2.public static final Season SPRING = new Season("春天", "温暖");
          //  直接使用SPRING("春天","温暖");
          //3.如果有多个常量(对象),使用,号间隔即可。
          //4.如果使用enum来实现枚举,要求将定义常量对象,写在前面
      
      
          //放在前面。调用无参可以不带括号AUTUMN
          SPRING("春天","温暖"),WINTER("冬天", "寒冷"),SUMMER("夏天", "炎热"),AUTUMN;
          private String name;
          private String desc;
          private Season2(){        
          }//无参构造器
      
      
      
          private Season2(String name, String desc) {
              this.name = name;
              this.desc = desc;
          }
      
          public String getName() {
              return name;
          }
      
      
      
          public String getDesc() {
              return desc;
          }
      
          @Override
          public String toString() {
              return "Season{" +
                      "name='" + name + '\'' +
                      ", desc='" + desc + '\'' +
                      '}';
          }
      }
      

      代码变得简洁了

    7. 当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类,使用javap反编译工具看。

    8. 如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略。

    9. 枚举对象必须放在枚举类的行首。

  5. Enum类的各种方法的使用:Enum类的各种方法的使用包括:values()、valueOf()、name()和ordinal()等。其中,values()方法用于返回枚举类型的所有值,valueOf()方法用于返回指定名称的枚举常量,name()方法用于返回枚举常量的名称,而ordinal()方法则用于返回枚举常量的位置,comrpareTo比较两个枚举常量,比较的就是编号ordinal那个号。

  6. package com.jshedu.enum_;
    
    /**
     * @author Mr.jia
     * @version 1.0
     */
    
    public class Enumeration03 {
        public static void main(String[] args) {
            Week[] values = Week.values();
            
            //增强for循环,把values的值赋给value,然后输出,直到values值输出完。
            for (Week value:values
                 ) {
                System.out.println(value);
            }
    
        }
    
    }
    enum Week{
        MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三");
    
        private String name;
    
        private Week(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
        //这是返回的东西
        @Override
        public String toString() {
            return name;
        }
    }
    /*
    星期一
    星期二
    星期三
     */
    

    values()是需要for循环输出的?

  7. enum实现接口

    1. 使用enum关键字后,就不能再继承其他类了,因为enum会隐式继承Enum,而java是单继承机制

    2. 枚举类和普通类一样,可以实现接口:enum 类名 implements 接口1,接口2{}。

  8. 注解Annotation:也被称为元数据,用于修饰解释包,类,方法,属性,构造器,局部变量等数据信息。

    1. 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。

  9. 三个基本的Annotation:

    1. @Override:限定某个方法,是重写父类方法,该注解只能用于方法

      package com.jshedu.annotation;
      
      /**
       * @author Mr.jia
       * @version 1.0
       */
      
      public class Override_ {
          public static void main(String[] args) {
      
          }
      }
      class Father{
          public void fly(){
              System.out.println("Father fly...");
          }
      }
      class Son extends Father{
          //1.@Override注解放在fly方法上,表示子类的fly方法时重写了父类的fly
          //2.这里如果没有写@Override,还是重写了父类的fly
          //3.如果写了@Override注解,编译器就会去检查该方法是否重写了父类的
          //  方法,如果的确写了,则编译通过,如果没有构成重写,则编译错误。
          //4.@interface表示一个注解类。
          @Override
          public void fly() {
              System.out.println("Son fly....");
          }
          //这里父类没有see方法就会报错。ethod does not override method from its superclass
      //    @Override
      //    public void see(){
      //
      //    }
      }

    2. @Deprecated:用于表示某个成员元素(类,方法,字段,包,参数等)已过时,但不代表不能用,即不推荐使用。可以做版本升级过度使用。

    3. @SuppressWarnings:抑制编译器警告,

      1. @SuppressWarnings放在main方法,那么抑制警告的范围就是main

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值