博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java注解Annotation详解
阅读量:6193 次
发布时间:2019-06-21

本文共 3068 字,大约阅读时间需要 10 分钟。

hot3.png

注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

自定义注解及其应用

1)、定义一个最简单的注解

public MyAnnotation {

    //......

}

2)、把注解加在某个类上:

@MyAnnotation

public class AnnotationTest{

    //......

}

以下为模拟案例

自定义注解@MyAnnotation

package com.ljq.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 定义一个注解 *  *  * @author jiqinlin * */ //Java中提供了四种元注解,专门负责注解其他的注解,分别如下 //@Retention元注解,表示需要在什么级别保存该注释信息(生命周期)。可选的RetentionPoicy参数包括: //RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉 //RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认) //RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息 //@Target元注解,默认值为任何元素,表示该注解用于什么地方。可用的ElementType参数包括 //ElementType.CONSTRUCTOR: 构造器声明 //ElementType.FIELD: 成员变量、对象、属性(包括enum实例) //ElementType.LOCAL_VARIABLE: 局部变量声明 //ElementType.METHOD: 方法声明 //ElementType.PACKAGE: 包声明 //ElementType.PARAMETER: 参数声明 //ElementType.TYPE: 类、接口(包括注解类型)或enum声明 //@Documented将注解包含在JavaDoc中 //@Inheried允许子类继承父类中的注解 @Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.TYPE}) public @interface MyAnnotation {    //为注解添加属性     String color();    String value() default "我是林计钦"; //为属性提供默认值     int[] array() default {1, 2, 3};     Gender gender() default Gender.MAN; //添加一个枚举     MetaAnnotation metaAnnotation() default @MetaAnnotation(birthday="我的出身日期为1988-2-18");    //添加枚举属性 }

注解测试类AnnotationTest

package com.ljq.test; /** * 注解测试类 *  *  * @author jiqinlin * */ //调用注解并赋值 @MyAnnotation(metaAnnotation=@MetaAnnotation(birthday = "我的出身日期为1988-2-18"),color="red", array={23, 26}) public class AnnotationTest {    public static void main(String[] args) {        //检查类AnnotationTest是否含有@MyAnnotation注解         if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){            //若存在就获取注解             MyAnnotation annotation=(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);            System.out.println(annotation);            //获取注解属性             System.out.println(annotation.color());             System.out.println(annotation.value());            //数组             int[] arrs=annotation.array();            for(int arr:arrs){                System.out.println(arr);            }            //枚举             Gender gender=annotation.gender();            System.out.println("性别为:"+gender);            //获取注解属性             MetaAnnotation meta=annotation.metaAnnotation();            System.out.println(meta.birthday());        }    }}

枚举类Gender,模拟注解中添加枚举属性

package com.ljq.test; /** * 枚举,模拟注解中添加枚举属性 *  * @author jiqinlin * */ public enum Gender {    MAN{        public String getName(){return "男";}    },    WOMEN{        public String getName(){return "女";}    }; //记得有“;”     public abstract String getName();}

注解类MetaAnnotation,模拟注解中添加注解属性

package com.ljq.test; /** * 定义一个注解,模拟注解中添加注解属性 *  * @author jiqinlin * */ public @interface MetaAnnotation {    String birthday();}

转载于:https://my.oschina.net/ydsakyclguozi/blog/384178

你可能感兴趣的文章
yii 10.16
查看>>
python3.4学习笔记(四) 3.x和2.x的区别,持续更新
查看>>
SPOJ QTREE4 lct
查看>>
音乐还在陪伴我
查看>>
Sql Server参数化查询之where in和like实现详解
查看>>
高性能负载均衡之分类架构
查看>>
8分钟学会Consul集群搭建及微服务概念
查看>>
【转】理解红黑树
查看>>
OBJEct-c中NSDictionary的用法
查看>>
Safari/Chrome中placeholder属性实现不完整
查看>>
转载 - 18个最佳代码编辑器/IDE推荐
查看>>
用Opencv保存视频文件avi(转)
查看>>
几条常见的数据库分页 SQL 语句
查看>>
XCode最佳实践之最佳数据类型
查看>>
asp.net 中sender 的理解
查看>>
RSS文章订阅及生成RSS格式的xml
查看>>
你自认为理解了JavaScript?
查看>>
读《程序员的SQL金典》[4]--SQL调优
查看>>
死锁产生的原因及四个必要条件
查看>>
CSS3----background:-webkit-gradient()渐变效果
查看>>