Java 注解

摘要:
@Document将注解包含在Javadoc中@Inherited允许子类继承父类中的注解3、自定义注解通过元注解,用户自己编写注解。
Java 注解

一、什么是Java注解:

Java注解(Annotation),是Java代码里的特殊标记,它为我们在代码中添加用Java程序无法表达的额外信息提供了一种形式化的方法,使我们在未来可以方便的使用这些被注解修饰的程序元素(类、方法、变量)。

二、Java注解的作用:

1、将由编译器来测试和验证的格式,存储有关程序的额外信息。比如@Override,可以让编译器检查子类中是否有重写父类中的方法。

2、生成描述性文件,甚至新的类定义。

3、减轻编写模板代码的负担。

4、使代码更加干净易懂。

三、Java注解的分类:

1、Java SE5内置了三种内建注解

@Override,表示当前的方法定义将覆盖超类中的方法。

@Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。

@SuppressWarnings,关闭不当编译器警告信息。

2、Java还提供了4种元注解

用来修饰其他注解定义,这4个注解分别是@Taget、@Retention、@Decoumented、@Inherited。下面表格中说明4种注解的说明。

@Target

表示该注解可以用于什么地方,可能的ElementType参数有:

CONSTRUCTOR:构造器的声明

FIELD:域声明(包括enum实例)

LOCAL_VARIABLE:局部变量声明

METHOD:方法声明

PACKAGE:包声明

PARAMETER:参数声明

TYPE:类、接口(包括注解类型)或enum声明

@Retention

表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:

SOURCE:注解将被编译器丢弃

CLASS:注解在class文件中可用,但会被VM丢弃

RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。

@Document

将注解包含在Javadoc中

@Inherited

允许子类继承父类中的注解

3、自定义注解

通过元注解,用户自己编写注解。例如下面代码就是用户定义的自定义注解。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interfaceTest {
 
}

除了@符号,注解很像是一个接口。定义注解的时候需要用到元注解,上面用到了@Target和@RetentionPolicy,它们的含义在上面的表格中已近给出。

在注解中一般会有一些元素以表示某些值。注解的元素看起来就像接口的方法,唯一的区别在于可以为其制定默认值。没有元素的注解称为标记注解,上面的@Test就是一个标记注解。

注解的可用的类型包括以下几种:所有基本类型、String、Class、 enum、Annotation、以上类型的数组形式。元素不能有不确定的值,即要么有默认值,要么在使用注解的时候提供元素的值。而且元素不能使用 null作为默认值。注解在只有一个元素且该元素的名称是value的情况下,在使用注解的时候可以省略“value=”,直接写需要的值即可。

下面看一个定义了元素的注解。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interfaceUseCase {
    publicString id();
    public String description() default "no description";
}

定义了注解,必然要去使用注解。

复制代码
public classPasswordUtils {
     @UseCase(id = 47, description = "Passwords must contain at least one numeric")
     public booleanvalidatePassword(String password) {
         return (password.matches("\w*\d\w*"));
     }
 
     @UseCase(id = 48)
     publicString encryptPassword(String password) {
         return newStringBuilder(password).reverse().toString();
     }
 }
复制代码

使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器。

从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。

复制代码
Found Use Case:47Passwords must contain at least one numeric

Found Use Case:48no description

Warning: Missing use case-49
Warning: Missing use case-50
复制代码

上面的三段代码结合起来是一个跟踪项目中用例的简单例子

四、注解和注释的区别:

注解与普通的注释有一定的区别,也有一定的联系。注解和注释都属于对代码的描述,注释的作用只是简单的描述程序的信息,它不会被程序所读取;而注解则是Java代码中的特殊标记,这些标记可以在编译、加载、运行时被读取,并执行相应的处理。

免责声明:文章转载自《Java 注解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CSS3基础(2)—— 文字与字体相关样式、盒子类型、背景与边框相关样式、变形处理、动画功能【自然语言处理】利用朴素贝叶斯进行新闻分类(自己处理数据)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

python调用接口,python接收post请求接口(附完整代码)

与Scala语言相比,Python有其独特的优势和广泛的应用。Python调用接口,因此Spark还引入了PySpark,它在框架上提供了一个使用Python语言的接口。Python接收后请求接口,这为数据科学家使用框架提供了一种方便的方式。Python和JVM进程同时出现在驱动程序和执行器上。当通过spark-submit提交PySparkPython脚本...

svn常见问题汇总

要添加到版本库,必须更新工作副本中的文件。5.更新时,系统会提示您文件冲突,将工作副本中的文件与服务器中的文件进行比较“当版本管理系统更改计算机上的工作副本时”,它会尝试将您的意图写入计算机上的日志文件,因此日志文件记录可能与您的上次工作状态不一致。Subversion客户端将在提交内容之前在本地工作副本中写入日志。首先删除隐藏文件夹中tmp下的临时文件。服...

Android Exception 10(server)' ~ Channel is unrecoverably broken and will be disposed!)

08-1119:22:35.028:W/MemoryDealer(2123):madvise(0x43e1600012288,MADV_REMOVE)返回操作不支持传输端点08-1119:22-35.038:W/InputDispatcher(2714):channel'4236b890com.tongyan.activi...

Django如何安装指定版本

Django的最新版本默认安装为:pipinstalldjangoDjango,然后是版本号:pipinstalldjango==1.11.7如果使用pipinstall库的安装速度较慢,您可以使用豆瓣的图片:pipinstalldjango==1.11.7-ihttp://pypi.douban.com/simple--trusted-hostpypi.d...

Vue跨层级传递slot的方法

但是我需要通过插槽在父组件中指定一个模板,而B组件引用C组件。组件C的部分模板需要在组件A中配置。模板引用A组件:{{node.text}}<模板引用B组件:spanslot=“nodeMenu”slot scope=“{node}”>node=“node”>/span>/div>2.2如...

LaTeX表格tabular背景色添加技巧 [转]

我们所用的宏包为colortbl,这个宏包可以设置表格中数据、文本、行、列、单元格前景和背景以及边框的颜色,从而得到彩色表格。同时需要array和color两个宏包的支持。宏包提供了一组着色命令,经常用到是列着色命令,其格式为:\columncolor[色系]{色名}[左伸出][右伸出]。常用色系有三原色rgb灰度gray和四色cmyk三种;被预定义的色名有...