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:// ...
随机推荐
- python学习之安装模块
安装pip下载python模块 yum -y install python-pip pip install pandas (pandas要安装的模块名) 默认使用的官方python源,这个在国内访问很 ...
- css回忆(一)
1.css的引入方式: a) 在head部分加入<link rel="stylesheet" type="text/css" href="my ...
- [问题2014A04] 解答
[问题2014A04] 解答 (1) 由条件可得 \(AB+BA=0\), 即 \(AB=-BA\), 因此 \[AB=A^2B=A(AB)=A(-BA)=-(AB)A=-(-BA)A=BA^2=B ...
- Python namedtuple
我们都知道Python中的tuple是一个非常高效的集合对象,但是我们只能通过索引的方式访问这个集合中的元素,比如下面的代码: Bob=('bob',30,'male') print'Represen ...
- angular之控制器(0)
一.控制器的含义 在angularJS中,controlle是一个javascript函数/类,用于操作作用域中,各个对象的初始状态以及相应的行为 二.控制器的作用 1. 控制 AngularJS 应 ...
- 用HttpSessionListener与HttpSessionBindingListener实现在线人数统计
在线人数统计方面的实现,最初我的想法是,管理session,如果session销毁了就减少,如果登陆用户了就新增一个,但是如果是用户非法退出,如:未注销,关闭浏览器等,这个用户的session是管理不 ...
- jQuery核心之 $
参考jQuery官网API文档 $ 和 $() 的区别很重要: 1.$(document).ready() 和 $(document).load() 的 区别: 前者等到DOM准备好了之后就会 ...
- iOS - Frame 项目架构
前言 iOS 常见的几种架构: 标签式 Tab Menu 列表式 List Menu 抽屉式 Drawer 瀑布式 Waterfall 跳板式 Springborad 陈列馆式 Gallery 旋转木 ...
- Easy UI
首先去Easy UI官网下载离线包 导入要用的js模块 <!DOCTYPE html> <html> <head lang="en"> < ...
- 便携式文件夹加密器 lockdir 5.74
便携式文件夹加密器 lockdir 5.74下载地址 http://www.hoposoft.com/lock/ 注册码两枚: 注册名:Long 注册码:6088805000000E7E25F09A6 ...