1. 注解的理解

    ① jdk 5.0 新增的功能

② Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理。通过使用 Annotation,程序员可以在不改变原逻辑的情况下, 在源文件中嵌入一些补充信息。

③在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。

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

  1. 注解的使用示例
  • 示例一:生成文档相关的注解

  • 示例二:在编译时进行格式检查(JDK内置的个基本注解)

    @Override: 限定重写父类方法, 该注解只能用于方法

    @Deprecated: 用于表示所修饰的元素(类, 方法等)已过时。通常是因为所修饰的结构危险或存在更好的择

    @SuppressWarnings: 抑制编译器警告

    示例:跟踪代码依赖性,实现替代配置文件功能

  1. 如何自定义注解:参照@SuppressWarnings定义
  • ① 注解声明为:@interface
  • ② 内部定义成员,通常使用value表示
  • ③ 可以指定成员的默认值,使用default定义
  • ④ 如果自定义注解没成员,表明是一个标识作用。

说明:

如果注解有成员,在使用注解时,需要指明成员的值。

自定义注解必须配上注解的信息处理流程(使用反射)才意义。

自定义注解通过都会指明两个元注解:Retention、Target

代码举例:

@Inherited
@Repeatable(MyAnnotations.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})
public @interface MyAnnotation { String value() default "hello"; }
  1. 元注解 :对现有的注解进行解释说明的注解。

    jdk 提供的4种元注解:

Retention:指定所修饰的 Annotation 的生命周期:SOURCE\CLASS(默认行为\RUNTIME)

只声明为RUNTIME生命周期的注解,才能通过反射获取。

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

出现的频率较低

Documented:表示所修饰的注解在被javadoc解析时,保留下来。

Inherited:被它修饰的 Annotation 将具继承性。

--->类比:元数据的概念:String name = "Tom";

  1. 如何获取注解信息:通过发射来进行获取、调用。

    前提:要求此注解的元注解Retention中声明的生命周期状态为:RUNTIME.

  2. 6.JDK8中注解的新特性:可重复注解、类型注解

6.1 可重复注解:

​ ① 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class

​ ② MyAnnotation的Target和Retention等元注解与MyAnnotations相同。

6.2 类型注解:

ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明。)

ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。

java注解学习笔记总结的更多相关文章

  1. Java注解学习笔记

    我们平常写Java代码,对其中的注解并不是很陌生,比如说写继承关系的时候经常用到@Override来修饰方法.但是@Override是用来做什么的,为什么写继承方法的时候要加上它,不加行不行.如果对J ...

  2. Kotlin for Java Developers 学习笔记

    Kotlin for Java Developers 学习笔记 ★ Coursera 课程 Kotlin for Java Developers(由 JetBrains 提供)的学习笔记 " ...

  3. Java IO学习笔记八:Netty入门

    作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...

  4. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  5. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. java JDK8 学习笔记——助教学习博客汇总

    java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...

  7. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  8. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. 第8.12节 Python类中使用__dict__定义实例变量和方法

    上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法. 一. 使用__dict__定义实例变量 语法: 对象名. dict[属性名] = ...

  2. MDX非常规百分比算法-过滤数据后的百分比

    网上有很多关于占比的帖子,基本上都是按照层次结构来做的,比如某个子项占总体的百分比(\all).某个子项占父项的百分比(\parent).某个子项占其祖先的百分比(\ancestor)....等等,如 ...

  3. sql black list 绕过

    Black list is so weak for you,isn't it 姿势: return preg_match("/set|prepare|alter|rename|select| ...

  4. IntelliJ IDEA2019.3.2破解/永久激活/安装教程

    我想大家用过史上最好的开发工具就是idea了,没有之一!看到大家都在找idea的激活教程,今天我也在这里跟大家分享一下. 本教程针对现在官网针对的版本是idea2019.3.2,为防止以后会更新破解失 ...

  5. 题解 CF611H 【New Year and Forgotten Tree】

    Solution 提供一种新思路. 首先考虑如何判断一个状态是否合法. 考虑把所有十进制长度一样的数缩成一个点. 这样的点的个数 \(\le 5\). 蒟蒻猜了一个结论:只要满足对于所有缩出来的点的子 ...

  6. 题解-TJOI2015 弦论

    TJOI2015 弦论 字符串 \(s\) 和 \(t\) 和 \(k\).如果 \(t=0\),不同位置的相同子串算 \(1\) 个:如果 \(t=1\),不同位置的相同子串算多个.求 \(k\) ...

  7. Android原子操作——android_atomic_cmpxchg

    网络给我们带来了很多方便,查阅我们目前认知范围外的道理.但是,凡事也要学会分辨,不然可能会误导你. 话说,最近的一个项目(Mercury-Project),接近尾声中.然而,在调试一个demo时,却遇 ...

  8. 【Django 局域网配置】

    默认方法启动django python manage.py runserver 这时启动的服务只能在本机访问,这是因为服务只向本机(127.0.0.1:8000)提供,所以局域网的其他机器不能访问. ...

  9. LLVM程序分析日记之插桩BranchInst

    1. splitblockandinsertifthenelse() 一个代码例子:StackOverflow 2. SplitBlockAndInsertIfThen() 或者仅仅想插桩if the ...

  10. Salesforce LWC学习(二十九) getRecordNotifyChange(LDS拓展增强篇)

    本篇参考: https://developer.salesforce.com/docs/component-library/documentation/en/lwc/data_ui_api https ...