创建

@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. Python中字典合并的四种方法

    字典是Python语言中唯一的映射类型.映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表.字典对象是可变的,它是一个容器类型,能存储任意个数的 ...

  2. vim下使用UltiSnips

    vim下使用UltiSnips 最近在学习Linux编程,相应的也在学vim.vim中的UltiSnips插件可以实现比一般的代码补全更为强大的效果.这里就记录一下吧. UltiSnips安装.基础及 ...

  3. PHPStorm开启MiniMap功能

    Sublime Text 右侧的代码导航(MiniMap)功能相当好用,PHPStorm第三方插件,可以实现相同功能. 只需要下载 CodeGlance 插件即可,如下操作

  4. springmvc中的参数接收

    import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import ...

  5. PDF转图片,在线PDF转JPG/PNG

    [在线DEMO](https://oktools.net/pdf2img) 原理 使用pdf.js预览图片,pdf.js将pdf通过canvas将每一页渲染出来,然后我们通过canvas的toData ...

  6. celery开发中踩的坑

    celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...

  7. git上传文件夹报错: ! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://github.com/taminachen/rjxm.git' hint: Updates were rejected because the remote contains work

    使用git上传本地文件夹到远程仓库,使用如下命令:git push -u origin master时报错 原因是在GitHub创建仓库时创建了readme文件,但是本地没有这个文件,造成本地目录与远 ...

  8. 一、H5(移动端)前端使用input type=file 上传图片,调用相机和相册

    一.H5(移动端)前端使用input type=file 上传图片,调用相机和相册

  9. Linux20期学习笔记 Day2

    Linux系统进程状态及部分基础命令

  10. 如何检测指定的Windows服务是否启动

    在项目中,特别是安装项目中我们经常要判断一些服务是否启动(判断SQL Server是否启动最常见),在.net中我们如何判断指定的Windows服务是否启动呢?首先要知道Windows服务的显示名称, ...