创建

@Target({ElementType.Type})
@Retention(RetentionPolicy.RUNTIME)
public @interface Fruit {
String value() default "";
String name() default "noname";
float price() default 0;
} // 1. 创建的语法跟接口非常像
// 2. 可以通过 default 语句给与默认值

@Target

目标。

表示这个注解可以放到哪些元素上面。如果不设定,那么注解可以放置到任何元素上。

可以有很多选项,比如:

  • ElementType.TYPE,可以放到类、接口、枚举类上面
  • ElementType.METHOD,可以放到方法上面
  • ElementType.PARAMETER,可以放到参数上面

更多,请查看 ElementType 的源码。

@Retention
保留。 有三种策略: RetentionPolicy.SOURCE
RetentionPolicy.CLASS [默认]
RetentionPolicy.RUNTIME
添加的注解会被保留到什么步骤。 一个 Xxx.java 从产生到执行,会经历这样的步骤
Xxx.java --javac--> Xxx.class --java--> 机器码执行

  执行 javac 的过程,叫编译时(Compile);

  执行 java 的过程,叫运行时(Runtime);

  如果 @Retention 策略设置为:

  • SOURCE,那么在 javac 阶段注解会有效,编译之后注解将会被抛弃
  • CLASS,那么注解将会被编译到 class 文件中,但它不能在运行时通过反射获取
  • RUNTIME,那么注解将会被编译到 class 文件中,并能在运行时通过反射获取

  @Documented

  表示是否允许 javadoc 或相关工具为这个注解生成文档

  @Inherited

  表示注解是否可以被子类继承。

 注解的使用

首先,在需要的地方,添加注解:

@Fruit(name = "apple", price = 33)
public class Apple {
// ...
}

  三个重要的方法:

  • isAnnotationPresent()
  • getAnnotation()
  • getAnnotations()

使用示例:

// 获取 Apple 的类对象
Class aClass = Apple.class; if (aClass.isAnnotationPresent(Fruit.class)) { // 判断 Apple 上面是否标注了 Fruit 注解
Fruit anno = aClass.getAnnotation(Fruit.class); // 通过反射的方式,获取 Apple 上面的 Fruit 注解的实例 String name = anno.name(); // 可以像调用普通方法一样调用,从而获取参数
float price = anno.price(); System.out.println(name + "的价格为" + price);
}

  JDK 内置注解

  • @Override, 重载
  • @SuppressWarnings, 抑制警告信息
  • @Deprecated, 标注方法已过时,那么在编译的时候,编译器会发出相关警告
  • @SafeVarargs
  • @FunctionInterface

java中定义注解的更多相关文章

  1. java中的注解(Annotation)

    转载:https://segmentfault.com/a/1190000007623013 简介 注解,java中提供了一种原程序中的元素关联任何信息.任何元素的途径的途径和方法. 注解是那些插入到 ...

  2. java中的注解详解和自定义注解

    一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...

  3. java中元注解

    java中元注解有四个: @Retention @Target @Document @Inherited:  @Retention:注解的保留位置 @Retention(RetentionPolicy ...

  4. 【java】细说 JAVA中 标注 注解(annotation)

    Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用 下面我们来详细说说这个注解,到底是怎么一 ...

  5. java中的注解总结

    1. 什么是注解 注解是java5引入的特性,在代码中插入一种注释化的信息,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注解.注解也叫元数据(meta data).这些注解信 ...

  6. Java深入 - 深入 Java自己定义注解

    我们在使用Spring框架的时候,会常常使用类似:@Autowired 这种注解. 我们也能够自定义一些注解.Java的注解主要在包:java.lang.annotation中实现. 1. 元注解 什 ...

  7. 【java】详解java中的注解(Annotation)

    目录结构: contents structure [+] 什么是注解 为什么要使用注解 基本语法 4种基本元注解 重复注解 使用注解 运行时处理的注解 编译时处理的注解 1.什么是注解 用一个词就可以 ...

  8. Java中的注解基础

    一.元注解 元注解的作用就是负责注解其他注解. 1.@Target @Target用来指明注解所修饰的目标,包括packages.types(类.接口.枚举.Annotation类型).类型成员(方法 ...

  9. 【面试加分项】java自己定义注解之申明注解

    之前的博客http://blog.csdn.net/u010590685/article/details/47029447介绍了java的注解的基本知识今天我们学习怎样使用自己定义注解. 首先我们要声 ...

随机推荐

  1. 02:Redis常见面试题

    1.1 redis基础面试题 1.什么是Redis?简述它的优缺点? 1. Redis本质上是一个Key-Value类型的内存数据库,很像memcached. 2. 整个数据库统统加载在内存当中进行操 ...

  2. D - 秋实大哥与快餐店

    秋实大哥与快餐店 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  3. 认识react, 并简单与vue对比

    应用场景: 负责场景下的高性能 重用组件库,组件组合 中文官网:https://reactjs.org.cn/doc/in... 特点: 声明式编码(不需要关心如何实现,只需要关注在哪里做什么) 组件 ...

  4. RabbitMQ入门教程(十七):消息队列的应用场景和常见的消息队列之间的比较

    原文:RabbitMQ入门教程(十七):消息队列的应用场景和常见的消息队列之间的比较 分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 这是网上的一篇教程写的很好,不知原作 ...

  5. express-handlebars

    https://www.npmjs.com/package/express-handlebars

  6. 利用ios safari浏览器生成桌面快捷方式并唤醒app的示例代码

    html 内容: //通过a链接唤醒app  <a href="app约定好的scheme" id="qbt" style="display:n ...

  7. nacos集群搭建

    nacos介绍 Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心).动态配置服务(可以做配置中心).动态 DNS 服务. 1.从官网下载nacos压缩 ...

  8. Inno setup 开源的安装包打包软件

    Inno Setup是一个开源的安装包打包软件,下载地址是:http://www.jrsoftware.org/isdl.php 使用引导界面创建一个安装包打包 配置参考官方文档:http://www ...

  9. 【转】Linux添加虚拟网卡

    转自:https://blog.csdn.net/hzhsan/article/details/44677867 有时候,一台服务器需要设置多个ip,但又不想添加多块网卡,那就需要设置虚拟网卡.这里介 ...

  10. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...