注解

注解

内置注解

  • @override:表示一个方法声明打算重写超类中的另一个方法声明

  • @Deprecated:表示不鼓励程序员使用的元素,通常它有危险或存在更好的选择,但可以用。

  • @SuppressWarnings:镇压警告信息,带参数使用

    • @SuppressWarnings("all"):镇压所有警告。

    • @SuppressWarnings("all"):镇压未检查警告。

      ......

元注解

  • 解释其他注解的注解,本质还是注解
  • java定义了四个元注解:
    • @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
    • @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(表示在什么时候有效)
      • (SOURCE<CLASS<RUNTIME)
    • @Document:说明该注解将被包含在javadoc中
    • @Inherited:说明子类可以继承父类中的该注解

自定义注解

  • 使用@interface自定义注解时,自动继承了java.,long.annotation.Annotation接口
  • 分析
    • @interface用来声明一个注解,格式:public @interface 注解名
    • 其中的每一个方法实际上是声明了一个配置参数
    • 方法的名称就是参数的名称
    • 返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum)
    • 可以通过default来声明参数的默认值
    • 如果只有一个参数,一般参数名为value
    • 注解元素必须要有值,我们定义注解元素是,经常使用空字符串,0作为默认值
package com.Lv.Test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Author: Lv
 * @Description:自定义注解
 * @Vision: 1.0
 * @Date: Created in 9:20 2020/7/6
 */
public class Test01 {
    //注解可以显式赋值,如果没有默认值,我们就必须给注解赋值
    @MyAnnotation(age = 18,name = "Lv")
    public void test(){}

    @MyAnnotation02("hello")   //如果参数只有一个值,且定义为value,那么这里可以不用写参数名
    public void test02(){}
}

@Target({ElementType.TYPE,ElementType.METHOD})   //定义这个注解可以用于方法
@Retention(RetentionPolicy.RUNTIME)   //定义运行时有效
@interface MyAnnotation {
    //注解的参数:参数类型 + 参数名();
    String name();
    int age() default 0;
    int id() default -1;   //默认值如果为-1,代表不存在

    String[] schools() default {"清华大学"};
}
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation02 {
    String value();
}
posted @ 2020-07-06 10:08  我是橘子  阅读(109)  评论(0编辑  收藏  举报