java之枚举类和注解,java枚举类的作用

发布时间:2022-11-20

本文目录一览:

  1. java中的枚举类型指的是什么啊?
  2. [Java 什么是注解及注解原理详细介绍](#Java 什么是注解及注解原理详细介绍)
  3. [java 枚举类型怎么添加注释](#java 枚举类型怎么添加注释)
  4. Java语言中的枚举类型如何使用?
  5. java注解是怎么实现的
  6. 枚举类与注解9:类型注解(JDK8新特性)

java中的枚举类型指的是什么啊?

在Java中,枚举类型本质上其实就是一个类,枚举中的常量都是该枚举类型的实例。虽然枚举类型有一些限制,比如不能再派生出子枚举类型,不能调用构造函数,不过我们仍然可以在枚举类型中定义构造函数、字段和方法。

Java 什么是注解及注解原理详细介绍

  1. 注解是针对Java编译器的说明。 可以给Java包、类型(类、接口、枚举)、构造器、方法、域、参数和局部变量进行注解。Java编译器可以根据指令来解释注解和放弃注解,或者将注解放到编译后的生成的class文件中,运行时可用。
  2. 注解和注解类型 注解类型是一种特殊的接口类型,注解是注解注解类型的一个实例。 注解类型也有名称和成员,注解中包含的信息采用键值对形式,可以有0个或多个。
  3. Java中定义的一些注解:
  • @Override:告诉编译器这个方法要覆盖一个超类方法,防止程序员覆盖出错。
  • @Deprecated:标识方法或类(接口等类型)过期,警告用户不建议使用。
  • @SafeVarargs:JDK7新增,避免可变参数在使用泛型化时候警告“执行时期无法具体确认参数类型”,当然,也可以用@SuppressWarnings来避免检查,显然后者的抑制的范围更大。
  • @SuppressWarnings(value={"unchecked"}):抑制编译警告,应用于类型、构造器、方法、域、参数以及局部变量。value是类型数组,有效取值为:
    • all:抑制所有警告
    • boxing:抑制与装箱/拆箱操作相关的警告
    • cast:抑制与强制转换相关的警告
    • dep-ann:抑制与过期注解相关的警告
    • deprecation:抑制与过期相关的警告
    • fallthrough:抑制与switch语句中缺少break相关的警告
    • finally:抑制与finally块不返回相关的警告
    • hiding:抑制与隐藏变量相关的警告
    • incomplete-switch:抑制与switch语句中缺少枚举case相关的警告
    • javadoc:抑制与javadoc相关的警告
    • nls:抑制与非nls字符串字面量相关的警告
    • null:抑制与空分析相关的警告
    • rawtypes:抑制与原始类型使用相关的警告
    • restriction:抑制与使用受限制或禁止引用相关的警告
    • serial:抑制与可序列化类缺少serialVersionUID字段相关的警告
    • static-access:抑制与不正确的静态访问相关的警告
    • static-method:抑制与可以声明为静态的方法相关的警告
    • super:抑制与覆盖方法但没有调用super相关的警告
    • synthetic-access:抑制与未优化的内部类访问相关的警告
    • unchecked:抑制与未检查操作相关的警告
    • unqualified-field-access:抑制与未限定字段访问相关的警告
    • unused:抑制与未使用的代码和死代码相关的警告
  1. 注解的定义 使用 @interface 关键字声明一个注解:
public @interface MyAnnotation1

注解中可以定义属性:

String name default "defval";

value是注解中的特殊属性: 注解中定义的属性如果名称为 value,此属性在使用时可以省写属性名。 例如,声明一个注解:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno1 {
    String msg();
    int value();
}

java 枚举类型怎么添加注释

枚举类型添加注释是什么意思? Java 注释有:

  • 单行注释://
  • 多行注释:/* ... */
  • JavaDoc:/** ... */

Java语言中的枚举类型如何使用?

Java语言中的枚举类型的使用方法如下:

用法一:常量

public enum Color {
    RED, GREEN, BLANK, YELLOW
}

用法二:switch

enum Signal {
    GREEN, YELLOW, RED
}
public class TrafficLight {
    Signal color = Signal.RED;
    public void change() {
        switch (color) {
            case RED:
                color = Signal.GREEN;
                break;
            case YELLOW:
                color = Signal.RED;
                break;
            case GREEN:
                color = Signal.YELLOW;
                break;
        }
    }
}

用法三:向枚举中添加新方法

public enum Color {
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
    private String name;
    private int index;
    private Color(String name, int index) {
        this.name = name;
        this.index = index;
    }
    public static String getName(int index) {
        for (Color c : Color.values()) {
            if (c.getIndex() == index) {
                return c.name;
            }
        }
        return null;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getIndex() {
        return index;
    }
    public void setIndex(int index) {
        this.index = index;
    }
}

用法四:覆盖枚举的方法

public class Test {
    public enum Color {
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
        private String name;
        private int index;
        private Color(String name, int index) {
            this.name = name;
            this.index = index;
        }
        @Override
        public String toString() {
            return this.index + "_" + this.name;
        }
    }
    public static void main(String[] args) {
        System.out.println(Color.RED.toString());
    }
}

用法五:实现接口

interface Behaviour {
    void print();
    String getInfo();
}
public enum Color implements Behaviour {
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
    private String name;
    private int index;
    private Color(String name, int index) {
        this.name = name;
        this.index = index;
    }
    @Override
    public String getInfo() {
        return this.name;
    }
    @Override
    public void print() {
        System.out.println(this.index + ":" + this.name);
    }
}

用法六:使用接口组织枚举

interface Food {
    enum Coffee implements Food {
        BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
    }
    enum Dessert implements Food {
        FRUIT, CAKE, GELATO
    }
}

以上就是Java语言中枚举类型的基本使用方法。

java注解是怎么实现的

注解的使用一般是与Java的反射一起使用,下面是一个例子。 注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

自定义注解及其应用

  1. 定义一个最简单的注解:
public @interface MyAnnotation {
}
  1. 把注解加在某个类上:
@MyAnnotation
public class AnnotationTest {
}

自定义注解@MyAnnotation

package com.ljq.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 定义一个注解
 *
 * @author jiqinlin
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MyAnnotation {
    String color();
    String value() default "我是林计钦";
    int[] array() default {1, 2, 3};
    Gender gender() default Gender.MAN;
    MetaAnnotation metaAnnotation() default @MetaAnnotation(birthday="我的出身日期为1988-2-18");
}

注解测试类AnnotationTest

package com.ljq.test;
/**
 * 注解测试类
 *
 * @author jiqinlin
 */
@MyAnnotation(metaAnnotation=@MetaAnnotation(birthday = "我的出身日期为1988-2-18"), color="red", array={23, 26})
public class AnnotationTest {
    public static void main(String[] args) {
        if (AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)) {
            MyAnnotation annotation = AnnotationTest.class.getAnnotation(MyAnnotation.class);
            System.out.println(annotation);
            System.out.println(annotation.color());
            System.out.println(annotation.value());
            int[] arrs = annotation.array();
            for (int arr : arrs) {
                System.out.println(arr);
            }
            Gender gender = annotation.gender();
            System.out.println("性别为:" + gender);
            MetaAnnotation meta = annotation.metaAnnotation();
            System.out.println(meta.birthday());
        }
    }
}

枚举类Gender,模拟注解中添加枚举属性

package com.ljq.test;
/**
 * 枚举,模拟注解中添加枚举属性
 *
 * @author jiqinlin
 */
public enum Gender {
    MAN {
        public String getName() { return "男"; }
    },
    WOMEN {
        public String getName() { return "女"; }
    };
    public abstract String getName();
}

注解类MetaAnnotation,模拟注解中添加注解属性

package com.ljq.test;
/**
 * 定义一个注解,模拟注解中添加注解属性
 *
 * @author jiqinlin
 */
public @interface MetaAnnotation {
    String birthday();
}

枚举类与注解9:类型注解(JDK8新特性)

类型注解: 关于元注解@Target的参数类型ElementType枚举值多了两个:TYPE_PARAMETERTYPE_USE

  • ElementType.TYPE_PARAMETER:表示该注解能写在类型变量的声明语句中(如,泛型声明)
  • ElementType.TYPE_USE:表示该注解能写在使用类型的任何语句中。 具体举例:
MyAnnotation.java