Java基础:注解

本文详细介绍了Java中的注解及其用途,包括在JavaSE和JavaEE中的应用,以及如何自定义注解。注解是元数据的一种形式,用于提供编译时和运行时的信息。在Java8中,注解新增了可重复注解和类型注解的特性。自定义注解需要结合反射机制来实现其功能,并通过@Retention和@Target元注解来控制注解的生命周期和适用范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注解

  • 注解的使用 Annotation jdk5.0新特性

  • 注解(Annotation)其实就是代码中的特殊标记,这些标记可以在编译,类加载,运行时被读取
    程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息

  • JavaSE中,注解的使用主要是:标记过时的功能,忽略警告等,JavaEE中注解较为重要
    用于配置程序的任何切面,代替JavaEE(JavaWeb)中的xml文件配置问题

  • 框架 = 注解 + 反射机制 + 设计模式

如何自定义注解

  • 参照@SupperssWarnings定义
    • 注解声明:@interface
    • 内部定义成员,同城使用value表示
    • 可以指定成员的默认值,使用default定义
    • 自定义注解没有成员,表明是一个标识作用
    • 如果注解有成员,使用时必须指明成员值
public @interface MyAnnotation {
   String value() default "注解";
}
  • 自定义注解必须配上注解的信息处理流程(使用反射)才有意义
  • 自定义注解通过都会指明两个元注解:@Retention@Target

元注解

SOURCE:反编译时看不到注解信息

CLASS:反编译时注解信息同时反编译

简单来说就是注解信息会不会生成class文件

/* 
 *	jdk 提供的四种元注解
 *      元注解:对现有的注解进行解释说明的注解
 *      Retention:指定所修饰的Annotation的生命周期:SOURCE\CLASS(默认行为)\RUNTIME
 *                  只有声明为RUNTIME生命周期的注解,才能通过反射获取
 *      Target:用于指定被修饰的Annotation能用于修饰哪些程序元素
 *
 *      Documented:表示修饰的注解在被javadoc解析是,将被保留
 *      Inherited:被他修饰的Annotation将具有继承行
 */

@Repeatable(MyAnnotations.class)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})
public @interface MyAnnotation {
    String value() default "注解";
}

注解新特性 jdk8.0

可重复注解

   /*      jdk8.0 注解新特性:
    *
    *        可重复注解
    *       在MyAnnotation上声明 @Repeatable,成员值为 MyAnnotations.class
    *       MyAnnotation的Target和Retention等元注解与MyAnnotations相同。
    *
    *       类型注解
    *       ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明。)
    *      ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。
    */

    public class Annotation {

        @MyAnnotation(value = "注解")
        @MyAnnotation(value = "多重注解")
        @Test
        public void test(){
            System.out.println("注解测试");
        }
    }

MyAnnotation

@Repeatable(MyAnnotations.class)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})
public @interface MyAnnotation {
    String value() default "注解";
}

MyAnnotations

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})
public @interface MyAnnotations {
    MyAnnotation[] value();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King'sLanding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值