Java基础 --- 注解 Annotation

  • Java注解
  • Java自带的标准注解
  • 自定义注解

Java注解

  • Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。

Java自带的标准注解

  • @Override: 限定重写父类方法, 该注解只能用于方法
  • @Deprecated: 用于表示某个程序元素(类, 方法等)已过时
  • @SuppressWaring: 作用是屏蔽一些无关紧要的警告。使开发者能看到一些他们真正关心的警告。从而提高开发者的效率
  • @SuppressWarnings(“unchecked”)
    告诉编译器忽略 unchecked 警告信息,如使用List,ArrayList等未进行参数化产生的警告信息。
  • @SuppressWarnings(“serial”)
    如果编译器出现这样的警告信息:The serializable class WmailCalendar does not declare a static final serialVersionUID field of type long,使用这个注释将警告信息去掉。
  • @SuppressWarnings(“deprecation”)
    如果使用了使用@Deprecated注释的方法,编译器将出现警告信息。使用这个注释将警告信息去掉

自定义注解

元注解: 自定义注解时需要元注解

  • @Retention
    用来定义该注解在哪一个阶段可用,包括 在源代码中(RetentionPolicy.SOURCE)、类文件中(RetentionPolicy.CLASS)或者运行时(RetentionPolicy.RUNTIME)
  • @Documented
    生成文档信息的时候保留注解,对类作辅助说明
  • @Target:
    注解可以修饰什么
  • @ Inherited
    说明子类可以继承父类中的该注解. 如果某个类使用了被@Inherited 修饰的Annotation, 则其子类将自动具有该注解

构建自定义注解

  • 定义一个注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface IDAuthenticator {//属性类型, 属性名称, 默认值int length() default 8;
}
  • 构建注解解析
public void check(Student student) throws IllegalAccessException {//使用Java反射得到属性for(Field field:student.getClass().getDeclaredFields()){//如果属性被IDAuthenticator修饰if(field.isAnnotationPresent(IDAuthenticator.class)){//拿到IDAuthenticator 对象IDAuthenticator idAuthenticator = field.getAnnotation(IDAuthenticator.class);field.setAccessible(true);//拿到student类中对应的属性, 也就是id属性Object value=field.get(student);//判断属性长度if(value instanceof String){String id=(String) value;//idAuthenticator.length()就是注解中的属性参数if(id.length()!=idAuthenticator.length()){throw  new  IllegalArgumentException("the length of "+field.getName()+" should be "+idAuthenticator.length());}}}}
  • 应用注解
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {private  String name;@IDAuthenticator(length = 4)private String id;}
  • 测试:
@Test
public void useAnnotation(){Student student01 = new Student("小明", "20210122");Student student02 = new Student("小军", "2021");Student student03 = new Student("小花", "20210121");for(Student student:new Student[]{student01,student02,student03}){try{check(student);System.out.println(" Student "+student+" checks ok ");} catch (IllegalArgumentException | IllegalAccessException e) {System.out.println(" Student "+student+" checks failed "+e);}}
}

Java基础 --- 注解 Annotation相关推荐

  1. java基础-注解Annotation原理和用法

    转载自 http://www.wolfbe.com/detail/201608/265.html 在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWar ...

  2. Java基础-注解和反射

    Java基础-注解和反射 前言 对于注解,我主要还是在自定义APT还有运行时反射获取类来让自己能够构建出复用性更高的代码逻辑. 知识点1-注解: 注解的应用场景由元注解@Retention来进行指定, ...

  3. 夯实 Java 基础 - 注解

    夯实 Java 基础 - 注解 不知道大家有没有一种感觉,当你想要了解某个知识点的时候,就会发现好多技术类 APP 或者公众号在推一些关于这个知识点的文章.也许这就是大数据的作用,这也说明总有人比你抢 ...

  4. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的c ...

  5. java基础- 注解和反射

    1. 注解(Annotation) 1. 什么是注解 Annotation是从JDK5.0开始引入的新技术. Annotation的作用 : 不是程序本身,可以对程序作出解释.(这一点和注释(comm ...

  6. Java基础——注解的初步认识

    目录 注解(Annotation)的理解 Annotation的使用示例 自定义注解 JDK中四个基本元注解 利用反射获取注解信息 可重复注解 注解(Annotation)的理解 Annotation ...

  7. 1.Java基础-注解

    (1) 注解 初步 : JDK1.5之后内部提供的三个注解:@Deprecated 意思是"废弃的,过时的"@Override 意思是"重写.覆盖"@Suppr ...

  8. Java基础-注解机制详解

    文章目录 1. 注解基础 1.1 Java内置注解 1.1.1 内置注解 - @Override 1.1.2 内置注解 - @Deprecated 1.1.3 内置注解 - @SuppressWarn ...

  9. Java自定义注解Annotation的实现原理

    文章目录 1.什么是注解? 2.注解的用处: 3.注解的原理: 4.元注解: 5.常见标准的Annotation: 6.自定义注解: 7.自定义注解实例: 1.什么是注解?   对于很多初次接触的开发 ...

最新文章

  1. eclipse 项目 无法 rename
  2. MS CRM 2011中,对于多实体数据文件的导入
  3. php怎么计算图片的大小,php 根据比例计算图片缩放尺寸函数的用法
  4. ZooKeeper 数据模型
  5. 软件定义网络(Software Defined Network )
  6. 退出登入的php怎么写,php中退出登录怎么写
  7. jQuery创建、删除和修改html标签
  8. Scanner类(next,nextLine,nextInt)的用法与常见问题
  9. 夜神设置android版本,使用夜神模拟器调试android app
  10. JavaScript数组属性和方法
  11. 2023每日发布行业及概念热点切换跟踪图!
  12. 使用js拖拽盒子移动()
  13. 修改app绕过模拟器检测_雷电模拟器(增强版)
  14. 华为OD机试 - 最远足迹
  15. 解决myeclipse中 保存代码时resetting selection耗时操作
  16. FullCalendar 学习笔记——简单的节假日设置
  17. 网络电视经常出现服务器无响应,为什么pps总是显示服务器未能响应停止播放
  18. 【Alpha阶段项目展示】Time Shaft·时间轴
  19. CG管理软件Shotgun改为ShotGrid
  20. CVPR 2019 论文解读 | 基于多级神经纹理迁移的图像超分辨方法 (Adobe Research)

热门文章

  1. 虎书Fundamentals of Computer Graphics 5th Edition个人学习思维导图分享-第八章 Viewing
  2. vasp计算压电系数_压电常数计算问题 - 第一性原理 - VaspMedeA - 小木虫论坛-学术科研互动平台...
  3. 67在C51语言表示16进制数,一级笔试试题考核的主要知识点及答案
  4. 数据挖掘经典十大算法_K-Means算法
  5. call()、apply()、bind()的使用和区别以及使用场景
  6. 功能性需求与非功能性需求
  7. CentOS 7 firewall-cmd开放端口时出现bad port (most likely missing protocol)解决方案
  8. shopee、ebay测评自养号环境解决方案(补单系统)
  9. 无法实名支付宝余额如何转出?除了爱心捐款有别的办法吗?
  10. Tensorflow 学习入门(二) 初级图像识别——手写数字识别