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采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理 ...
随机推荐
- Ubuntu 创建快捷方式的方法
ln -s /要创建快捷方式的地方/ /创建在哪里/
- 最新发布C#.NET快速开发框架企业版V4.0 (适合开发ERP、进销存系统)
C/S系统开发框架-企业版 V4.0 (Enterprise Edition) http://www.csframework.com/cs-framework-4.0.htm 视频下载: 百度网盘: ...
- Python Tutorial 学习(十)-- Brief Tour of the Standard Library
10.1. Operating System Interface os库 import os os.getcwd() # Return the current working directory 'C ...
- jQuery取CSS的HEX(16位)颜色值
//IE10以上版本.CHROME.FIREFOX中GRB颜色转HEX颜色值 $.fn.getBackgroundColor = function() { var rgb = $(this).css( ...
- BZOJ 1006 神奇的国度
Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系 ...
- codeforces D. Painting The Wall
http://codeforces.com/problemset/problem/399/D 题意:给出n和m,表示在一个n*n的平面上有n*n个方格,其中有m块已经涂色.现在随机选中一块进行涂色(如 ...
- win平台下, 检测网络是否连接最好的办法
[Delphi]检查URL是否有效的函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 function CheckUr ...
- Delphi下的RTTI函数大全
http://ljz9425.blog.163.com/blog/static/369148572008111635253858/ Delphi下的RTTI(下) 2008-12-16 15:52:5 ...
- Delphi中的THashTable
在Delphi中,Inifiles单元中有一个TStringHash的类,不过它的Value仅支持Integer(其实也不是问题,有其它类型可以将变量变为Pointer),有点不舒服,今天没事做就把它 ...
- 【HDOJ】2896 病毒侵袭
AC自动机模板题. #include <iostream> #include <cstdio> #include <cstring> #include <qu ...