注解

2020-09-09  本文已影响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:用于描述注解的范围


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();

}
上一篇下一篇

猜你喜欢

热点阅读