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

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

1.什么是注解

  1. 注解的语法: @注解名称;
  2. 注解的作用: 用来替代 xml 配置文件; 在 Servlet 3.0 中就可以使用注解来代替配置文件;
  3. 注解是由框架来读取使用的;
  4. 所有的注解都是 Annotation 的子类;
  5. 简单说, 注解是给程序(框架)看到, 而注释是给人看的.

2. 注解的使用

  • 定义注解类: 框架的工作; 语法: public @interface MyAnnotation{....}.
  • 使用注解: 程序员的工作;
  • 读取注解(反射): 框架的工作;

3. 注解的属性

3.1 定义属性
  • 格式: 类型 属性名();
// 定义属性    @interface MyAnno2 {        int age();  // 定义属性 age        String name(); // 定义属性 name        String value() default "hello world!";  // value 是带有默认值的属性    }
3.2 使用注解时,给属性赋值
@MyAnno2(age=100, name="zhangsan")    public class Demo{        ......    }
3.3 属性名为 value 的特权
  • 当使用注解时, 如果只给名为 value 的属性赋值时,可以省略 "value="
    例如: @MyAnno(value="hello") 可以书写成 @MyAnno("hello")
3.4 注解属性的类型
  • 八种基本数据类型
  • String 类型
  • Enum 类型
  • Class 类型
  • 注解类型
  • 以上类型的一维数组类型
  • Integer 类型不可以
@MyAnno2(        // 为注解属性赋值        a=100,        b="hello",        c=MyEnum1.A,        d=String.class,        e=@MyAnno3(aa=200,bb="world"),        f={"",""}  // 如果数组中的元素个数为1时, 可以省略大括号    )    public class Demo{    }    // 定义注解    @interface MyAnno2 {        int a();        String b();        MyEnum1 c(); // Enum 类型        Class d();        MyAnno3 e();        String[] f(); // 数组类型    }    @interface MyAnno3 {        int aa();        String bb;    }

4. 注解的作用目标限定以及保留策略限定

4.1 注解的作用目标限定
  • 使用方式: 在定义注解时,给注解添加 @Target 注解;
@Target(value={ElementType.Type, ElementType.METHOD, ElementType.FIELD})    @interface MyAnno2{    }    // ElementType 是枚举类型    // 可选值: TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,    //       ANNOTATION, PACKAGE
4.2 保留策略
  • 源代码文件(SOURCE): 注解只能在源代码中存在,当编译时,就被忽略了;
  • 字节码文件(CLASS): 注解在源代码中存在,然后编译时,会把注解信息放到 class 文件,但 JVM 在加载类时,会忽略注解;
  • JVM (RUNTIME): 注解在源代码,字节码文件中存在,并且在 JVM 加载类时,会把注解加载到 JVM 内存中(它是唯一可反射注解!!)
// 限定注解的保留策略, Retention 为枚举类型    @Retention(RetentionPolicy.RUNTIME)    @interface MyAnno2 {....}

参考资料:

转载于:https://www.cnblogs.com/linkworld/p/7678397.html

你可能感兴趣的文章
MongoDB培训
查看>>
机器学习开源项目精选TOP30
查看>>
python基础===对字符串进行左右中对齐
查看>>
一起谈.NET技术,ASP.NET缓存全解析6:数据库缓存依赖
查看>>
代码分析系列 内存执行过程
查看>>
iOS开发-邮件发送
查看>>
/etc/resolv.conf文件详解
查看>>
【转】VC的MFC中重绘函数的使用总结(整理)
查看>>
JQuery日记_5.13 Sizzle选择器(六)选择器的效率
查看>>
System.gc()与Object.finalize()的区别
查看>>
Memcache存储大数据的问题
查看>>
HTML5区域范围文本框实例页面
查看>>
oracle查看经常使用的系统信息
查看>>
利用PowerShell创建事件日志
查看>>
ifconfig命令
查看>>
mysql日常命令二
查看>>
函数的创建及使用时的注意事项
查看>>
解决安装SQL Server 2000提示文件挂起的一般方法
查看>>
tomcat的一个常见错误
查看>>
运维经验分享(五)-- 改进的java进程管理的服务控制脚本
查看>>