我爱java系列---【自定义注解】

一、注解概述

1.定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、
  接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素
  进行说明,注释。
2.作用分类:
  编写文档:通过代码里标识的注解生成文档【例如,生成文档doc文档】
  代码分析:通过代码里标识的注解对代码进行分析【例如,注解的反射】
  编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【例如,Override】
3.常见注解
  1. @author:用来标识作者名
  2. @version:用于标识对象的版本号,适用范围:文件、类、方法。
  3. @Override :用来修饰方法声明,告诉编译器该方法是重写父类中的方法,如果父类不存在该方法,则编译失败。
4.自定义注解
/*
    自定义注解
        1.格式
            public @interface 注解名称 {
                属性集
            }
        2.分类
            (1)空注解: 没有属性集
 */
public @interface MyAnno01 {
}
/*
    自定义注解
        1.格式
            public @interface 注解名称 {
                属性集
            }
        2.分类
            (2)有属性集的注解
                属性的定义格式:
                数据类型 属性名称();    //没有默认值
                数据类型 属性名称() default 默认值;    //有默认值,default后面的内容
            (3)属性的类型都有哪些?
                8种基本类型,String,枚举(不用),Class类型,注解类型
                以及以上任意类型的一维数组   int[]
 */
public @interface MyAnno02 {
    String name();
    int age() default 18;
    String[] hobbies();//爱好
    MyAnno01 anno();//注解类型
}
/*
    3.自定义注解使用的注意事项
        1.空注解可以直接使用
        2.一个注解只能在一个位置上使用一次,一个位置上可以使用多个不同的注解
        3.如果注解有属性 ,那么必须给属性赋值才能使用  键值对的方式赋值 属性名=属性值 多个属性,隔开
          如果属性是数组类型 并且只有一个属性值 那么{}可以省略 如果多个属性值 {}不能省略
        4.如果属性没有默认值 必须赋值 如果有默认值 可以不赋值
        5.如果一个注解中 只有一个属性 并且这个属性叫value 那么赋值时可以省略属性名      尤其要注意的--------------
 */
public class Demo07AnnotationNotice {
    @MyAnno01
    //@MyAnno01 //同一个位置,只能使用一次
    @MyAnno02(name = "少年攻城狮",hobbies = "学习java",anno = @MyAnno01)
    @MyAnno03("少年")
    @MyAnno04
    public void method() {

    }
}
/*
    5.如果一个注解中 只有一个属性 并且这个属性叫value 那么赋值时可以省略属性名      尤其要注意的--------------
 */
public @interface MyAnno03 {
    String value();//没有默认值
}
public @interface MyAnno04 {
    String value() default "少年攻城狮";//有默认值
}

自定义注解实例:

/*
    定义一个注解:Book
        - 包含属性:String value()   书名
        - 包含属性:double price()  价格,默认值为 100
        - 包含属性:String[] authors() 多位作者
 */
public @interface Book {
    String value();
    double price() default 100;
    String[] authors();
}

自定义注解的使用示范:

/*
    自定义Book注解并使用案例

        定义一个注解:Book
        - 包含属性:String value()   书名
        - 包含属性:double price()  价格,默认值为 100
        - 包含属性:String[] authors() 多位作者
 */
@Book(value="我爱java系列",price = 1000,authors = {"少年","少女"})
public class Demo08AnnotationBook {
    @Book(value = "少年启示录",authors = "伟哥")
    public void method() {

    }
}

猜你喜欢

转载自www.cnblogs.com/hujunwei/p/12616890.html
今日推荐