Java-注解

1、注解的基础

Java注解的基础为4个元注解:RetentionTargetInheritedDocumented

Retention: 表明注解可以存在到的周期,有三个选项:source(源码),class(字节码),runtime(运行时),默认为class,表示从class文件到JVM中运行时,该注解会被丢弃。

public @interface Retention {
    RetentionPolicy value();
}
public enum RetentionPolicy {
    SOURCE,
    CLASS,
    RUNTIME
}

Target: 表明注解可以作用到的位置,可选的值有:类,方法,变量,参数,构造器…

public @interface Target {
    ElementType[] value();
}
public enum ElementType {
    /** 类 */
    TYPE,

    /** 变量 */
    FIELD,

    /** 方法 */
    METHOD,

    /** 参数 */
    PARAMETER,

    /** 构造器 */
    CONSTRUCTOR,

    /** 局部变量 */
    LOCAL_VARIABLE,

    /** 注解 */
    ANNOTATION_TYPE,

    /** 包 */
    PACKAGE,

    /** 类型参数 */
    TYPE_PARAMETER,

    /** 类型使用 */
    TYPE_USE
}

Inherited: 被修饰的类的子类可以通过class文件的 getAnnotations ()方法来获得父类的注解。

Documented: 被修饰的注解会生成到Javadoc中。

2、注解如何写

@Target( { ElementType.METHOD,ElementType.TYPE})// 作用方法
@Retention(RetentionPolicy.RUNTIME) 	        // 生命周期时间
@Documented 			                        // 可以被生成Javadoc
@Inherited                                      // 可以通过被注解的子类查询到
public @interface MyAnnotation {
    String value() default "";
}

@MyAnnotation("today")
public class MyAnnotationTest {

    public static void main(String[] args) throws Exception{
        Class<?> zClass = MyAnnotationTest.class;
        MyAnnotation annotation = zClass.getAnnotation(MyAnnotation.class);
        System.out.println(annotation);
        System.out.println(annotation.value());
    }
}

# 输出结果
@geek.spring.hello.hellospring.MyAnnotation(value=today)
toady

通过以上例子,我们可以通过反射来得到注解和注解内的属性。

常用的关于注解的方法:

方法名称方法名称说明
<A extends Annotation>getAnnotation(Class annotationClass)指定注解类型,有则返回这些注解,否则返回 null。
Annotation[]getAnnotations()返回存在的所有注解,包括从父类继承的。
booleanisAnnotationPresent(Class annotationClass)指定类型的注解存在于此元素上,则返回 true,否则返回 false。
Annotation[]getDeclaredAnnotations()返回直接存在于此元素上的所有注解,但是不包括父类的注解

3、注解的作用

1.编译检查

例如 @SuppressWarnings(抑制编译器给我们warning信息), @Deprecated 和 @Override (被注解的方法被覆盖)。

2.反射使用

这个上面也看到了,可以去试试。

3.生成文档

@Document能使得注解生成javadoc文档中

4.辅助程序员

例如注解@override,@Deprecated(方法过期,废弃不再使用),能很好地帮助我们理解程序。

4、Java自带注解

Java除了上面的4个基础元注解之外,还有6个基本注解,分别是 @Override , @Deprecated , @SuppressWarnings , @SafeVarargs , @FunctionalInterface , @Repeatable 。

  • @Override - 检查该方法是否是重写方法

  • @Deprecated - 标记过时方法。

  • @SuppressWarnings - 指示编译器去忽略注解处出现的警告。

  • @SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。

  • @FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。

  • @Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值