java注解简单讲解以及自定义注解例子
2017-02-19 23:22
447 查看
注解(Annotation)
jdk5定义了4个标准的元注解。除了元注解,还有其它帮我们定义好的注解如@SuppressWarnings 当然我们也可以自定义注解
@Target,
@Retention,
@Documented,
@Inherited
@Retention
@Retention定义了该Annotation被保留的时间长短. 如:@Retention(RetentionPolicy.SOURCE )该注解有三个值供选择:
RetentionPolicy.SOURCE
这种类型的Annotations只在源代码级别保留,编译时就会被忽略
RetentionPolicy.CLASS
这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略。默认就是这个值
RetentionPolicy.RUNTIME
这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用.
如:@Override就是RetentionPolicy.SOURCE。
@SuppressWarnings也是RetentionPolicy.SOURCE 都是给编译看就没用了
@Deprecated是RetentionPolicy.RUNTIME
这些都可以通过jdk的文档看到
@Target
用于描述注解的使用范围(即:被描述的注解可以用在什么地方) 有7个取值,当然可以设置多个取值,以数组的形式如@Target={ElementType.xxx,ElementType.xxx}。
CONSTRUCTOR:用于描述构造器
FIELD:用于描述域
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数
TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Documented
Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中
@Inherited
允许子类继承父类的注解,
这个注解我也没具体试过 不是很清楚用法
下面举例说说怎么自定义注解
(相关问题都有注释 这里就不多写了)
自定义的注解类:
测试类:
运行结果:
jdk5定义了4个标准的元注解。除了元注解,还有其它帮我们定义好的注解如@SuppressWarnings 当然我们也可以自定义注解
@Target,
@Retention,
@Documented,
@Inherited
@Retention
@Retention定义了该Annotation被保留的时间长短. 如:@Retention(RetentionPolicy.SOURCE )该注解有三个值供选择:
RetentionPolicy.SOURCE
这种类型的Annotations只在源代码级别保留,编译时就会被忽略
RetentionPolicy.CLASS
这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略。默认就是这个值
RetentionPolicy.RUNTIME
这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用.
如:@Override就是RetentionPolicy.SOURCE。
@SuppressWarnings也是RetentionPolicy.SOURCE 都是给编译看就没用了
@Deprecated是RetentionPolicy.RUNTIME
这些都可以通过jdk的文档看到
@Target
用于描述注解的使用范围(即:被描述的注解可以用在什么地方) 有7个取值,当然可以设置多个取值,以数组的形式如@Target={ElementType.xxx,ElementType.xxx}。
CONSTRUCTOR:用于描述构造器
FIELD:用于描述域
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数
TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Documented
Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中
@Inherited
允许子类继承父类的注解,
这个注解我也没具体试过 不是很清楚用法
下面举例说说怎么自定义注解
(相关问题都有注释 这里就不多写了)
自定义的注解类:
package com.Howard.test04; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义注解类 * 但是必须要加上元注解 * @Retention(RetentionPolicy.RUNTIME)元注解 * @Target设定该注解的使用的目标 可以是方法或类等,也可以多个 * @author Howard * 2017年2月19日 */ @Retention(RetentionPolicy.RUNTIME) @Target(value={ElementType.METHOD,ElementType.TYPE}) public @interface myAnnotation { //属性 @myAnnotation(xxx="yyy") //如果各个属性都没默认值 那么使用该注解必须注明所有属性的值 //如果有默认值的 可以不注明 注明则覆盖默认值 //如果属性是value的,并且只有这个属性或者其它属性有默认值不另赋值,那么vlue这个属性在注明的 //时候可以简单写为@myAnnotation("red") String color() default "red"; String value(); int[] attr() default {1,2,3}; //属性也是一个注解 mataAnnotation也是一个自定义注解 mataAnnotation mataAnnotation() default @mataAnnotation("aaa"); }
package com.Howard.test04; /** * @author Howard * 2017年2月19日 */ public @interface mataAnnotation { String value(); }
测试类:
package com.Howard.test04; /** * 测试java注解 * @author Howard * 2017年2月19日 */ @myAnnotation(value="abc",attr={3,4,5},mataAnnotation=@mataAnnotation("bbb")) public class AnnotationTest { @SuppressWarnings("deprecation") public static void main(String[] args) { //该方法已经过时 在方法上加注解@SuppressWarnings("deprecation")可以取消黄色提醒 System.runFinalizersOnExit(false); //过时 method1(); //检测是该类否有注解 if(AnnotationTest.class.isAnnotationPresent(myAnnotation.class)){ myAnnotation annotation = AnnotationTest.class.getAnnotation(myAnnotation.class); //该注解类必须有元注解才可以 //@com.Howard.test04.myAnnotation() System.out.println(annotation); //获取注解的属性值 System.out.println(annotation.color()); System.out.println(annotation.value()); System.out.println(annotation.attr().length); System.out.println(annotation.mataAnnotation().value()); } } @Deprecated public static void method1(){ //java为了可以向下兼容使用以前版本的jdk用户,并不会删除过时的方法,仅提醒而已 System.out.println("已经过时的方法,加注解就变成过时的方法"); } }
运行结果:
相关文章推荐
- java自定义注解简单小例子
- java自定义注解简单小例子
- java自定义注解以及注解的简单介绍
- java自定义注解简单小例子
- Java注解学习:注解术语以及自定义注解
- java中四种操作xml方式的比较以及四种方法的简单例子
- 堆排序的java简单实现以及讲解
- Android IOC 之 注解绑定控件 以及事件 事例 代码简单注释讲解
- java反射以及自定义注解二者的使用
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
- Java 自定义注解例子
- java 自定义注解例子
- 自己动手设计java web框架(二)-自定义注解以及通过反射获取注解
- java中的注解以及自定义注解
- JAVA自定义注解(小例子)
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
- 【OC学习-28】自定义对象的归档和解归档:例子说明以及简单总结
- iOS自定义弹出视图,以及简单的手势讲解
- 一个简单的Java程序例子以及其几种注释