Java学习笔记:注解Annotation
annotation的概念
In the Java computer programming language, an annotation is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotated.
是Java提供的一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotation(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据
java中的注解是一种继承自接口java.lang.annotation.Annotation的特殊接口
自定义annotation
用关键字@interface可以自定义一个注解,目前这个注解没有任何功能,仅仅只是声明了,(自定义注解需要加上元注解,下面会写到)
public @interface CustomizeAnnotation { }
定义好之后就可以在类、方法、变量上面使用了(自定义注解在加上了元注解后,其使用位置就被限制,下面的例子只是说明注解可以存在且不限于以下位置)
@CustomizeAnnotation
public class Check { @CustomizeAnnotation
public void checkOut(@CustomizeAnnotation String username) { } }
注解也可以有属性,写法和接口中方法一样
public @interface CustomizeAnnotation { String name() default "Tom"; int age(); }
如果注解有属性,在使用注解时需要给没有默认值的属性赋值(例如name有默认值Tom,不用赋值,age没有默认值,需要赋值)
public class Check { @CustomizeAnnotation(age = 10)
public void checkOut(String username) { } }
这样自定义注解不完整,因为自定义注解需要加上元注解
meta-annotation元注解
Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明
- @Target 定义注解的作用目标
- @Retention 定义注解的保留策略,retention是保留的意思
- @Documented 表示该注解将被包含在javadoc中
- @Inherited 表示子类可以继承父类中的该注解
查看一下@Target注解源码,可以看到这个注解(自己注解了自己)有一个属性value,类型是枚举数组
然后看看这个枚举定义哪些作用目标,每个值的作用注释解释的很详细
查看一下@Retention注解的源码
然后看看这个RetentionPolicy这个枚举有哪些值,只有三个值
annotation应用
自定义一个注解(如下:需要加上@Target和@Retention,另外两个注解@Documented和@Inherited不是必须要加的)
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomizeAnnotation {
int count() default 300;
}
获取注解中的属性
@CustomizeAnnotation
public class Main { public static void main(String[] args) {
CustomizeAnnotation annotation = Main.class.getAnnotation(CustomizeAnnotation.class);
System.out.println(annotation.count());
}
}
注解在spring框架中使用很广泛,用以替代xml配置文件,后续在补充在spring中的应用
Java学习笔记:注解Annotation的更多相关文章
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习之注解Annotation实现原理
前言: 最近学习了EventBus.BufferKinfe.GreenDao.Retrofit 等优秀开源框架,它们新版本无一另外的都使用到了注解的方式,我们使用在使用的时候也尝到不少好处,基于这种想 ...
- Java学习笔记--注解和反射
注解和反射 1. 注解 注解作用: 对程序做出解释 被其他程序读取 注解格式: @注释名,还可以添加一些参数值,例如@SuppressWarnings(value="unchecked&qu ...
- Java学习笔记--注解
注解的使用与实例:http://www.cnblogs.com/pepcod/archive/2013/02/16/2913474.html 注解的作用及使用方法:http://wenku.baidu ...
- java学习笔记11--Annotation
java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习:注解,反射,动态编译
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解 什么是注解 ? Annotat ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 20155234 2016-2017-2第十周《Java学习笔记》学习总结
20155234第十周<Java学习笔记>学习总结 教材学习内容总结 网络编程 在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定 ...
- 20155234 2610-2017-2第九周《Java学习笔记》学习总结
20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...
随机推荐
- 【Spider】学习使用XMLFeedSpider
前面写了学习CrawlSpider遇到的问题后,今天学XMLFeedSpider又出现了启动后没爬取到数据,但又不报错的情况 经过排查,发现又是一个粗心大意的错误: class SpiderUserX ...
- 织梦 百度sitemap制作教程
一.新建一个sitemap.htm模板 登录dedecms后台,选择[模板]-[模板管理]-[默认模板管理] 点击最下面的[新建模板]新建一个模板,并复制下面这段代码进去(将代码中的域名改为自己的): ...
- 搭建harbor仓库、LDAP认证
ldap: 192.168.199.177 c5game.com 宿主机:192.168.199.224 测试客户机:192.168.199.223 安装docker.docker-compose 访 ...
- cf-Round551-Div2-D. Serval and Rooted Tree(DP)
题目链接:https://codeforces.com/contest/1153/problem/D 题意:有一棵树,给定结点数n,在每个结点上的操作(max:表示该结点的number为其孩子结点中的 ...
- Linux之间配置SSH互信(SSH免密码登录)
为简化SSH过程,采用证书方式,免去SSH登入时需要输入账号密码的过程,具体操作如下: 一.在SSH服务器所在机器上 1.以root用户登录,更改ssh配置文件 /etc/ssh/sshd_confi ...
- XFF的学习+修改源码--Are you in class
这几天有做天枢CTF的“Are you in class”的题目,虽然以前了解过XFF,但还是没有很好地应用,而且最后居然掉进了一个大坑,且听我细细讲来. 打开题目,首先有个提示“在不在学校主要看 ...
- Python: 定时器(Timer)简单实现
项目分析中发现有网站下载过程中需要发送心跳指令,复习下定时器,其与javascript中实现方法类似. 其原理为执行函数中置定时函数Timer(),递归调用自己,看来实现方法比较拙劣. 假定1秒触发一 ...
- multithreading coding
分类:公共资源问题.公交车问题 顺序:Qseater lab, bank, doctor [饭店] geust //yuec2 Yue Cheng package lab9; public abstr ...
- C++ 读取文本文件内容到结构体数组中并排序
成绩排行:从Score.txt文件读取学生信息,对其进行排序,按回答题数从大到小排,若相等,按分数从小到大排 #include<iostream> #include<fstream& ...
- Validate常用校验
1.首先将jQuery.js和jquery.validate.js加入对应的页面中,如果要中文的提示语还要把messages_zh.js加入,以及对应的css文件. <link href=&qu ...