注解是一个类,一个声明就是一个对象

1. 简单注解

  @SuppressWarnings("msg")  - 压缩/抑制警告

  @Deprecated  - 声明过时

  @Override   - 声明复写

2. 自定义注解

 public @interface Anno {
}

3. 注解的使用

 @Anno
public class AnnoTest {
public static void main(String[] args) {
if(AnnoTest.class.isAnnotationPresent(Anno.class)) {
Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);
...
}
}
}

  但是在这里我们发现:无法获取到Anno的实例,是因为Anno注解在加载进内存时去除了

  以此引出注解的生命周期

    源文件:RetentionPolicy.SOURCE(如SuppressWarnings及Override)

    class文件:RetentionPolicy.CLASS(默认

    内存字节码:RetentionPolicy.RUNTIME(如Deprecated)

4. 重定义注解

 @Retention(RetentionPolicy.RUNTIME)
public @interface Anno {
}

    

5. 元注解

  元注解:对注解进行注解的注解(@Retention、@Target、@Documented和@Inherited)-> java.lang.annotation

  @Retention:设置注解的可见性(生命周期)

  @Target:设置注解的作用目标

  @Documented:指示javadoc应该为注解生成文档

  @Inherited:指示在子类继承父类时继承本注解

6. 注解的作用范围

  Target元注解:@Target(ElementType[])

    如:@Target({ElementType.TYPE, ElementType.METHOD})

      @Target(ElementType.TYPE)  // 一个元素可以省略{}

  ElementType.

    TYPE:所有元素(类、接口、枚举...)

    PARAMETER:参数

    PACKAGE:包

    METHOD:方法

    LOCAL_VARIABLE:局部变量

    FIELD:属性

    CONSTRUCTOR:构造器

    ANNOTATION_TYPE:注解

7. 为注解加属性(方法)

注解中属性的类型:八种基本类型、String、Class(ClassName.class)、enum以及上述类型的数组

 @Retention(RetentionPolicy.RUNTIME)
public @interface Anno {
String color();
} @Anno(color="red")
public class AnnoTest {
public static void main(String[] args) {
if(AnnoTest.class.isAnnotationPresent(Anno.class)) {
Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);
System.out.println(anno.color());
}
}
}

8. 为注解属性添加默认值  

  若注解内只有一个属性且名为value或除value外其他属性均有默认值时,赋值时可以省略value,如下:

 @Retention(RetentionPolicy.RUNTIME)
public @interface Anno {
String value();
} @Retention(RetentionPolicy.RUNTIME)
public @interface Anno2 {
String color() default "red";// 为属性设置默认值
String value();
int[] array() default {1, 2, 3};
Anno annotation() default @Anno("Joshua"); // 注解中属性为注解
} @Anno("Joshua")
@Anno2("Joshua_AW")
public class AnnoTest {
public static void main(String[] args) {
if(AnnoTest.class.isAnnotationPresent(Anno.class)) {
Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);
System.out.println(anno.value());
}
}
}

Anno2也可也这样引用:@Anno2(color="blue", value="Joshua", array=1)

JDK5-注解的更多相关文章

  1. (转)Spring的bean管理(注解方式)

    http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...

  2. spring的AspectJ基于XML和注解(前置、后置、环绕、抛出异常、最终通知)

    1.概念 (1)AspectJ是一个基于Java语言的AOP框架 (2)Spring2.0以后新增了对AspectJ切入点表达式的支持 (3)AspectJ是AspectJ1.5的新增功能,通过JDK ...

  3. AOP详解

    什么是AOP AOP Aspect Oriented Programing 面向切面编程 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查.缓存) Spring ...

  4. testng.xml文件结构组成及节点属性说明

    TestNG的DTD检查文件:http://testng.org/testng-1.0.dtd.PHP 更多testng配置及说明,请移步http://testdoc.org/docmaster?pi ...

  5. Testng使用方法示例

    TestNG TestNG是一个测试框架,灵感来自JUnit和NUnit.但引入了下面这些新的功能,使它更强大和更容易使用. 注解: 可在任意大的线程池运行您的测试(所有方法在它们自己的线程内,一个线 ...

  6. Spring day02笔记

    spring day01回顾 编写流程(基于xml) 1.导入jar包:4+1 --> beans/core/context/expression | commons-logging 2.编写目 ...

  7. TestNG官方文档中文版(2)-annotation(转)

    1. 介绍    TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器). 编写一个测试的 ...

  8. testng xml 示例

    TestNG的DTD检查文件:http://testng.org/testng-1.0.dtd.php 更多testng配置及说明,请移步http://testdoc.org/docmaster?pi ...

  9. Spring框架(6)---AspectJ实现AOP

    AspectJ实现AOP 上一篇文章Spring框架(4)---AOP讲解铺垫,讲了一些基础AOP理解性的东西,那么这篇文章真正开始讲解AOP 通过AspectJ实现AOP要比普通的实现Aop要方便的 ...

  10. Spring(二)

    1.1 AOP概述 1.1.1什么是AOP AOP(Aspect Oriented Programing) 面向切面编程. AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理 ...

随机推荐

  1. 使用jQuery实现跨域提交表单数据

    我们在WEB开发中有时会遇到这种情况,比如要从A网站收集用户信息,提交给B网站处理,这个时候就会涉及到跨域提交数据的问题.本文将给您介绍如何使用jQuery来实现异步跨域提交表单数据.   在jQue ...

  2. input里面的查找标记 ő

    <i id="J_SearchIcon" class="iconfont">ő</i> .iconfont {ont-family: i ...

  3. Article及ArticleList模板

    HTML5滑动条: <input type="range" min="0" max="100" value="55" ...

  4. Python入门,新手之路

    1.开始使用Python: 从上一篇中我们提到了第一个Python,print("Hello World!")程序说起,看到这一句话,你有没有想过如果括号中的语句不是Hello W ...

  5. linux 下makefile

    linux下c编程中makefile是必须会的,我刚开始学,将我对makefile的理解记录下来. 通常我们在windows下编写c程序,有各种ide工具为我们执行makefile工作但在linux下 ...

  6. js两个时间相减

    平常总会遇到需要算两个日期之间是多少天,以下是使用JavaScript算时间差多少天的: // 给日期类对象添加日期差方法,返回日期与diff参数日期的时间差,单位为天 Date.prototype. ...

  7. vss报错Workgroup无法访问,您可能没有权限使用网络资源解决办法

    xp下访问svn或者vss的时候只能使用ip进行访问表示很不爽,昨天还好好的,结果就不能使用计算机名字去访问了. 很是郁闷,打开网上邻居之后发现,居然连网上邻居都搜不出来,于是关掉windows自带防 ...

  8. Word Pattern

    ​package cn.edu.xidian.sselab.hashtable; import java.util.HashMap;import java.util.Map; /** *  * @au ...

  9. poj 2432 Around the world bfs+哈希

    由于每个点的状态包含走过来的距离,所以要存二维的状态,但是状态总量太多,所以可以用哈希来搞. 那么就是bfs最短路,哈希记录状态了. #include <iostream> #includ ...

  10. VS2010中编写宏添加作者信息与函数注释

    这里所说的宏是指通过一系列键盘组合键和可以插入自定义内容.下面介绍怎么编写一个自己的宏: 1.在Visual Studio 2010中按Alt+F11打开宏IDE: 2.打开后选择添加模块: 3.在弹 ...