注解的学习笔记

本文详细介绍了Java中的注解,包括其作用、元注解如Retention和Target的用法,以及如何创建和使用自定义注解。重点讲解了元数据的提供、配置控制功能和注解在编译时和运行时的应用。还展示了如何通过注解处理器处理带有注解的方法。
摘要由CSDN通过智能技术生成

注解:

注解是元数据的一种形式,它提供了关于程序代码的额外信息。注解通常以特殊的注释语法编写,它们可以被附加到类、方法、字段等程序元素上,用于提供关于这些元素的额外信息或指令。

注解的作用:提供元数据信息:注解可以用于提供关于程序元素(如类、方法、变量)的元数据信息,这些信息可以在编译时、运行时或工具处理时使用。配置和控制:注解可以用于配置和控制程序的行为。通过在类或方法上添加特定的注解,可以告诉编译器或运行时环境执行特定的操作。代码生成:某些注解可以用于生成额外的代码或配置文件。


元注解:

元注解是一种注解的注解,它用于描述其他注解。

@Retention: 只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间,@Rentention 包含一个 RetentionPolicy 类型的成员变量, 使用 @Rentention 时必须为该 value 成员变量指定值(值有三种)。

  (1)RetentionPolicy.SOURCE: 编译器使用后,直接丢弃这种策略的注释。

  (2)RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中 . 当运行 Java 程序时 , JVM 不会保留注解。这是默认值。

  (3)RetentionPolicy.RUNTIME: 编译器将把注解记录在 class 文件中 . 当运行 Java 程序时 , JVM 会保留注解。程序可以通过反射获取该注解。

@Target:用于修饰 Annotation 定义,指定被修饰的 Annotation 能用于修饰哪些程序元素。

用于描述注解的使用范围,也就是注解可以用在什么地方,取值有:

CONSTRUCTOR:用于描述构造器。

FIELD:用于描述字段。

LOCAL_VARIABLE:用于描述局部变量。

METHOD:用于描述方法。

PACKAGE:用于描述包。

PARAMETER:用于描述参数。

TYPE:用于描述类,包括class,interface,enum。

@Inherited:使被它修饰的注解具有继承性(如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解)。。

@Documented

将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。它是一个标记注解,没有成员。

定义注解

图片来源:注解和反射-KuangStudy-文章

//自定义注解
public class Demo03_CustomAnnotation {
    //注解可以显示赋值,如果没有默认值,就必须给注解赋值
    @MyAnnotation2(name = "张三")
    public void test() {
    }
}
@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
    //注解的参数:参数类型+参数名()
    //String name();
    String name() default "";
    int age() default 0;
    int id() default -1;//-1代表不存在
    String[] schools() default {"牛津大学","哈佛大学"};

定义新的注解类型使用@interface关键字(在原有的interface关键字前增加@符号)

//定义一个简单的注解类型

public @interface 注解名

{   成员变量;

}

注解可以带成员变量,或者没有成员变量。

下面定义了一个无成员变量的名为Test的简单注解:

public @interface Test

{   

}

成员变量在注解定义中以无形参的方法形式来声明,其方法名和返回值定义了该成员变量的名字和类型。

如下代码定义带两个成员变量的名为MyTag的注解

public @interface MyTag

{

String name();   //注解中的成员变量以方法的形式来定义

int age();

}

定义了注解后,可用注解来修饰程序中的类、方法、变量、接口等定义。

使用注解的语法是:@注解名,

通常会把注解放在所有修饰符之前,单独成行;

例如,使用上面定义的无成员变量的简单注解 @Test修饰类定义

@Test

public class MyClass

{

...

}

如下程序使用简单注解@Test来修饰方法。

public class MyClass

{        @Test

public void info()

}

如果注解是带成员变量的注解,那么,

使用该注解时就应该为它的成员变量指定值,

因而注解的长度可能较长,所以通常把注解另放一行,

如下面程序所示,使用上面定义的带成员变量的@MyTag注解,需要为成员变量赋值

public class Test

{

@MyTag(name ="xx",age = 6)

public void info()

{...}

...

}

也可以在定义注解的成员变量时为其指定初始值(默认值),

指定成员变量的初始值可使用default关键字。

如下代码定义了@MyTag注解,该注解里包含了两个成员变量:name和age,

这两个成员变量使用default指定了初始值。

public @interface MyTag

{

String name() default "yeeku";

int age() default 32;

}

如果为注解的成员变量指定了默认值,

使用该注解时则可以不为这些成员变量指定值,而是直接使用默认值。

public class Test

{

@MyTag    //因为它的成员变量有默认值,所以可以不为它的成员变量指定值

public void info()

{ ...  }

}

当然也可以在使用MyTag注解时为成员变量指定值,

如果为MyTag的成员变量指定了值,则默认值不会起作用。

根据注解是否可以包含成员变量,可以把注解分为如下两类:

标记注解:没有定义成员变量的注解类型被称为标记。

这种注解仅利用自身的存在与否来提供信息,如前面介绍的@Override、@Test等注解。

本次学习任务自己设计一个注解接口,并写出接口处理程序,并进行测试

package Annotation;

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

@Retention(value = RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
 @interface annotation {
        String value() default "Hello World";
    }

package Annotation;

import java.lang.reflect.Method;
public class annotationProcessor {
        public static void processAnnotations(Object object) {
            Class<?> testClass = object.getClass();
              // 遍历testClass对应的类里的所有方法
            for (Method method : testClass.getDeclaredMethods()) {
                //如果该方法使用了@annotation修饰
                if (method.isAnnotationPresent(annotation.class)) {
                    //获取该方法上的@annotation注解
                    annotation annotation = method.getAnnotation(annotation.class);
                    //获取注解里的value值
                    String value = annotation.value();
                    System.out.println("Method " + method.getName() + " has @annotation with value: " + value);
                }
            }
        }
}

package Annotation;

public class Test {
    @annotation
    public void method_A(){
    }
    @annotation("Hello Sky")
    public void method_B(){
    }
    @annotation("Hello Earth")
    public void method_C(){

    }
}

package Annotation;

public class Main {
    public static void main(String[] args) {
        Test test = new Test();
        annotationProcessor.processAnnotations(test);
    }
}

chiiiiiiiiikawa
关注 关注
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注解学习笔记
11-27
根据提供的文件内容,本文将详细解释注解的基本概念、在Java Web中的应用以及自定义注解的实现方式。 ### 注解概述 ...通过本文的学习,希望能够帮助初学者更好地理解和掌握注解这一强大的编程工具。
hibernate注解学习笔记
01-31
### Hibernate注解学习笔记 #### 一、简介与概述 Hibernate是Java领域内最流行的ORM(Object Relational Mapping)框架之一,它通过提供强大的映射工具和服务,将面向对象的数据模型(即Java类)与传统的关系型...
spring注解学习笔记
m0_47536537的博客
04-10 658
注解(Annotation)是Java语言中的一种特殊语法结构,它可以在代码中嵌入元数据(metadata),用于一些特殊的标记和说明。注解可以在编译时被读取,并在运行时使用。基本语法:@注解名称(属性名1=属性值1, 属性名2=属性值2, ...)其中,@符号表示这是一个注解注解名称是一个标识符,类似于Java中的类名或接口名。注解名称后面的括号中可以包含零个或多个属性,属性的格式是属性名=属性值,多个属性之间用逗号分隔。
Java注解学习笔记
zhyaw56zhu的博客
04-09 272
修饰注解注解叫元注解
Java异常和注解学习笔记
abc369_7的博客
04-21 952
异常和注解简单笔记
java注解学习笔记
东方
08-12 180
开始时间 2018年8月12日16:39:02 结束时间 2018年8月12日18:41:02 累计时间 2小时  使用Overridd好处 : 调试方便 自定义注解: 元注解      2018年8月12日16:55:04 于易动 看视频写的笔记   这个知识点感觉不是很重要...
Spring注解学习笔记
CrankZ的博客
08-23 1671
什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点: 如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低 在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效...
javaSE -- 注解学习笔记
本郡主是喵
06-11 655
注解java内置的注解,标明该注解的使用范围、生命周期等。 标准注解Java提供的基础注解,标明过期的元素/标明是复写父类方法的方法/标明抑制警告。 第三方注解 :第三方定义的注解,含义和功能由第三方来定义和实现。
Java注解学习笔记(四)运行时注解
小小马里奥的博客
02-24 779
Java注解学习笔记(四)运行时注解运行时注解(RetentionPolicy.RUNTIME)概念定义注解按生命周期来划分可分为3类:那怎么来选择合适的注解生命周期呢?自定义源码注解样例获取注解自定义注解 运行时注解(RetentionPolicy.RUNTIME) 概念定义 注解按生命周期来划分可分为3类: RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃; RetentionPolicy.CLASS:注解被保留到class文件,但
Java注解学习笔记(三)编译时注解
小小马里奥的博客
02-24 592
编译时注解(RetentionPolicy.CLASS) 概念定义        说到编译时注解(RetentionPolicy.CLASS) 都要和 注解处理器(Annotation Processor) 扯上关系,因为这里是真正体现编译时注解价值的地方。需要注意的一点是,运行时注解(RetentionPolicy.RUNTIME)和源码注解(RetentionPolicy.SOURCE)也可以在注解处理器进行处理,不同的注解有各自的生
Fastxml 简单常用注解学习笔记
hashcon
05-14 7284
Fastxml 简单常用注解学习笔记@JsonNaming@JsonIgnoreProperties@JsonIgnore@JsonFormat@JsonDeserialize@JsonSerialize@JsonProperty如下User类package com.usoft; import com.fasterxml.jackson.annotation.JsonFormat; import
Scala学习笔记16: 注解
Taerge0110的博客
07-12 1077
Scala 中的注解 (Annotations) 是一种元编程工具, 用于向编译器、运行时或其他工具提供元数据 ; 注解可以应用于各种程序结构, 包括类、对象、方法、字段、参数等 ; 下面是对Scala注解的详细介绍, 包括常见的注解、如何定义自定义注解, 以及使用注解的一些示例 ;
Controller注解学习笔记.md
06-22
整理笔记:在springboot中的各个注解的作用,包含@Controller、@ResponseBody、@RestController、@RequestMapping、@GetMapping 注解、@SpringBootTest注解:、@RequestParam注解、@Param注解、@pathVariable注解
Jersey注解学习笔记
04-26
本篇文章主要关注 Jersey 注解的使用,这对于开发 web 2.0 应用至关重要。 RESTful Web Service 的生命周期在 Jersey 中可以通过不同的注解进行控制: 1. **默认请求(request)**: 当不使用任何特定注解时,REST ...
【C++刷题】力扣-#121-买卖股票的最佳时机
会写代码的饭桶
10-16 616
给定一个数组 prices,其中 prices[i] 表示第 i 天的股票价格。假设你可以在第 i 天买入并在第 j 天卖出股票(i ≤ j),设计一个算法来计算你所能获取的最大利润。注意你只能持有一股股票,并且你不能同时参与多笔交易(即在再次买入前必须卖出股票)。
java 异常包装
最新发布
fdvvg的博客
10-17 376
通过异常包装,可以在Java中有效地处理和传递异常。这样做不仅能保持原始异常的信息,还能为上层调用者提供更多的上下文信息。
基于SSM班级事务管理系统的设计
2401_87849773的博客
10-15 471
管理员账户功能包括:系统首页,个人中心,学生管理,班委管理,班会组织管理,健康档案管理,党员发展管理,党员培训管理,学生成绩管理。主要技术:Java,Spring,mybatis,mysql,jquery,html。班委账号功能包括:系统首页,学生管理,学生成绩管理,活动信息管理,班费通知管理。服务器:SpringBoot自带 apache tomcat。JDK版本:Java JDK1.8。数据库可视化工具: navicat。数据库版本: mysql5.7。开发系统:Windows。
JavaWeb合集05-SpringBoot基础知识
qq_57340195的博客
10-17 909
Autowrite :自动装配,通过声明的数据类型来装配对应的bean对象。缺点,只能获取到一个相同类型的bean对象,如果有IOC容器里面有2个Bean对象,使用@Autowrite依赖注入就好报错。由于三层架构中,每一层都需要下次成来提供对应的方法,所有要new 下一次的对象,如果上一层的类名发送改变,那么上一层就需要修改对应的类名,如下。3、@Resource注解:通过它来代替@Autowrite注解,直接指定要注入的Bean对象,参数name的值就是要注入的Bean对象。
确保Spring Boot定时任务只执行一次方案
2301_76419561的博客
10-14 774
确保Spring Boot定时任务只执行一次有多种方法,你可以根据实际需求选择最适合的方法。如果你需要更复杂的任务调度或周期性执行,@Scheduled注解和接口是更合适的选择。而对于一次性的初始化任务或应用程序启动任务,注解和实现接口则更为简洁明了。
Hibernate 注解学习笔记:从基础到核心开发接口
Hibernate 注解学习笔记 Hibernate 是一个流行的基于 Java 的持久层框架,使用 Hibernate 可以将 Java 对象与数据库表之间建立映射关系,从而实现数据的持久化。下面是 Hibernate 注解学习笔记的知识点总结: 一...
写文章

热门文章

  • CSDN网站个性化推荐功能测试 245
  • Python基础语法(1) 143
  • 2023(春)Python程序设计作业4:Numpy 和 Pillow在图像处理中的应用 131
  • SpringMVC中处理器方法的参数 48
  • 注解的学习笔记 40

最新评论

  • SpringMVC中处理器方法的参数

    CSDN-Ada助手: 恭喜您写了第5篇博客!标题“SpringMVC中处理器方法的参数”听起来很有深度。您对这个话题的探索是非常有价值的,对读者来说也是一份非常实用的指南。接下来,我想建议您在未来的创作中,可以考虑探讨一下SpringMVC中处理器方法参数的最佳实践,或者分享一些您在实际项目中遇到的挑战和解决方案。期待您继续分享有关SpringMVC的知识,谦虚地说,我相信您的经验会给读者带来更多的启发!

  • 注解的学习笔记

    CSDN-Ada助手: 恭喜您写了第四篇博客!标题为“注解的学习笔记”真是让我期待不已。您对注解的学习笔记一定有很深入的理解和独到的见解。希望您能继续保持写作的热情,分享更多有关注解的知识和经验。下一步的创作建议是,如果可能的话,您可以尝试结合实际案例,分享一些使用注解解决问题的实践经验,这将对读者来说非常实用。期待您的下一篇博客! 如何快速涨粉,请看该博主的分享:https://hope-wisdom.blog.csdn.net/article/details/130544967?utm_source=csdn_ai_ada_blog_reply5

  • CSDN网站个性化推荐功能测试

    SoftwareTeacher: 引用「毕竟作为一个用户,我既然已经选出了我感兴趣的内容,那么我肯定是希望看到更多相关的优质文章与内容,即便」 同意!

  • CSDN网站个性化推荐功能测试

    CSDN-Ada助手: 恭喜你写了第三篇博客,题目也很吸引人!看到你在测试CSDN网站的个性化推荐功能,我觉得这个话题很有意思。下一步,你可以继续深入探讨这个主题,比如分析个性化推荐的算法,以及如何提高推荐的精准度等等。期待你的下一篇作品! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3,我们会奖励持续创作和学习的博主,请看:https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply3

  • 2023(春)Python程序设计作业4:Numpy 和 Pillow在图像处理中的应用

    CSDN-Ada助手: 非常感谢你分享这篇博客,你的努力和热情让人感到钦佩。对于Python程序设计,我也一直在学习和探索。除了Numpy和Pillow,还有一些其他的图像处理库,如OpenCV和Scikit-image,也非常适合深入学习和研究。同时,了解一些基础的计算机视觉和机器学习知识,将会让图像处理更有趣和有益。希望你能够继续保持学习的热情,不断扩展你的知识和技能。 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2

最新文章

  • SpringMVC中处理器方法的参数
  • CSDN网站个性化推荐功能测试
  • 2023(春)Python程序设计作业4:Numpy 和 Pillow在图像处理中的应用
2023年5篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家重庆玻璃钢雕塑定制海南玻璃钢广场雕塑厂家商场火烈鸟美陈南阳哪里有玻璃钢人物雕塑公司卡通人玻璃钢雕塑摆件市场报价曲阳玻璃钢大猩猩雕塑玻璃钢雕塑十八罗汉山西玻璃钢雕塑供应玻璃钢花盆生产工艺流程图南昌玻璃钢佛像雕塑玉林玻璃钢雕塑厂家直销宣城多彩玻璃钢雕塑开原玻璃钢牛雕塑江苏通用玻璃钢雕塑厂家供应公仔玻璃钢卡通雕塑摆件杭州商场美陈生产厂家北京境度玻璃钢雕塑造型生产玻璃钢雕塑规格长乐玻璃钢卡通座椅雕塑运城玻璃钢广场雕塑价格通许玻璃钢雕塑费用精湛的玻璃钢雕塑镇江商场美陈道具玻璃钢学校抽象雕塑制作淮安玻璃钢人物雕塑设计重庆玻璃钢卡通人物雕塑定制室內玻璃钢艺术雕塑上饶欧式玻璃钢雕塑多少钱东方玻璃钢雕塑玻璃钢雕塑文县香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化