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 }

总结:注解是给编译器,解析程序使用的;注解不是程序的一部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python is beautiful_Python list 和 str 互转

一、list转字符串 命令:.join(list) 其中,引号中是字符之间的分割符,如“,”,“;”,“\t”等等 如: list [1, 2, 3, 4, 5] .join(list) 结果即为:12345 ,.join(list) 结果即为:1,2,…

SQL Server Insert 操作效率(堆表 VS 聚集索引表)

“SQL Server的Insert操作在堆表或者聚集索引表的时候,哪个效率更高?为什么高?” 之前有同事问过我这个问题,为了确保日志库的记录效率,于是我做了简单测试了,首先要先强调几点概念: 堆表&#…

React 回忆录(三)使用 React 渲染界面

Hi 各位,欢迎来到 React 回忆录!? 在上一章中,我介绍了 React 框架的“五大特点”:虚拟DOM,组件化,声明式代码,单向数据流和纯粹的 JavaScript 语法。在本章中,我们将谈到 React 是…

linux java javac版本_linux下java 和 javac version 不一致问题

centos下我新安装了个jdk1.7的版本 ,vi profile 之后 java -version 是新版本,想在看看javac -version 发现还是1.6的之前安装了1.6的 那好咱就卸载他查找Java 版本信息rpm -qa|grep java返回如下信息 xorg-x11-drv-savage-2.1.1-5.fc6avahi-glib-0.6.16…

electron 打包_Vue3+Electron整合方式

教程源码:nofacer/vue3-electron​github.com之前写过一篇文章Vue结合Electron构建跨平台应用(TDD)。当时的方法后来发现了一个问题,就是打包后的应用拿到其他机子上没法用,原因在于index.html的地址是个绝对路径&…

全国计算机等级考试题库二级C操作题100套(第37套)

第37套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应信息。ss所指字符串数组中共有N个字符串,且串长小于M。程序中库函数strstr(s1, s2)…

ABAP编程中对内表的定义,后面接一个OCCURS (n)是代表什么意思。

对内表的定义,我只说下有没occurs的区别。**DATA: BEGIN OF itab OCCURS 0,* matnr LIKE mara-matnr,* maktx LIKE makt-maktx,* END OF itab.**SELECT * FROM makt INTO CORRESPONDING FIELDS OF TABLE itab .**LOOP AT itab.* WRITE:/* itab-matnr,* itab-m…

Linux按照时间顺序列出文件

按照递增时间顺序列出所有文件 ls -ltr -l表示列出长串数据,-t表示按照时间顺序,-r表示将排序的结果反向输出 按照时间递减的顺序列出所有文件 ls -lt 转载于:https://www.cnblogs.com/yongjieShi/p/9395932.html

java释放list_Java中List集合中subList的坑

参考博主http://blog.csdn.net/xuweilinjijis/article/details/9037635先看List接口subList方法的javadocThe returned list is backed by this list, so non-structural* changes in the returned list are reflected in this list, and vice-versa.* The returned list suppo…

全国计算机等级考试题库二级C操作题100套(第38套)

第38套: 函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、 a[1]、a[2]、……中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、…

RestKit

2019独角兽企业重金招聘Python工程师标准>>> Restkit 是一个开源的 objective-c 框架,允许在 iOS 和 Mac OS X 的 Objective-C 中与 RESTful Web 服务进行交互,包含简单的 HTTP request/response API ,带有强大的对象映射系统用于…

全国计算机等级考试题库二级C操作题100套(第39套)

第39套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。ss所指字符串数组中共有N个字符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线…

java判断是否包含张三_c# 数组 字符串 C#中判断字符串中包含某个字符

Nodejs windows的安装0.下载地址: http://nodejs-org.qiniudn.com/ https://nodejs.org/download/ https://nodejs.org/en/ 1.基本就是一路N ...跨平台网络抓包工具-Microsoft Message AnalyzerMicrosoft Message Analyzer (MMA 2013)是微软最受欢迎的Netmon的最新版本. 在Netm…

python能开发游戏吗_python可以开发游戏吗,python能开发游戏吗

Q2:用python能制作游戏吗 能,但不适合。 用锤子能造汽车吗? 谁也没法说不能吧?地球上也有很多汽车,是用锤子造出来的。。。。但一般来说,还是用工业机器人更合适对吗? 比较大型的,使…

golang log日志

写入日志文件 func main() {file, err : os.Create("test.log")if err ! nil {log.Fatalln("fail to create test.log file!")}logger : log.New(file, "", log.Llongfile)// 写入文件log格式:/Users/zhou/go/src/zhouTest/test.go:2…

[Andriod官方训练教程]保存数据之保存键-值对的集合

原文地址:https://developer.android.com/training/basics/data-storage/shared-preferences.html ------------------------------------------------------------------------------------------------------------------------------- If you have a relatively …

全国计算机等级考试题库二级C操作题100套(第40套)

第40套: 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。 请在程序的下划线处填…

java里面有控制器吗_mvc中 控制器部分可以使用Javabean完成吗?为什么?

模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。1、模型(Model)模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑.2、视图(View)视图是应用程序中用户界面相关的部分,是用户看到并与之交互…

python时间计算_python计算两日期之间工作日时长

1. 原因:使用dateutil的rrule时,计算速度比较慢 def axx(): from dateutil import rrule received_time datetime.datetime.strptime(2019-04-21 23:00:00, %Y-%m-%d %H:%M:%S) complete_time datetime.datetime.strptime(2019-04-22 01:00:00, %Y-%m-…