注解

作者: 洛玖言 | 来源:发表于2020-09-09 21:07 被阅读0次

    Java注解

    • 注解
    • 元注解
    • 自定义注解
    public class Test1 extends Object {
    
        //@override 重写的注释
        @Override
        public String toString() {
            return super.toString();
        }
    
        // @Deprecated
        // 不推荐程序员使用,但是可以使用,或者有更好的方法
        @Deprecated
        public static void test() {
            System.out.println("可以用");
        }
    
        @SuppressWarnings("all")
        // 抑制编译时的警告信息.
        public void test2() {
            List list = new ArrayList
        }
    
    }
    

    元注解:负责注解其他注解

    共有4个标准的meta-annotation类型

    • @Target
    • @Retention
    • @Documented
    • @Inherited

    @Target:用于描述注解的范围

    
    import java.lang.annotation.*;
    
    
    public class Test02 {
    
        @MyAnnotation
        public void test(){
    
        }
    }
    
    
    // 定义一个注解
    // Target用来表示我们注解可以用在哪些地方
    @Target(value = {ElementType.METHOD,ElementType.TYPE})
    
    // Retention 表示我们的注解在什么地方还有效
    // runtime > class > source
    @Retention(value = RetentionPolicy.RUNTIME)
    
    // Documented 表示是否将我们的注解升成在Javadoc中
    @Documented
    
    // Inherited 表示子类可以继承父类中的注解
    @Inherited
    @interface MyAnnotation{
    
    }
    

    @interface 自定义注解时,自动继承了java.lang.annotation.Annotation

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    
    // 自定义注解
    public class Test03 {
    
    //   注解可以显示赋值,如果没有默认值,我们必须给注解赋值
        @MyAnnotation2(name = "luoqi")
        public void test() {}
    
    //    如果注解只有一个参数,且命名为value,则可以省略
        @MyAnnotation3("123")
        public void  test2() {
    
        }
    }
    
    
    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnnotation2{
    //    注解的参数:参数类型 + 参数名
        String name() default  "";
        int age() default 0;
        int id() default -1;// 如果默认值为-1 ,代表不存在
    
        String[] schools() default  {"山东大学"};
    }
    
    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface  MyAnnotation3{
    //    如果只有一个方法,建议用value命名
        String value();
    
    }
    

    相关文章

      网友评论

          本文标题:注解

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