简单、快速教你自定义注解

简介: 简单、快速教你自定义注解

@[toc]


一、注解

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、
接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素
进行说明,注释。

  • @Target
  • @Retention

自定义注解作用:
可以指定含有注解的方法执行,可以指定参数。

1、元注解之@Target

作用:指明此注解用在哪个位置,如果不写默认是任何地方都可以使用。
可选的参数值在枚举类ElemenetType中包括:

  • TYPE: 用在类,接口上
  • FIELD:用在成员变量上
  • METHOD: 用在方法上
  • PARAMETER:用在参数上
  • CONSTRUCTOR:用在构造方法上
  • LOCAL_VARIABLE:用在局部变量上

2、元注解之@Retention

作用:定义该注解的生命周期(有效范围)。
可选的参数值在枚举类型RetentionPolicy中包括

  • SOURCE:注解只存在于Java源代码中,编译生成的字节码文件中就不存在了。
  • CLASS:注解存在于Java源代码、编译以后的字节码文件中,运行的时候内存中没有,默认值。
  • RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取注解。

二、注解的属性

1、属性的作用

可以让用户在使用注解时传递参数,让注解的功能更加强大。

2、属性的格式

格式1:数据类型 属性名();
格式2:数据类型 属性名() default 默认值;

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

3、定义案例

public @interface Student { 
      // 姓名
    String name(); 
    // 年龄 
    int age() default 18; 
    // 性别
    String gender() default "男"; 
}// 该注解就有了三个属性:name,age,gender

4、属性适用的数据类型

八种基本数据类型(int,flfloat,boolean,byte,double,char,long,short)

String类型,Class类型,枚举类型,注解类型

以上所有类型的一维数组

三、完整代码

注解MyAnnotation

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

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    // 多位作者
    String[] authors();
    // 书名
    String value()default "暮光之城";
    // 价格
    double price() default 100;
}

具体使用类TestAnnotation

public class TestAnnotation {
    //有注解的被调用执行,并获取注解中的值
    @MyAnnotation(authors = "张三")
    public void test01() {
        System.out.println("Test MyAnnotation");
    }
    //没有注解的不执行
    public void test02() {
        System.out.println("I am Test02");
    }
}

测试类Test

import java.lang.reflect.Method;
public class Test {
    public static void main(String[] args) throws Exception {
    //执行方法
        TestAnnotation obj = new TestAnnotation();
        run(obj);
    }
  
    //执行含有注解的方法
    public static void run(Object obj) throws Exception {
      //利用反射获取成员方法
        Method[] methods = obj.getClass().getMethods();
        for (Method m : methods) {
          //从方法中获取含有指定注解
            MyAnnotation my = m.getDeclaredAnnotation(MyAnnotation.class);
            if (my != null) {
              //获取注解的参数
                System.out.println("书名为:" + my.value());
                System.out.println("作者为:" + (my.authors())[0]);
                System.out.println("价格为:" + my.price());
              //执行含有注解的方法
                m.invoke(obj);
            }
        }
    }
}

四、下载地址

CSDN

https://download.csdn.net/download/weixin_44624117/12897925
目录
相关文章
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
590 212
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
234 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
828 60
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1217 157
|
6天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
514 109