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采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理 ...
随机推荐
- PHP: 使用CURL访问FTP
今天要做FTP上传.本想用PHP自带的FTP函数来实现,结果发现这个模块没有编译进来,重新编译PHP太麻烦,改用其他方式实现吧 FTP上传 if (isset($_POST['Submit'])) ...
- python 时间戳
import timeprint time.time()输出的结果是(单位:s):1395421406.39 x = time.localtime(x) x = time.strftime('%Y-% ...
- 嵌套JSON 取出name与value
好久不用都忘了 mark下 $.each( { name: "John", lang: "JS" }, function(i, n){ alert( &qu ...
- 一个获取Android手机root权限的程序
PermRoot.bat可以获取root权限. IsRoot.bat可以测试是否拥有root权限. UnRoot.bat可以清除root权限. 下载地址: http://pan.baidu.com/s ...
- LINUX单网卡绑定多个IP
在linux下,我们有时候需要给单网卡设置不同的IP地址,这样就涉及到单网卡绑定多个IP地址的情况.使用本方法可以方便的为单网卡绑定多个IP地址.笔者使用的环境是centos5.6,应该在fedora ...
- 登录远程SQL服务器
一 看ping 服务器IP能否ping通. 这个实际上是看和远程sql server 2000服务器的物理连接是否存在.如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务 ...
- 揪出“凶手”——实战WinDbg分析电脑蓝屏原因
http://www.appinn.com/blue-screen-search-code/ 蓝屏代码查询器 – 找出蓝屏的元凶 11 文章标签: windows / 系统 / 蓝屏. 蓝屏代码查询器 ...
- Linux Kernel 空指针逆向引用拒绝服务漏洞
漏洞名称: Linux Kernel 空指针逆向引用拒绝服务漏洞 CNNVD编号: CNNVD-201306-449 发布时间: 2013-07-01 更新时间: 2013-07-01 危害等级: ...
- 【转】 Linux IIO子系统分析-1-概述
原文网址:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=20543672&id=2976189 最近稍微看了下LKML ...
- HDOJ(HDU) 2164 Rock, Paper, or Scissors?
Problem Description Rock, Paper, Scissors is a two player game, where each player simultaneously cho ...