一.Java注解的定义

定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

二.最常用的注解

@Deprecated(方法过时),@SuppressWarnings(“deprecation”)(忽视过时的方法)、@Override(重载)

1.@Deprecated(方法过时)

当某方法作为jar包不想以后的人继续使用的时候,我们将它过时(@deprecated)
例如:

@Deprecated 
    public static void sayHello()
    {

        System.out.println("hi,传智博客");

    }
//过时的方法被调用会有下面横杆的提示
        AnnotationTest.sayHello();

这样用命令行编译的时候,就有警告⚠️;

如果不想有警告的话我们可以在方法前添加:

@SuppressWarnings("deprecation")
    public static void main(String[] args) {

        Test.sayHello();

    }

2.@override重载

例如:

@Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return super.hashCode();
    }

这样避免出错

@Override//假如没有重载的方法添加了override标签就会报错
    public int hashCode(Object obj) {
        // TODO Auto-generated method stub
        return super.hashCode();
    }

接下来开始注解的入门了

注解就相当于一个要调用的一个类,要在源程序中应用某个注解,得先准备某个注解,得先准备好了这个注解类.

java 加注解在其他类之后 java注解deprecated_Java

自定义注解及其应用

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

可是,使用方式回去该注解的时候不存在

  • 因为根据发射测试的问题,引出@Retention元注解的讲解
    ,其三种取值:
public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     *注解在编译就被抛弃了,只存在于源文件中
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     * 注解记录在class文件中编译中,不过不能再虚拟机和运行中保留,这个是默认的行为
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     * Anntations are to be recorded in the class
     * file by the compiler and retained by the VM at run time,so they may read reflectively
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

限定注解的范围 @Taget(ElemetType.xxx)

public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Formal parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
}

以上就


学习了注解的定义,使用范围,和通过反射获得注解,之后就是注解的应用了


三.注解的应用

属性的定义:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)//限制注解的使用范围
public @interface ItcastAnnotation {

     String value() defailt "red";//这个是默认的值

     String color();

     String[] strArr();
}

使用的时候

@ItcastAnnotation(color=”red”,value=”“,strArr={“x”,”2”})
public class AnnotationTest {

public static void main(String[] args) {
    //检查某个注解是否存在
    boolean present = AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class);
    if(present){
        ItcastAnnotation annotation = AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
        //获得上面的属性
        annotation.color();
        annotation.value();
        annotation.strArr();
    }
}

}