JDK5-注解
注解是一个类,一个声明就是一个对象
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-注解的更多相关文章
- (转)Spring的bean管理(注解方式)
http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...
- spring的AspectJ基于XML和注解(前置、后置、环绕、抛出异常、最终通知)
1.概念 (1)AspectJ是一个基于Java语言的AOP框架 (2)Spring2.0以后新增了对AspectJ切入点表达式的支持 (3)AspectJ是AspectJ1.5的新增功能,通过JDK ...
- AOP详解
什么是AOP AOP Aspect Oriented Programing 面向切面编程 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查.缓存) Spring ...
- testng.xml文件结构组成及节点属性说明
TestNG的DTD检查文件:http://testng.org/testng-1.0.dtd.PHP 更多testng配置及说明,请移步http://testdoc.org/docmaster?pi ...
- Testng使用方法示例
TestNG TestNG是一个测试框架,灵感来自JUnit和NUnit.但引入了下面这些新的功能,使它更强大和更容易使用. 注解: 可在任意大的线程池运行您的测试(所有方法在它们自己的线程内,一个线 ...
- Spring day02笔记
spring day01回顾 编写流程(基于xml) 1.导入jar包:4+1 --> beans/core/context/expression | commons-logging 2.编写目 ...
- TestNG官方文档中文版(2)-annotation(转)
1. 介绍 TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器). 编写一个测试的 ...
- testng xml 示例
TestNG的DTD检查文件:http://testng.org/testng-1.0.dtd.php 更多testng配置及说明,请移步http://testdoc.org/docmaster?pi ...
- Spring框架(6)---AspectJ实现AOP
AspectJ实现AOP 上一篇文章Spring框架(4)---AOP讲解铺垫,讲了一些基础AOP理解性的东西,那么这篇文章真正开始讲解AOP 通过AspectJ实现AOP要比普通的实现Aop要方便的 ...
- Spring(二)
1.1 AOP概述 1.1.1什么是AOP AOP(Aspect Oriented Programing) 面向切面编程. AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理 ...
随机推荐
- Solr4.8.0源码分析(22)之SolrCloud的Recovery策略(三)
Solr4.8.0源码分析(22)之SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及P ...
- python 单元测试
http://blog.csdn.net/five3/article/details/7104466
- cut 命令使用
cut -d -f cut -c cut -d分隔符 -f分割后取的第几个字符串 cut -c从哪个字符开始取
- [BZOJ 1874] [BeiJing2009 WinterCamp] 取石子游戏 【博弈论 | SG函数】
题目链接:BZOJ - 1874 题目分析 这个是一种组合游戏,是许多单个SG游戏的和. 就是指,总的游戏由许多单个SG游戏组合而成,每个SG游戏(也就是每一堆石子)之间互不干扰,每次从所有的单个游戏 ...
- Google Cardboard
Google Cardboard是谷歌的一个虚拟现实开源项目,旨在使用户可以以一种简单.有趣且廉价的方式体验虚拟现实.用户只需要在Android手机上安装一个Google Cardboard应用,并将 ...
- Webpack 傻瓜式指南(一)
modules with dependencies webpack module bundler static assetss .js .js .png Webpack傻瓜式指南 n ...
- input 标签左对齐
不要忘记下载jquery包,并引用到工程文件里. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ...
- ♫【JS】offsetParent
This property will return null on Webkit if the element is hidden (the style.display of this element ...
- Light OJ 1011 - Marriage Ceremonies(状压DP)
题目大意: 有N个男人,和N个女人要互相匹配,每个男人和每个女人有个匹配值. 并且匹配只能是1对1的. 问所有人都匹配完成,最大的匹配值是多少? 状压DP,暴力枚举就OK了, 这个题目略坑,因为他 ...
- (转载)遍历memcache中已缓存的key
(转载)http://www.cnblogs.com/ainiaa/archive/2011/03/11/1981108.html 最近需要做一个缓存管理的功能.其中有一个需要模糊匹配memcache ...