美文网首页
Java-注解

Java-注解

作者: 指尖轻敲 | 来源:发表于2019-02-09 18:13 被阅读91次

    一、JDK自带注解

    我们最常见的就是@Override,表示方法重写,覆盖父元素的该方法。

    @Override
    public String toString() {
        return super.toString();
    }
    

    除此之外还有Deprecated@Suppvisewarnings,上代码,

    public class Person {
        @Deprecated
        public void sayHello(){
            System.out.println(123);
        }
    }
    

    这里定义了一个sayHello的方法,并且用@Deprecated修饰了,用来表示该方法即将被废除,不推荐使用了。调用的时候会有删除提示。

    image.png

    但是如果我就想用怎么办呢?也可以,添加一个忽略的注解。

    public class Boy {
        @SuppressWarnings("deprecation")
        public static void main(String args[]){
            Person person = new Person();
            person.sayHello();
        }
    }
    

    二、自定义注解

    首先自定义注解的语法有一定的要求:

    • 使用@interface关键字声明

    • 成员声明需要无参数,无异常;可以指定默认值

    • 成员的类型有一定的限制:原始类型、String、Class、Annotation(注解接口)、Enumeration(枚举接口)

    • 没有任何成员的注解为“标识注解”

    Description.java:

    import java.lang.annotation.*;
    
    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface Description {
        String name(); //无参数
        int age() default 19; //默认值
    }
    

    前面带@号的一些注解为元注解

    1. @Target:指定注解的作用域,这里是用在(METHOD)方法上和(TYPE)类上。
    使用注解的类中.png

    如果用在了没有指定的作用域上(这里是成员变量),就会报错

    1. @Retention:注解的生命周期,包括:SOURCE(源码中显示)、CLASS (编译到.class文件中)、RUNTIME(运行中,可以通过反射读取)
    Class c = Class.forName("Use");
    // 判断使用Use这个类中是否有Description这样一个类注解
    boolean isExit = c.isAnnotationPresent(Description.class);
    
    1. @Inherited:允许子类继承,仅限作用在类上的注解

    2. @Documented:生成javadoc时会包含注解。(此注解就是上面说的标识注解,没有任何成员)

    相关文章

      网友评论

          本文标题:Java-注解

          本文链接:https://www.haomeiwen.com/subject/owvfdqtx.html