java 高级特性——注解
2016-03-19 11:39
411 查看
注解:
可以作为配置信息控制程序的运行,注解可以在一些场合用来替代配置文件
Annotation 注解: 程序中给人看到提示信息叫注释,
给程序看的提示信息叫做注解
形式: @xxxx(….)
@Deprecated : 用于表示某个程序元素(类, 方法等)已过时
@SuppressWarnings : 抑制编译器警告.
RetentionPolicy.SOURCE: 编译器直接丢弃这种策略的注释
RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解. 这是默认值,用于虚拟机加载类的时候
!! RetentionPolicy.RUNTIME:编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解. 程序可以通过反射获取该注释
@Target:指定被修饰的注解可以使用在什么位置
ElementType的成员变量。可以是类/方法/字段/构造方法/包声明…..
@Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档.
@Inherited: 被它修饰的 Annotation 将具有继承性.如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解
如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。
返回此元素上存在的所有注释。
返回直接存在于此元素上的所有注释。
如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。
如何获取注解上的属性?
获取到注解对象后,就像调用方法一样后去获取注解的属性
———-
代码示例
定义一个注解:
定义一个类,并使用注解,同时给注解上的属性赋值:
测试程序: 如果这个方法上带有@DemoAnno 则打印相应的name和age:
可以作为配置信息控制程序的运行,注解可以在一些场合用来替代配置文件
Annotation 注解: 程序中给人看到提示信息叫注释,
给程序看的提示信息叫做注解
形式: @xxxx(….)
jdk1.5内置的注解:
@Override : 限定重写父类方法, 该注解只能用于方法@Deprecated : 用于表示某个程序元素(类, 方法等)已过时
@SuppressWarnings : 抑制编译器警告.
自定义注解:
1.声明注解
(1) 使用 @interface关键字来定义注解,在这个类中可以声明注解的属性
注解属性的声明类似于在为接口声明一个方法,同时可以为属性设定默认值 注解属性支持如下类型:String、基本数据类型、枚举、Class 、其它注解类型、以上数据类型相应一维数组 如果注解中只包含一个名为value的属性,则这个属性在使用时可以省略注解的名字直接写值
public @interface tran{ //String name(); //String name2() default "xxx"; String value();//默认就有的属性 }
(2)使用元注解对注解进行描述
@Retention:用来指定注解的保留范围RetentionPolicy.SOURCE: 编译器直接丢弃这种策略的注释
RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解. 这是默认值,用于虚拟机加载类的时候
!! RetentionPolicy.RUNTIME:编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解. 程序可以通过反射获取该注释
@Target:指定被修饰的注解可以使用在什么位置
ElementType的成员变量。可以是类/方法/字段/构造方法/包声明…..
@Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档.
@Inherited: 被它修饰的 Annotation 将具有继承性.如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解
2.使用注解
在 @Target声明的位置上使用 @Tran(属性名=属性值,…..)3.反射注解
JDK 5.0 在 java.lang.reflect 包下新增了 AnnotatedElement 接口, 该接口代表程序中可以接受注释的程序元素,包括Class 、Field、 Method 、Constructor、Package都是这个接口的实现,所以这个接口中定义的反射注解的方法,他们都具有<T extends Annotation> T getAnnotation(Class<T> annotationClass)
如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。
Annotation[] getAnnotations()
返回此元素上存在的所有注释。
Annotation[] getDeclaredAnnotations()
返回直接存在于此元素上的所有注释。
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。
如何获取注解上的属性?
获取到注解对象后,就像调用方法一样后去获取注解的属性
———-
代码示例
定义一个注解:
@Retention(RetentionPolicy.RUNTIME) //指定保留范围 @Target(ElementType.TYPE) public @interface DemoAnno { public String name(); public int age() default 100; }
定义一个类,并使用注解,同时给注解上的属性赋值:
@DemoAnno(name="zhangsan") public class Student { }
测试程序: 如果这个方法上带有@DemoAnno 则打印相应的name和age:
public class Demo { public static void main(String[] args) { Class sc = Student.class; if(sc.isAnnotationPresent(DemoAnno.class)){ DemoAnno da = (DemoAnno) sc.getAnnotation(DemoAnno.class); String name = da.name(); int age = da.age(); System.out.println(name+":"+age); }else{ System.out.println("没有注解"); } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树