java 注解数组初始化_Java 之 注解的定义
一、元注解
1、元注解概述
元注解:用于描述注解的注解
2、常用的元注解
(1)@Target:描述注解能够作用的位置
Target 里面是一个 ElementType[] value() 的枚举数组,这个数组里面指定了10个常量对象。
源码:
1 public enumElementType {2 /**Class, interface (including annotation type), or enum declaration*/
3 TYPE, //表示可以作用与类、接口上4
5 /**Field declaration (includes enum constants)*/
6 FIELD, // 表示可以作用于成员变量上7
8 /**Method declaration*/
9 METHOD, // 表示可以作用与方法上10
11 /**Formal parameter declaration*/
12 PARAMETER,13
14 /**Constructor declaration*/
15 CONSTRUCTOR,16
17 /**Local variable declaration*/
18 LOCAL_VARIABLE,19
20 /**Annotation type declaration*/
21 ANNOTATION_TYPE,22
23 /**Package declaration*/
24 PACKAGE,25
26 /**
27 * Type parameter declaration28 *29 *@since1.830 */
31 TYPE_PARAMETER,32
33 /**
34 * Use of a type35 *36 *@since1.837 */
38 TYPE_USE39 }
(2)@Retention:描述注解被保留的阶段
该注解右 RetentionPolicy 枚举类型的三个常量对象指定:
分别是:
1 public enumRetentionPolicy {2 /**
3 * Annotations are to be discarded by the compiler.4 */
5 SOURCE, //当前被描述的注解,不会存在 class 字节码文件中(不常用)6
7 /**
8 * Annotations are to be recorded in the class file by the compiler9 * but need not be retained by the VM at run time. This is the default10 * behavior.11 */
12 CLASS, //当前被描述的注解,会保留到class字节码文件中,但是不会被JVM读取。(不常用)13
14 /**
15 * Annotations are to be recorded in the class file by the compiler and16 * retained by the VM at run time, so they may be read reflectively.17 *18 *@seejava.lang.reflect.AnnotatedElement19 */
20 RUNTIME //当前被描述的注解,会保留到class字节码文件中,并被JVM读取到(自定义常用)21 }
(3)@Documented:描述注解是否被抽取到 API 文档中
如果在被描述的注解A上添加了该元注解,那么当一个类B使用注解A时,注解A会被抽取到 api 文档中。
(4)@Inherited:描述注解是否被子类继承
如果在被描述的注解A上添加了该元注解,那么当一个类B使用注解A时,这个类B的子类C也会使用注解A。
二、自定义注解
1、自定义注解格式
语法格式:
元注解
【修饰符】 @interface 注解名称{
属性列表;
}
首先创建一个 MyAnno 类,然后在 cmd 窗口通过 javac 文件名.java 编译文件,接着再使用 javap 文件名.class 进行反编译。
public @interface MyAnno {}
通过反编译,我们得到一个信息:
public interface MyAnno extends java.lang.annotation.Annotation {}
总结:注解本质上就是一个接口,该接口默认继承Annotation接口
2、属性
注解既然是一个接口,那么就可以在接口中声明方法。
属性:接口中的抽象方法。
属性的返回值类型有下列取值:
① 基本数据类型
② String 类型
③ 枚举 Enum 类型
④ 注解类型
⑤ 以上类型的数组
3、属性的赋值
在注解中定义了属性,在使用时需要给属性赋值:
(1) 如果定义属性时,使用 default 关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
(2) 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
(3) 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略。
Demo:自定义一个注解
1 importjava.lang.annotation.ElementType;2 importjava.lang.annotation.Retention;3 importjava.lang.annotation.RetentionPolicy;4 importjava.lang.annotation.Target;5
6 /**
7 * 描述需要执行的类名和方法名8 */
9 @Target({ElementType.TYPE})10 @Retention(RetentionPolicy.RUNTIME)11 public @interfacePro {12
13 String className();14 String methodName();15 }
总结:注解是给编译器,解析程序使用的;注解不是程序的一部分。
java 注解数组初始化_Java 之 注解的定义相关推荐
- java一维数组初始化_Java一维数组,初始化一维数组详解
Java语言当中数组必须先初始化,之后才能够使用,那么下面的文章就来给大家讲一下初始化一维数组方面的知识. 所谓的初始化指的就是为数组的数组元素分配内存空间,并且为每一个个数组元素赋初始值. 那么可不 ...
- java 整形数组初始化_java中怎么数组初始化?
展开全部 当你产生某个存储对象的数组时,真正产生的其实是个存储references的数组.此一数组建立之后,其中62616964757a686964616fe4b893e5b19e3133336564 ...
- java byte数组 初始化_Java根据byte数组,生成文件
根据byte数组,生成文件 自己写的小案例,找个地方记录一下 package com.seesun2012.utils; import java.io.BufferedOutputStream; im ...
- java 集合数组初始化_Java用Arrays.asList初始化ArrayList实例方法
Java用Arrays.asList初始化ArrayList实例方法 发布于 2020-2-29| 复制链接 在本篇文章里小妖给大家分享的是关于Java中使用Arrays.asList初始化Array ...
- java file数组 初始化_java从文件中读取数据并赋值给数组
从txt文件中读取数据赋值给一维数组 字节流读入字节数组中 字节数组转化为字符串 字符创解析为字符串数组 字符串数组转化为数值,并赋值为数组 文本文件是以字节的形式储存的. 在txt文件中一个数字或者 ...
- java long 数组初始化_java基本类型数组初始化 | 学步园
1.byte.short.int.long类型数组,数组元素默认初始化为0. byte[] i= new byte[10]; //short[] i = new short[10]; //int[] ...
- java privilege的用法_java反射--注解的定义与运用以及权限拦截
自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是 ...
- Java通过自定义注解执行方法_Java自定义注解(使用篇)
TL;DR Java 注解广泛运用在开发之中,用于增强变量/方法/类等. 尝试说明 Java 自定义注解的使用,以及通过开源项目中的使用进行说明. 本文主要记录个人的理解,全文基于Java SE8. ...
- java自定义注解为空值_java自定义注解
1. Java注解(Annotation) Java注解是附加在代码中的一些元信息,用于一些工具在编译. 运行时进行解析和使用,起到说明.配置的功能. 注解相关类都包含在java.lang.annot ...
最新文章
- 用python画太阳系_用 Python 动态模拟太阳系运转
- 成功解决 bs4\__init__.py:219: UserWarning: b'.' looks like a filename, not markup. You should probably
- php7连接mongodb,批量添加数据
- Mathematica修改默认字体
- GitHub上有哪些比较好的计算机视觉/机器视觉的项目?
- mysql pdo 事务处理_php中pdo的mysql事务处理实例
- 当我们群嘲假博士时,不要忘了真博士们的艰辛
- HugeGraph 图数据库索引介绍 - 范围索引,全文索引
- 搭建cacti监控平台
- iQOO 5今日发布:厚度/重量揭晓 5G手机也能够轻薄
- 2012,字王强势回归
- opesnstack四部曲(1)---keystone
- 开源软件的中年危机如何破解?
- 原生JavaScript事件详解
- 文字处理技术:标点压缩
- 在网站中使用谷歌“ROBOTO”字体(解决ios数字1和0大小不等宽问题)
- 数据库索引及基础优化入门
- Python(爬虫篇)--- 验证码破解【二】滑块验证码
- javascript设置网页快捷键
- Windows系统 修改 dns
热门文章
- iOS 开发周报:Apple 发布 iPhone 7 / 7 Plus 、Apple Watch 2 等新品
- 【译】CodeIgniter HMVC模块扩展使用文档
- python --函数
- ORA-12519: TNS:no appropriate service handler found 解决
- Azure Backup 简介
- 谈谈即时通讯开发平台
- js面向对象开发互联网机顶盒应用头端之二
- VB.NET怎样开发自定义Windows控件
- DAVINCI开发原理之三----达芬奇编解码引擎Codec Engine(CE)
- virtual、override-蝌蚪和青蛙-C#多态