Java基础(十三):枚举、注解

文章目录

  • 一、设置@author标签
  • 二、枚举(enum)
    • (一)枚举的两种实现方式:
    • (二)enum常用方法
  • 三、注解

一、设置@author标签

设置@author等标签,以后每次创建一个类,自动带着作者信息
Java基础(十三):枚举、注解_第1张图片

二、枚举(enum)

枚举表示一组常量的集合,枚举是一种特殊的类,里面只包含一组有限的特定的对象。枚举是只读,不可修改的。
理解:比如一个季节类,只能是春夏秋冬,没有其他对象,所以使用枚举完成这个。

(一)枚举的两种实现方式:

  1. 自定义类实现枚举
public class Test {
    public static void main(String[] args){
        System.out.println(Season.SPRING);
    }
}
// 1.构造器私有化,防止直接new
// 2.去掉setXxx方法,防止属性被修改
// 3.在类内直接创建一组固定对象(对象名一般大写)
// 4.优化:可以加入final修饰对象
class Season{
    private String name;
    private String description;
    public static final Season SPRING = new Season("春天","温暖");
    public static final Season SUMMER = new Season("夏天","炎热");
    public static final Season AUTUMN = new Season("秋天","凉爽");
    public static final Season WINTER = new Season("冬天","寒冷");
    private Season(String name, String description) {
        this.name = name;
        this.description = description;
    }
    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}
输出:Season{name='春天', description='温暖'}
  1. 使用enum关键字实现枚举【常用】:
public class Test {
    public static void main(String[] args){
        System.out.println(Season.SUMMER);
    }
}
// 1.使用enum代替class
// 2.直接使用 对象名(参数列表) 表示,注意:要放在枚举类内开头
// 3.对象之间以逗号分隔
// 4.无参构造器可以直接使用 对象名 表示,省略() 
enum Season{
    SPRING("春天","温暖"), SUMMER("夏天","炎热"), AUTUMN("秋天","凉爽"), WINTER("冬天","寒冷"), WHAT;//WHAT 等价于 WHAT()
    private String name;
    private String description;
    private Season() { }
    private Season(String name, String description) {
        this.name = name;
        this.description = description;
    }
    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}
输出:Season{name='夏天', description='炎热'}

(二)enum常用方法

public class Test {
    public static void main(String[] args){
        Season autumn = Season.AUTUMN;
        // 1.name():输出枚举对象的名字
        System.out.println(autumn.name());
        // 2.ordinal():输出枚举对象的次序(从0开始编号)
        System.out.println(autumn.ordinal());
        // 3.values():以数组形式返回定义的枚举对象
        Season[] valuse = Season.values();
        for(Season season: valuse){
            System.out.println(season);
        }
        // 4.valueOf(字符串):查找字符串的枚举对象,要求字符串是已有的枚举常量,否则报错
        System.out.println(Season.valueOf("SPRING"));
        // 5.compareTo():返回两个枚举对象的编号之差
        System.out.println(Season.SPRING.compareTo(Season.AUTUMN));
        // 6.toString():返回当前枚举对象的名称,若重写这个方法,则按重写输出
        //  实际Season.AUTUMN 等价于 Season.AUTUMN.toString(),即toString()可省略
        System.out.println(autumn.toString());
    }
}
输出:
AUTUMN
2
Season{name='春天', description='温暖'}
Season{name='夏天', description='炎热'}
Season{name='秋天', description='凉爽'}
Season{name='冬天', description='寒冷'}
Season{name='春天', description='温暖'}
-2
Season{name='秋天', description='凉爽'}

使用细则:

  1. 使用enum关键字后,不能继承
  2. enum实现的枚举类,仍然是一个类,可以实现接口

三、注解

1)注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。
2)和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
3)在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替java EE旧版中所遗留的繁冗代码和XML配置等。

三个基本的注解:
1)@Override:限定某个方法,是重写父类方法,该注解只能用于方法
2)@Deprecated:用于表示某个程序元素(类、方法、包、参数等)已过时,不推荐使用,但是可以用(作用:版本升级的过渡)
3)@SuppressWarnings:抑制编译器警告(即不显示一些警告信息)

四种元注解(修饰注解的注解):

  1. @Retention(保留):指定注解的作用范围,@Retention的三种值:
    1)RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注释
    2)RetentionPolicy.CLASS:编译器将把注解记录在class文件中。当运行Java程序时,JVM不会保留注解,这是默认值。
    3)RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中。当运行Java程序时,JVM会保留注解,程序可以通过反射获取该注解。

  2. @Target:指定注解可以在哪些地方使用

  3. @Documented:指定该注解是否会在javadoc体现

  4. @Inherited:子类会继承父类注解

特别说明
本文章是个人整理的学习笔记,参考b站韩顺平老师的课程(【零基础 快速学Java】韩顺平 零基础30天学会Java)。老师讲的非常好,有兴趣的可以去看一下。

你可能感兴趣的:(Java基础,java,开发语言)