注解_自定义注解_属性定义与注解_自定义注解_元注解

注解_自定义注解_属性定义

注解格式:

public @interface  注解名称{
    属性列表
}

属性:接口中的抽象方法

    要求:

    1.属性的返回值类型有下列取值

     1.基本数据类型

      int show1();

     2.String

      String show2();

     3.枚举

    public enum Person {

    p1,p2;
}

   Person per();

     4.注解  

    MyAnno2 anno2();

     5.以上类型的数组 

    String[] strs();

    2定义了属性,在使用时候需要给属性赋值

      如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值

      如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义即可

      数组赋值时,值使用{}包裹。如果数组只有一个值,则{}省略

   

package day01.Demo01_Day017.JiaoXiao;

public @interface MyAnno {
    int value();
    Person per();
    MyAnno2 anno2();
    String[] strs();

    String name() ;



}

 

package day01.Demo01_Day017.JiaoXiao;

public enum Person {
    p1,p2;
}

 

package day01.Demo01_Day017.JiaoXiao;

public @interface MyAnno2 {
}

 

package day01.Demo01_Day017.JiaoXiao;

@MyAnno(value = 12,name = "莫凡",per = Person.p1,anno2 = @MyAnno2,strs = {"abc","bbb"})
public class Worker {
}

 

 注解_自定义注解_元注解

  元注解:用于描述注解的注解

@Target
 描述注解能够作用的位置
  ElementType取值:
    TYPE:可以作用于类上
    METHOD:可以作用与方法上
    FIELD:可以作用于成员变量上
@Retention
 描述注解被保留的阶段
    @Retention(RetentionPolicy.RUNTIME)当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
@Documented
 描述注解是否被抽取到api文档 
@Inherited:描述注解是否被子类继承
package day01.Demo01_Day017.JiaoXiao;

import java.lang.annotation.*;

/**
 *
 元注解:用于描述注解的注解

 @Target
  描述注解能够作用的位置
 @Retention
  描述注解被保留的阶段
 @Documented
  描述注解是否被抽取到api文档 
 @Inherited:描述注解是否被子类继承
 *
 */
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnno3 {


}

 

package day01.Demo01_Day017.JiaoXiao;

@MyAnno(value = 12,name = "莫凡",per = Person.p1,anno2 = @MyAnno2,strs = {"abc","bbb"})
@MyAnno3
public class Worker {
    @MyAnno3
    public String name ="aaa";
    @MyAnno3
    public void add(){

    }
}

 



  

posted @ 2022-10-14 10:11  zj勇敢飞,xx永相随  阅读(25)  评论(0编辑  收藏  举报