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:// ...
随机推荐
- Apple个人(Individual)开发者账号升级公司(Company)开发者账号
1.拨打苹果针对中国区开发者的咨询服务热线:4006 701 855: 2.简单向对方(中文不太标准,但听懂没问题)说明意图后,会要求提供: (1)之前申请IDP时purchase form上的per ...
- IsBackground的理解
1.当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的. 2.当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束. ...
- phpcms无法读取index.html的解决步骤
代码如下: phpcms\modules\content\classes\html.class.php 查找 复制代码 代码如下: /** * 更新首页 */ public function inde ...
- Java虚拟机学习(3): 类加载机制
类加载机制 JVM把class文件加载的内存,并对数据进行校验.转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制. 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命 ...
- _vimrc默认配置
"不使用兼容vi的模式set nocompatible source $VIMRUNTIME/vimrc_example.vimsource $VIMRUNTIME/mswin.vimbeh ...
- 正则表达式(http://tieba.baidu.com/p/882391125)
觉得不错,就记下来了 正则表达式30分钟入门教程版本:v2.31 (2009-4-11) 作者:deerchao 转载请注明来源30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你 ...
- ASP值view State
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 数据库设计 Assignment 02
需求 1.0 请你试分析一下老师(教职工号,老师姓名,年龄),学生(学号,姓名,年龄),课程(课程号,课程名称,开课时间,上课地点)之间的关系, 注:多个老师可以同时教一门课 尝试画出该模型的E-R图 ...
- iOS开发中的内存分配(堆和栈)
进程的内存分区 所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先 ...
- mysql之常用操作
1. 数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数 ...