java学习 枚举和注解

2022年8月11日09:17:59

枚举

自定义类实现枚举

步骤:
1.不需要提供setxxx方法,因为枚举对象的属性只需读。

2.对枚举对象使用 final + static修饰,实现底层优化。

3.枚举对象名通常全部使用大写,这是一个命名规范。

4.构造器私有化,但是对象向外暴露。

package Enum;publicclassDefineMyself{publicstaticvoidmain(String[] args){
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);}}classSeason{private String name;private String weather;publicstatic final SeasonSPRING=newSeason("春天","温暖");publicstatic final SeasonSUMMER=newSeason("夏天","炎热");privateSeason(String name, String weather){this.name= name;this.weather= weather;}public StringgetName(){return name;}public StringgetWeather(){return weather;}

    @Overridepublic StringtoString(){return"Season{"+"name='"+ name+'\''+", weather='"+ weather+'\''+'}';}}

使用enum关键字实现枚举

1.但我们使用enum关键字来创建一个枚举类时,默认会继承Enum类,同时该类使用了final修饰。

2.传统的 public static final Season SPRING = new Season(“春天”,“温暖”); 变成了SPRING(“春天”,“温暖”),我们要注意它调用的是哪一个构造器。

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

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

package Enum;publicclassDefineMyself{publicstaticvoidmain(String[] args){
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);}}enum Season{SPRING("春天","温暖"),SUMMER("夏天","炎热");public String name;public String weather;privateSeason(String name, String weather){this.name= name;this.weather= weather;}public StringgetName(){return name;}public StringgetWeather(){return weather;}

    @Overridepublic StringtoString(){return"Season{"+"name='"+ name+'\''+", weather='"+ weather+'\''+'}';}}

注意使用enum关键字创建枚举类时对象依然有 static 和 final 修饰
java学习 枚举和注解

enum常用方法举例

java学习 枚举和注解
values : 返回当前枚举类中的所有常量。返回的是一个数组。

classUntitled{publicstaticvoidmain(String[] args){
		Season season= Season.SPRING;
		System.out.println(season.name());
		System.out.println(season.ordinal());//输出0
		Season[] seasons= Season.values();for(Season s1: seasons){
			System.out.println(s1);//输出SPRING和SUMMER}
		Season value= Season.valueOf("SPRING");
		System.out.println(value);//输出SPRING
		System.out.println(season.compareTo(Season.SUMMER));//0-1=-1,输出-1}}enum Season{SPRING("春天","温暖"),SUMMER("夏天","炎热");private String name;private String weather;privateSeason(String name,String weather){this.name= name;this.weather= weather;}}

使用细节

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

2.枚举类和普通类一样,可以实现接口。

enum 类名implements 接口1,接口2{};

注解

注解的理解

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

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

使用Annotation时要在前面加@符号,并把Annotation当成修饰符使用,用于修饰它支持的程序元素。

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

说明:如果使用了@Override,则接下来的方法必须重写父类方法,如果没有,那么编译器会报错。

//@Override的源码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)public @interfaceOverride{}

注意:@interface表示一个注解类,不是接口。
@Target是修饰注解的注解,称为元注解。

2.@Deprecated : 用于表示某个程序元素(类,方法等)已经过时。

package annotation_;publicclassdeprecated_{publicstaticvoidmain(String[] args){//A上出现一个横线,表示过时,不推荐使用,但是仍可以使用A a=newA();}}
@DeprecatedclassA{public int n1;}

@Deprecated可以用作JDK新旧版本的兼容和过渡使用。

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

package annotation_;import java.util.ArrayList;import java.util.List;
@SuppressWarnings({"all"})publicclassSuppressWarnings_{publicstaticvoidmain(String[] args){
        int i=0;
        List list=newArrayList();
        list.add("jack");}}//作用的类型TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE//可以传入一个数组/*
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    String[] value();
}
 */

元注解

JDK 的元 Annotation 用于修饰其他 Annotation,可以增强对源代码的理解

元注解的种类:

(1) Retention //指定注解的作用范围,三种 SOURCE,CLASS,RUNTIME
(2) Target // 指定注解可以在哪些地方使用
(3) Documented //指定该注解是否会在 javadoc 体现
(4) Inherited //子类会继承父类注解

@Retention 注解

说明只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间, @Rentention 包含一个 RetentionPolicy 类型的成员变量, 使用 @Rentention 时必须为该 value 成员变量指定值:

@Retention 的三种值
(1) RetentionPolicy.SOURCE: 编译器使用后,直接丢弃这种策略的注释

(2) RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这是默认值

(3) RetentionPolicy.RUNTIME:编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解. 程序可以 通过反射获取该注解

@Documented

用于指定被元注解修饰的注解类将被javadoc工具提取成文档,即在生成文档时,可以看到该注解。

定义Documented的注解的Rentention必须设置为RUNTIME

  • 作者:沉迷路由器
  • 原文链接:https://blog.csdn.net/qq_49069362/article/details/120369362
    更新时间:2022年8月11日09:17:59 ,共 3847 字。