java注解

注解格式

public @interface 注解名称{}
注解的本质是一个接口,该注解默认继承Annotation接口。
属性格式:

public @interface anno {
    //无默认值
    String name();
    //有默认值
    int age()default 18;
    String gender() default "男";
}

适用数据类型:
1.八种基本数据类型。
2.String类型,Class类型,枚举类型,注解类型。
3.以上所有类型的一维数组。
注解的基本使用:

public @interface b {
}
public @interface anno {
    //无默认值
    String name();
    //有默认值
    int age()default 18;
    String gender() default "男";
    b bbb();
}
public class a {
    @anno(name = "zhangsan",age = 28,gender = "女",bbb=@b)
    public void BBB(){
    }
}

注意事项:
1.当注解中只有一个属性名且属性名是value,无论是单元素还是数组类型,都可以直接赋值。

public @interface anno {
    //属性值为value
    String value();
}
public class a {
    @anno("zhangsan")
    public void BBB(){
    }
}

2.如果还有其他非value属性的其他属性,至少一个属性没有默认值,则再使用注解给属性赋值时value属性名不能省略。

元注解

元注解限制注解的注解(限制注解使用的范围和注解的生命周期)
@Target(限制注解的使用范围,默认再任何地方都能使用)

@Target(ElementType.TYPE)
//限制注解再类上
public @interface anno {
    //属性值为value
    String value();
}
@anno("zhangsan")
public class a {
    @Test
    public void BBB(){
    }
}

ElementType类型有。
TYPE: 用在类,接口上
FIELD:用在成员变量上
METHOD: 用在方法上
PARAMETER:用在参数上
CONSTRUCTOR:用在构造方法上
LOCAL_VARIABLE:用在局部变量上
@Retention
SOURCE:注解只存在于Java源代码中,编译生成的字节码文件中就不存在了。
CLASS:注解存在于Java源代码、编译以后的字节码文件中,运行的时候内存中没有,默认值。
RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取该注解。

获取注解数据

设置注解的生命周期为RUNTIME,通过反射获取注解上的数据。

//设置注解的作用范围
@Target(ElementType.TYPE)
//设置注解的生命周期
@Retention(RetentionPolicy.RUNTIME)
public @interface book {
    String name();
    String[] author();
}
@book(name = "java",author = {"张三"})
public class BookStore {
    public static void main(String[] args) throws ClassNotFoundException {
        //注解在运行时期有效,通过反射获取
        Class<?> clazz = Class.forName("com.jinkai.base.BookStore");
        //判断类上是否有注解
        if (clazz.isAnnotationPresent(book.class)){
            //获取注解对象
            book bo = clazz.getAnnotation(book.class);
            //获取注解属性
            String name = bo.name();
            System.out.println(name);
            String[] author = bo.author();
            System.out.println(author);

        }
    }
}

如果注解在方法上可以通过反射获取方法,在获取注解对象,进而获取注解的属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值