什么是 Annotation? (注解 or 注释)

Annotation, 准确的翻译应该是 -- 注解。 和注释的作用完全不一样。

Annotation 是JDK5.0及以后版本引入的一个特性。 与类、接口、枚举是在同一个层次,可以成为java 的一个类型。

语法是以@ 开头

简单来说,

注释是程序员对源代码的类,方法,属性等做的一些记忆或提示性描述(比如这个方法是做什么用的),是给人来看的。

注解则是Java 编译器可以理解的部分,是给编译器看的。

举个简单的例子来看一下注解的使用和作用。

@Override 是比较常见的Java 内置注解,它的作用就是在编译代码的时候检查子类中定义的方法是否正确。

package annotation;public abstract class Animal {public abstract void eat();
}
package annotation;public class Cat extends Animal{@Overridepublic void eat(String food) {  }
}

这里在子类Cat中 eat 方法被注解为覆写父类的方法, 但是却比父类方法多出一个参数。

如果是在Eclipse 在编辑的话, 直接就会有红色叉叉提示。(代码编译会通不过)。

如果去掉@Override的注解的话, 编译没问题, 但是Cat 中eat方法就是这个类的一个新的方法了,而不是从父类继承的了。

常见的Java 内置注解

包含@Override , 还有哪些常见的Java内置注解?

1. @Deprecated

注解为不建议使用,可以用在 方法和类上。

基本上这种方法和类都是因为升级或性能上面的一些原因废弃不建议使用,但是为了兼容或其他原因,还必须保留。

所以就打上这个注解。

在Java 本身的API中就有很多这样的例子, 方法打上了这个注解,进到Source code 会看到替代的新的方法是哪个。

在eclipse 中编写code时,添加此注解的方法在声明和调用的地方都会加上删除线。

2.@Override

3.@SuppressWarnings

忽略警告。

如果你的code在转型或其他的部分有一些警告的话,但是你又想忽略这些警告,就可以使用这个注解了。

1)deprecation 使用了不赞成使用的类或方法时的警告

2)unchecked 执行了未检查的转换时警告

3)fallthrough 当使用switch操作时case后未加入break操作,而导致程序继续执行其他case语句时出现的警告

4)path 当设置一个错误的类路径、源文件路径时出现的警告

5)serial 当在可序列化的类上缺少serialVersionUID定义时的警告

6)fianally 任何finally子句不能正常完成时警告

7)all 关于以上所有情况的警告

自定义注解

除了Java本身提供的内置注解, Java 还提供了定制自定义注解的功能。

定义的方式就是使用注解定义注解, 用来定义注解的注解称为元注解。

主要的元注解有以下四个:@Target ;@Retention;@Documented;@Inherited

1. @Target 表示该注解用于什么地方,使用在类上,方法上,或是属性等

可能的 ElemenetType 参数包括:
ElemenetType.CONSTRUCTOR 构造器声明
ElemenetType.FIELD 域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE 局部变量声明
ElemenetType.METHOD 方法声明
ElemenetType.PACKAGE 包声明
ElemenetType.PARAMETER 参数声明
ElemenetType.TYPE 类,接口(包括注解类型)或enum声明

2. @Retention 表示在什么级别保存该注解信息

可选的 RetentionPolicy 参数包括:
RetentionPolicy.SOURCE 注解将被编译器丢弃
RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。

3. @Documented ,产生doc时,是否包含此注解

将此注解包含在 javadoc 中

4.  @Inherited

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

看一些简单定义的例子:

package annotation;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)
public @interface MyAnnotation {String value();
}@Retention(RetentionPolicy.SOURCE)
@interface MyAnnotation1 { } @Retention(RetentionPolicy.CLASS)
@interface MyAnnotation2 {} @Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3 {}@Documented
@interface MyAnnotation4 {}@Inherited
@interface MyAnnotation5 { }

使用例子:

package annotation;import java.lang.annotation.Annotation;@MyAnnotation3
public class TestAnnotation {public static void main(String[] args) {// TODO Auto-generated method stubAnnotation annotation = TestAnnotation.class.getAnnotation(MyAnnotation3.class);System.out.println(annotation.toString());}}

打印出结果: @annotation.MyAnnotation3()

以上例子如果替换使用 MyAnnotation1 和 MyAnnotation2 的话, 则取到的annotation的值为空,这就是RetentionPolicy 不同的差别。

Annotation的作用


介绍到此,可以总结一下Annotation的作用了。
基础的大致可以分为三类:
1. 编写文档
2. 代码分析
3. 编译检查
但是,开源框架对其赋予了更多的作用
比如:
Hibernate,注解配置,

@Column("aa")
private String xx;

这个类似于XML配置,简化程序中的配置
相对与把一部分元数据从XML文件移到了代码本身之中,在一个地方管理和维护。
内部如何实现的? -- java 反射机制,类似与以上例子。

Java 之 Annotation(注解)介绍相关推荐

  1. 注解 java.lang.annotation.Inherited 介绍

    在Spring Boot中大量使用了@Inherited注解.我们来了解一下这个注解的用法,注解的源码: package java.lang.annotation;/*** Indicates tha ...

  2. Java:annotation注解的简单理解和总结

    Java annotation 注解Annotation 1.Annotation的概述 1.1.定义 1.2.Annotation作用分类 1.3.Annotation 架构 2.Annotatio ...

  3. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的c ...

  4. Java反射学习总结五(Annotation(注解)-基础篇)

    Annotation(注解)简单介绍: 注解大家印象最深刻的可能就是JUnit做单元測试,和各种框架里的使用了. 本文主要简介一下注解的用法,下篇文章再深入的研究. annotation并不直接影响代 ...

  5. java注释和注解_深入理解JAVA注解(Annotation)以及自定义注解

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制.Java 语言中的类.方法.变量.参数和包等都可以被标注.注解可以看作是一种特殊的标记,在程序在编译或 ...

  6. java编译时注解_简单介绍 Java 中的编译时注解

    1. 前言 上一篇 主要介绍了什么是 注解 (Annotation) 以及如何读取 运行时注解 中的数据, 同时用注解实现了简单的 ORM 功能. 这次介绍另一部分: 如何读取 编译时注解 ( Ret ...

  7. Java Annotation(注解)使用教程

    Java Annotation(注解)使用教程 1 什么是注解 2 注解的使用语法 2.1 内置注解介绍以及使用 @Override @Deprecated @SuppressWarnings @Sa ...

  8. 【java】详解java中的注解(Annotation)

    目录结构: contents structure [+] 什么是注解 为什么要使用注解 基本语法 4种基本元注解 重复注解 使用注解 运行时处理的注解 编译时处理的注解 1.什么是注解 用一个词就可以 ...

  9. Java中的注解(Annotation)处理器解析

    Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的.一直想详细了解一下其中的原理.很有幸阅读到一篇详细解释编写注解处理器的文章.本文的 ...

最新文章

  1. ios .framework动态库重签名
  2. arcgis二次开发python-ArcGIS 二次开发专题 序
  3. python 中的真值表
  4. eclipse java main方法传参数
  5. git二分法查找命令说明
  6. ES系列三、基本知识准备
  7. Navicat Premium 15 逆向表到模型
  8. pom.xml 导入ojdbc6报错
  9. 【Makefile】简单的Makefile编写
  10. 树莓派入门(八)--树莓派USB触摸屏校准及旋转屏幕方向后校准》
  11. Web3 – The Decentralized Web
  12. 计算机符号大全名字大全,符号大全_特殊符号网名大全
  13. Python一行代码实现ADF检验(时间序列平稳性检验)(包含结果解读)
  14. Cocos Creator SDK接入OPPO篇
  15. 大数据集群的部署安装
  16. 22.扩展.等保测评相关实务
  17. 驴妈妈旅游菜单导航带源码
  18. 系统接口对接:(2)
  19. 用于中文文本分类的中文停用词
  20. 微信小程序-简单出售商品示例

热门文章

  1. 当relative遇上z-index,半透明度不阻断事件捕获
  2. javascript控制开始日期,和结束日期在同一个月
  3. javascript设计模式-抽象工厂模式
  4. Linux嵌入式系统开发之Led开发——应用篇(一)
  5. [解决] term.js 记录遇到的问题
  6. mui框架 页面无法滚动解决方法
  7. 【实践】美团外卖图谱推荐比赛冠军经验分享:从多领域优化到AutoML框架
  8. [211渣硕] 腾讯/阿里/携程 详细NLP算法实习 面经
  9. java spring多数据源配置文件_深入理解spring多数据源配置
  10. linux 该用户组id,linux用户和用户组的一些基本知识