Annotation注解(有源代码)
注解(annotation)概述:
·从JDK5.0 开始,java增加了对元数据(MetaData)的支持,也就是Annotation(注解)
·Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
·Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的“name=value”对中。
·Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据
基本的Annotation:
·使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素
·三个基本的Annotation:
1.@ Override:限定重写父类方法,该注释只能用于方法
2.@ Deprecated:用于表示某个程序元素(类,方法等)已过时
3.@ SuppressWarnings:抑制编译器警告
自定义Annotation:
·定义新的Annotation类型使用@interface关键字
·Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。
·可以在定义Annotation的成员变量时为其制定初始值,指定成员变量的初始值可使用default关键字
例:
public @interface MyAnnotation{
String name() default "liang"
}
·没有成员定义的Annotation称为标记;包含成员变量的Annotation称为元数据Annotation
提取Annotation信息:
·JDK5.0 在java.lang.reflect 包下新增了AnnotationElement接口,该接口代表程序中可以接受注解的程序元素
·当一个Annotation类型被定义为运行时可见,当class文件被载入时保存在class文件中的Annotation才会被虚拟机读取
·程序可以调用AnnotationElement对象的如下方法来访问Annotation信息

JDK的元Annotation:
·JDK的元Annotation用于修饰其他Annotation定义
·JDK5.0 提供了专门在注解上的注解类型,分别是:
1.Retention
2.Target
3.Documented
4.Inherited
·@Retention:只用用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间,@Retention包含一个RetentionPolicy类型的成员变量,使用@Retention时必须为该value成员变量指定值:
1.RetentionPolicy.SOURCE:编译器直接直接丢弃这种策略的注释
2.RetentionPolicy.CLASS(默认):编译器会把注释记录在class文件中。当运行java程序时,JVM不会保留注解。这是 默认值
3.RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中。当运行java程序时,JVM会保留注释。程序可以通过反射获取该注释。
·@Target:用于修饰Annotation定义,用于指定被修饰的Annotation能用于哪些程序元素。@Target也包含了一个名为value的成员变量。
@Documented:用于指定被该元Annotation修饰的Annotation类江北javadoc工具提取成文档。
1.定义为Documented的注解必须设置Retention值为RUNTIME。
·@Inherited:被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解(实际应用中,使用较少)。
package com.demo;
/*
*
* 如何自定义一个注解
* 元注解
*/
public class TestAnnotation {
public static void main(String[] args) {
Person p = new Student();
p.walk();
}
} class Student extends Person{ @Override
public void walk() {
System.out.println("学生走路");
}
@Override
public void eat() {
super.eat();
}
}
class Person{
@MyAnnotation(value="liang")
String name;
int age; public Person() {
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public void walk(){
System.out.println("走路");
}
@Deprecated
public void eat(){
System.out.println("吃东西 ");
}
@Override
public String toString() {
return super.toString();
} }
package com.demo; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.lang.annotation.ElementType;
//自定义的注解
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "Hello";
}
Annotation注解(有源代码)的更多相关文章
- Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架
前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...
- Java Annotation 注解
java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- paip.Java Annotation注解的作用and 使用
paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...
- Annotation注解
概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annotation就是提供了一种为程序元素设置元数据的方法,可用于修饰包.类. ...
- Android开发学习之路--Annotation注解简化view控件之初体验
一般我们在写android Activity的时候总是会在onCreate方法中加上setContentView方法来加载layout,通过findViewById来实现控件的绑定,每次写这么多代码总 ...
- java EE中的hello1.java及Annotation(注解)
一.Annotation(注解) 注解(Annotation)很重要,未来的开发模式都需要注解,注解是java.lang.annotation包,Annotation是从java5引入的,它提供一些不 ...
- Annotation(注解)介绍
Annotation(注解)是什么: Annotation(注解) 官方的定义: An annotation is a form of metadata, that can be added t ...
- struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本
[本文简介] struts 多文件上传.基于”零配置“+"ajaxfileupload" 的一个简单例子. [导入依赖jar包] jquery-1.7.2.js : http:// ...
随机推荐
- 操作SSIS之前的准备工作
SSIS的历史概述: 在SQL Server7.0中,微软成立了一个很小的开发团队开发SQL Server中一个非常低调的功能,该功能被称为DTS(数据转换服务),该功能一直被沿用到SQL2000. ...
- Java 中System里getProperty(something)
Java 中System里getProperty 方法获得系统参数 Key Description of Associated Value 中文描述 java.version Java Runtime ...
- [已解决]Eclipse 插件Maven在使用 add dependency,找不到包,解决办法
以Eclipse版本[Version: Luna Release (4.4.0),]为例, 依次打开:Window >show view > other > Maven Reposi ...
- "Unity测试系列"文章索引
对Unity各种API的细节进行测试 Common 一些Unity基础操作的性能测试 Animation/Animator Animation Play/Stop测试 关于Animation动画事件的 ...
- 用一个案列详细讲解UITextFiled
一. 登陆界面的搭建 首先涉及到登录界面状态栏颜色的问题,我们需要将状态栏颜色改为白色,可以在控制器内实现方法更改 - (UIStatusBarStyle)preferredStatusBarStyl ...
- PCL点云库:Kd树
Kd树按空间划分生成叶子节点,各个叶子节点里存放点数据,其可以按半径搜索或邻区搜索.PCL中的Kd tree的基础数据结构使用了FLANN以便可以快速的进行邻区搜索.FLANN is a librar ...
- DSO转换规则的Aggregation默认为覆盖MOV
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 【Android】设置 LinearLayout 的样式
前言 LinearLayout是最常用的控件之一,主要是用来进行排版布局,本人介绍如何给LinearLayout 增加边框样式,在增加样式之前的效果如下: 可以看得出来,每个LinearLayout几 ...
- Rails,uva 514
题目:铁轨 题目链接:UVa514链接 题目描述: 某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1-n.你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶入车站.例 ...
- 自定义datagridview列,却提示DataGridView 控件中至少有一列没有单元格模板
哈哈,一个小误区,你看看设计窗体生成的代码,DataGridView的列不是GridViewColumn 而是DataGridViewTextBoxColumn你只要添加这个类型的对象就可以了,我也是 ...