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

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

注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
 
 
 
 
自定义注解及其应用
1)、定义一个最简单的注解
public @interface MyAnnotation {
    //......
}
2)、把注解加在某个类上:
@MyAnnotation
public class AnnotationTest{
    //......
}
 
 
 
 
以下为模拟案例
自定义注解@MyAnnotation
1 package com.ljq.test;  2  3  import java.lang.annotation.ElementType;  4  import java.lang.annotation.Retention;  5  import java.lang.annotation.RetentionPolicy;  6  import java.lang.annotation.Target;  7  8  /**  9  * 定义一个注解 10  * 11  * 12  * @author jiqinlin 13  * 14  */ 15  //Java中提供了四种元注解,专门负责注解其他的注解,分别如下 16 17  //@Retention元注解,表示需要在什么级别保存该注释信息(生命周期)。可选的RetentionPoicy参数包括: 18  //RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉 19  //RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认) 20  //RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息 21 22  //@Target元注解,默认值为任何元素,表示该注解用于什么地方。可用的ElementType参数包括 23  //ElementType.CONSTRUCTOR: 构造器声明 24  //ElementType.FIELD: 成员变量、对象、属性(包括enum实例) 25  //ElementType.LOCAL_VARIABLE: 局部变量声明 26  //ElementType.METHOD: 方法声明 27  //ElementType.PACKAGE: 包声明 28  //ElementType.PARAMETER: 参数声明 29  //ElementType.TYPE: 类、接口(包括注解类型)或enum声明 30 31  //@Documented将注解包含在JavaDoc中 32 33  //@Inheried允许子类继承父类中的注解 34   35 36 @Retention(RetentionPolicy.RUNTIME) 37 @Target({ElementType.METHOD, ElementType.TYPE}) 38  public @interface MyAnnotation {
39 //为注解添加属性 40   String color(); 41 String value() default "我是林计钦"; //为属性提供默认值 42   int[] array() default {1, 2, 3}; 43 Gender gender() default Gender.MAN; //添加一个枚举 44   MetaAnnotation metaAnnotation() default @MetaAnnotation(birthday="我的出身日期为1988-2-18"); 45 //添加枚举属性 46   47 }
 
 
 
 
注解测试类AnnotationTest
1 package com.ljq.test;  2  3  /**  4  * 注解测试类  5  *  6  *  7  * @author jiqinlin  8  *  9  */ 10  //调用注解并赋值 11  @MyAnnotation(metaAnnotation=@MetaAnnotation(birthday = "我的出身日期为1988-2-18"),color="red", array={23, 26}) 12  public class AnnotationTest {
13 14 public static void main(String[] args) {
15 //检查类AnnotationTest是否含有@MyAnnotation注解 16   if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){
17 //若存在就获取注解 18   MyAnnotation annotation=(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class); 19 System.out.println(annotation); 20 //获取注解属性 21   System.out.println(annotation.color()); 22 System.out.println(annotation.value()); 23 //数组 24   int[] arrs=annotation.array(); 25 for(int arr:arrs){
26 System.out.println(arr); 27 } 28 //枚举 29   Gender gender=annotation.gender(); 30 System.out.println("性别为:"+gender); 31 //获取注解属性 32   MetaAnnotation meta=annotation.metaAnnotation(); 33 System.out.println(meta.birthday()); 34 } 35 } 36 }
 
 
 
 
 
枚举类Gender,模拟注解中添加枚举属性
1 package com.ljq.test;  2  /**  3  * 枚举,模拟注解中添加枚举属性  4  *  5  * @author jiqinlin  6  *  7  */  8  public enum Gender {
9 MAN{
10 public String getName(){return "男";} 11 }, 12 WOMEN{
13 public String getName(){return "女";} 14 }; //记得有“;” 15   public abstract String getName(); 16 }
 
 
 
 
 
注解类MetaAnnotation,模拟注解中添加注解属性
1 package com.ljq.test;  2  3  /**  4  * 定义一个注解,模拟注解中添加注解属性  5  *  6  * @author jiqinlin  7  *  8  */  9  public @interface MetaAnnotation {
10 String birthday(); 11 }
 
 
 
转自 http://www.cnblogs.com/linjiqin/archive/2011/02/16/1956426.html
作者:
出处:
QQ:519841366
       
本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
你可能感兴趣的文章
Linux中的ls命令详细使用
查看>>
graph-tool文档(一)- 快速开始使用Graph-tool - 2.属性映射、图的IO和Price网络
查看>>
GraphicsLab Project之辉光(Glare,Glow)效果 【转】
查看>>
<转>Python: __init__.py 用法
查看>>
Linux Curl命令
查看>>
046 SparlSQL中的函数
查看>>
-27979 LoadRunner 错误27979 找不到请求表单 Action.c(73): Error -27979: Requested form not found...
查看>>
[LeetCode] Minimum Depth of Binary Tree
查看>>
,net运行框架
查看>>
Java 中 Emoji 的正则表达式
查看>>
Mixin Network第一届开发者大赛作品介绍- dodice, diceos和Fox.one luckycoin
查看>>
安卓Glide(4.7.1)使用笔记 01 - 引入项目
查看>>
中金易云:为出版社找到下一本《解忧杂货店》
查看>>
Flex布局
查看>>
Material Design之 AppbarLayout 开发实践总结
查看>>
Flutter之MaterialApp使用详解
查看>>
DataBinding最全使用说明
查看>>
原生Js交互之DSBridge
查看>>
Matlab编程之——卷积神经网络CNN代码解析
查看>>
三篇文章了解 TiDB 技术内幕 —— 说计算
查看>>