认识Java注解
1.注解是什么?
注解,元数据的一种形式,提供与程序有关的数据,但又不是程序的一部分。注解对它们注解的代码操作没有直接影响。
附注:元数据是指用来描述数据的数据,更通俗一点,就是描述代码间关系,或者代码与其他资源(例如数据库表)之间内在联系的数据。在Java中,使用Annotation的概念来描述元数据。元数据以标签的形式存在于java代码中,元数据标签的存在并不影响程序代码的编译和执行。
2.注解有什么用?
- 给编译器提供信息——注解可以被编译器用来检测错误和抑制警告。
- 编译时和部署时处理——软件工具处理注解信息生成代码、XML文件等等
- 运行时处理——一些注解适用于在运行时检查。
3.注解被用于哪些地方?
注解可以应用于声明:类,字段,方法,以及其他程序元素的声明。
声明的类上:
- @Entity
- public class Person{...}
字段上:
- public class Person{
- @NotNull
- private String name;
- }
方法上:
- @Override
- public String toString(){...}
Java SE 8 发行版,注解也可以应用于使用的类型。下面是一些例子:
创建类实例的表达式中:
- new @Inner InnerObject();
类型转换中:
- String value = (@NotNull String) jsonObject;
implements语句中:
- class UnmodifiableList<T> implements @Readonly List<@Readonly T> { ... }
声明抛出的异常中:
- void doWork() throws @BaseServiceException ChannelException { ... }
像这种形式的注解,称为“类型注解”。
4.我们如何使用它?
4.1.声明注解
语法:
- [public/abstract] @interface Xxx{
- [public/abstract] [dataType] xx();
- [public/abstract] [dataType] xx() default x;
- }
示例:
- package org.springmorning.demo.javabase.annotation;
- /**
- * @author 春晨
- * @date 2019/1/8 9:30
- * Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10234764.html
- */
- public @interface Name {
- //名字
- String first();
- //姓氏
- String last();
- }
一、这种没有注解类型元素的注解,我们称之为标记注解类型(a marker annotation type),如下例的@Identifier注解;
- package org.springmorning.demo.javabase.annotation;
- /**
- * @author 春晨
- * @date 2019/1/8 8:58
- * Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10234764.html
- */
- public @interface Identifier {
- }
二、这种只有一个注解类型元素的注解,我们称之为单元素注解类型(a single-element annotation type),如下例的@Age注解;
三、定义注解类型元素时,可以设置默认值,如上例中的@Age注解;
- package org.springmorning.demo.javabase.annotation;
- /**
- * @author 春晨
- * @date 2019/1/7 19:56
- * Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10234764.html
- */
- public @interface Age {
- /**
- * 声明有默认值的注解属性
- */
- String value() default "N/A";
- }
注意:单元素注解,根据惯例,元素名称为value,如果注解类型元素名称为value,在使用它的时候可以省略名字;否则的话,名字不能省略。如下面示例,Magazine类中对age字段使用@Age注解,就省略了value名称。
四、注解声明的语法,允许除方法声明之外的其他元素声明,如下示例,声明注解要使用的枚举:
- package org.springmorning.demo.javabase.annotation;
- /**
- * @author 春晨
- * @date 2019/1/8 9:06
- * Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10234764.html
- */
- public @interface Sex {
- enum SEX { MALE, FEMALE }
- SEX value();
- }
五、在使用注解时,声明的类、方法、变量等其他程序元素上面可以有多个注解,如下面示例中对Magazine类中的age字段就使用了@Age注解和@SuppressWarning注解:
六、声明注解的元素,只能是以下类型:
- 所有基本类型(boolean,char,byte,short,int,long,float,double)
- String
- Class
- enum
- Annotation
- 以上类型的数组类型
如下面示例中,Description注解里面元素的类型就包括String、long、enum对象Version、String数组和Class这几种;
七、要想使@Description出现在Javadoc-generated文档中,你必须用@Documented注解给@Description注解定义。
- package org.springmorning.demo.javabase.annotation;
- /**
- * @author 春晨
- * @date 2019/1/7 14:01
- * Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10234764.html
- */
- public @interface Author {
- Name name();
- }
以下声明一个要示例中要使用的枚举:
- package org.springmorning.demo.javabase.annotation;
- /**
- * @author 春晨
- * @date 2019/1/7 17:19
- * Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10234764.html
- */
- public enum Version {
- V_1_0("1.0"), V_2_0("2.0");
- public String getVersion() {
- return version;
- }
- public void setVersion(String version) {
- this.version = version;
- }
- private String version ;
- private Version(String version) {
- this.version = version;
- }
- }
- package org.springmorning.demo.javabase.annotation;
- import java.lang.annotation.Documented;
- /**
- * @author 春晨
- * @date 2019/1/7 17:08
- * Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10234764.html
- */
- interface Formatter {}
- class CommonFormat implements Formatter {}
- class SpecificFormat implements Formatter{}
- @Documented
- public @interface Description {
- //作者
- Author author();
- //日期
- long date();
- //版本
- Version version() default Version.V_1_0;
- //上次修改时间
- String lastModified() default "N/A";
- //由谁修改
- String lastModifiedBy() default "";
- //贡献者
- String[] contributors();
- //优先使用的打印格式
- Class<? extends Formatter> prettyPrinter();
- }
- package org.springmorning.demo.javabase.annotation;
- /**
- * @author 春晨
- * @date 2019/1/7 13:59
- * Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10234764.html
- */
- @Description(
- author = @Author(name=@Name(first = "晨", last = "春")),
- date = 20190102,
- version = Version.V_2_0,
- lastModified = "2019-01-07 08:11:22",
- lastModifiedBy = "张三",
- contributors = {"张三","李四"},
- prettyPrinter = CommonFormat.class
- )
- public class Magazine {
- @Identifier
- private String id;
- @Author(name=@Name(first = "四", last = "李"))
- private String author;
- @Age("12")
- @SuppressWarnings("unchecked")
- private int age;
- @Sex(Sex.SEX.MALE)
- private String sex;
- @Override
- public String toString(){
- return super.toString();
- }
- }
4.2 预定义注解
Java SE API预定义了一系列的注解类型,这些注解根据其中一些注解类型用于Java编译器,另一些用于其他注解,如以上示例中@Document、@Override和@SuppressWarnings注解。
Java SE 8,预定义的注解有:@Target、@Retention、@Documented、@Inherited、@Repeatable、@Override、@SuppressWarnings、@Deprecated、@SafeVarargs和@FunctionalInterface这十种。
其中,我们把@Target、@Retention、@Documented、@Inherited、@Repeatable这五种注解,称为“元注解”,Java中的元注解专职负责注解其他注解的,用来标示其他注解的适用范围和作用域。
5. 下节继续
下节将给大家讲解,元注解@Target的使用。
认识Java注解的更多相关文章
- Java注解
Java注解其实是代码里的特殊标记,使用其他工具可以对其进行处理.注解是一种元数据,起到了描述.配置的作用,生成文档,所有的注解都隐式地扩展自java.lang.annotation.Annotati ...
- 19.Java 注解
19.Java注解 1.Java内置注解----注解代码 @Deprecated //不推荐使用的过时方法 @Deprecated ...
- Java注解入门
注解的分类 按运行机制分: 源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...
- java注解(Annotation)解析
注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ ...
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
- attilax.java 注解的本质and 使用最佳实践(3)O7
attilax.java 注解的本质and 使用最佳实践(3)O7 1. 定义pojo 1 2. 建立注解By eclipse tps 1 3. 注解参数的可支持数据类型: 2 4. 注解处理器 2 ...
- paip.java 注解的详细使用代码
paip.java 注解的详细使用代码 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...
- JAVA 注解的几大作用及使用方法详解【转】
java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...
- 框架基础——全面解析Java注解
为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...
- Java注解配置
Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annota ...
随机推荐
- Java:如何在PowerPoint幻灯片中创建散点图
散点图是通过两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式.散点图将序列显示为一组点,值由点在图表中的位置表示,类别由图表中的不同标记表示,通常用于比较 ...
- C#泛型的逆变协变(个人理解)
前编 一般来说, 泛型的作用就类似一个占位符, 或者说是一个参数, 可以让我们把类型像参数一样进行传递, 尽可能地复用代码 我有个朋友, 在使用的过程中发现一个问题 IFace<object&g ...
- Python的函数和方法如何区分呢?
结论>>>:无论是函数还是方法都用def关键字来定义 方法:只要是自动传值都是方法.由谁来调用.会把自身传入 函数:有几个值就传几个值否则会报错 目录 一.详细介绍函数和方法 二.用 ...
- pysimplegui之窗口大小,位子,主题等属性修改
重点 1finalize()或Window参数finalize=True 调用以强制窗口通过初始化的最后阶段.这将导致 tkinter 资源被分配,以便它们可以被修改.这也会导致您的窗口出现.如果您不 ...
- 五月十二号java基础知识点
1.注解是代码中特殊标记,作用是告知编译器做什么事2.反射允许程序在运行状态时,对任意一个字节码获取它所有信息3.内部类是定义在类中的嵌套类4.匿名内部类是定义在类的同时创建该类的一个对象5.lamb ...
- 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)
传送门:从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一) 一.设置Swagger页面为首页--开发环境 我们虽然可以在输入 /swagger 后顺利的访问 ...
- 【JavaSE】Java常用类
1.String的特性 代表字符串,java中所有字符串字面值都作为此类的实现例实现.String是一个final类,不能被继承.String实现了Serialiable,表示字符串支持序列化,实现了 ...
- golang 必会之 pprof 监控系列(5) —— cpu 占用率 统计原理
golang pprof 监控系列(5) -- cpu 占用率 统计原理 大家好,我是蓝胖子. 经过前面的几节对pprof的介绍,对pprof统计的原理算是掌握了七八十了,我们对memory,bloc ...
- css中文字与图片对齐
css中文字与图片对齐 第一种,使用vertical-align:middle .icon{ background-repeat:no-repeat; background-position:cent ...
- KMP字符串匹配问题
KMP算法 本文参考资料:https://www.zhihu.com/question/21923021 KMP算法是一种字符串匹配算法,可以在 \(O(n+m)\) 的时间复杂度内实现两个字符串的匹 ...