注解

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

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

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

语法是以@ 开头

简单来说,

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

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

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

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

?

这里在子类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

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

看一些简单定义的例子:

?

四、使用例子:

?

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

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

五、Annotation的作用

介绍到此,可以总结一下Annotation的作用了。

基础的大致可以分为三类:

1. 编写文档

2. 代码分析

3. 编译检查

但是,开源框架对其赋予了更多的作用

比如:

Hibernate,注解配置,

?

这个类似于XML配置,简化程序中的配置

相对与把一部分元数据从XML文件移到了代码本身之中,在一个地方管理和维护。

内部如何实现的? -- java 反射机制,类似与以上例子。

注释

虽然注解、注释只相差一个字,但是用法就差异很大。

还是那句话, 注解给编译器看, 注释是给人看的。

基于此的话, 对于一个方法来说:

1. 把这个方法的作用, 输入,输出描述清楚就可以了,更多的可以加上一些作者呀,版本呀这样一些信息

2. 注释编排的美观一些

做到这两点应该就可以了。 举个例子:

?

看上去这是一个不错的注释^^.

但是对于Java 语言来说, 注释被赋予了更多的功能。 就是你可以使用javadoc 这个功能把代码中的注释导出到  html 的文件中。

如果你的代码是共用性很高的代码的话, 这份文档就是一份API的参考文档, 类似Java API.

所以, 要产生出这样的文档,就要遵循java 定义的一些注释规范, 才能产生出规范的文档出来。

一、Java 类方法的标准注释

还是从类的方法的注释说起。

?

(不去关注以上注释的意义,只关注其定义的样式)

1. 首先看最上面的 “Read a line of text.  A line .. ” 这一段是对这个方法的一些描述。

第一个句号前面的部分, 也就是 “Read a line of text.” 会出现在 “方法摘要” 中

2. @param 定义的是方法的输入参数,(可以添加多个)出现在“ 方法详细信息” 中。(参数和参数描述之间使用空格隔开, 在产生的文档中转成了  -)

3. @return  返回值的描述

4. @see  参考的描述

5. @exception 异常抛出的描述

美观考虑, 不同类的标签可以换一行显示, 比如 @param 和 @return 直接空一行。

二、Java 类标准注释

类的注释和方法注释的格式基本相同。 区别的地方:

1. 放置的位置不同。 类的注释放在类定义的上面, 方法的注释放在方法定义的上面。

2. 类的注释比较会使用   @version  @author  @since 这样的标签。

看模板

?

doc 中显示的效果是:

同样, 描述的第一句出现在“类概要”中。

类的详细信息显示如下:

值得注意的是 description 中

的使用。 如果没有加

, 在java code 中不管是否有换行,产生的doc 中都不换行。 加上

的话, doc 中出现换行。

三、补充

补充一下, 产生javadoc的方法:

1. 命名行方式:  javadoc  + 参数

2. 使用Eclipse IDE 导出

如果在Eclipse IDE 中, 在源文件或是项目上右键单击 , 选 Export  --->

Java --> Javadoc 就可以产生了。

java里什么是注释,全面解析Java中的注解与注释相关推荐

  1. java中注解的解析_全面解析Java中的注解与注释

    注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...

  2. java注释_全面解析Java中的注解与注释

    注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...

  3. java 获取spring对象数组_解析Java中如何获取Spring中配置的bean

    解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...

  4. java 字符串是对象吗_解析Java中的String对象的数据类型

    解析Java中的String对象的数据类型 2007-06-06 eNet&Ciweek 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所 ...

  5. java如何避免注释重复_Java 8中的可重复注释

    java如何避免注释重复 使用Java 8,您可以对声明或类型重复相同的注释. 例如,要注册一个类仅应由特定角色在运行时访问,则可以编写如下内容: @Role("admin") @ ...

  6. 解析java源文件_使用JDT.AST解析java源码

    在做java源码的静态代码审计时,最基础的就是对java文件进行解析,从而获取到此java文件的相关信息: 在java文件中所存在的东西很多,很复杂,难以用相关的正则表达式去一一匹配.但是,eclip ...

  7. java里的初始化块_[转载] Java 语言中的实例初始化块 ( IIB) 详解

    参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...

  8. 教你如何完全解析Kotlin中的注解

    简述: 从这篇文章将继续开始探索Kotlin中的一些高级的内容,之前有着重探讨了Kotlin的泛型以及泛型型变等内容.现在我们一起来看下Kotlin中的注解.Kotlin中的注解是100%与Java注 ...

  9. 【Java系列】从JVM角度解析Java核心类String的不可变特性

    凯伦说,公众号ID: KailunTalk,努力写出最优质的技术文章,欢迎关注探讨. 1. 前言 最近看到几个有趣的关于Java核心类String的问题. String类是如何实现其不可变的特性的,设 ...

最新文章

  1. shell学习笔记--自我总结
  2. oracle tns和sid,oracle – TNS-12505:TNS:侦听器当前不知道连接描述符中给出的SID
  3. 如何做相册_我是如何对2000张照片进行批量套版的
  4. 个性化互联网时代,互联网营销
  5. SDN免费快速获得积分和直接获取下载码的几个办法,亲测有效区
  6. 在网站中使用谷歌“ROBOTO”字体(解决ios数字1和0大小不等宽问题)
  7. iOS开发图片加载的内存问题及优化方案
  8. 【第十篇】单点登录原理和JWT实现
  9. 承上启下继往开来,Python3上下文管理器(ContextManagers)与With关键字的迷思
  10. 怎样才能让自己的QQ号永远不会被盗?
  11. Unity UGUI插件,动效UI插件,简约风UI,UI框架,Q弹动画UI,包含Button,Icon,DropDown,InputField,Modal Window单易用有例子。
  12. 【杂谈与乱码】我们过度解读了鲁迅先生了么?
  13. ChatGPT使用拓展资料:AI大模型之美 -客户服务、聊天机器人和情感分析
  14. random.seed(0)
  15. 【 Git错误记录(一)】Permissions 0755 for ‘/home/wwww/.ssh/id_rsa_github‘ are too open.
  16. Spring Cloud Alibaba系列使用(二)----Nacos注册中心
  17. 中国女排3-2力克巴西,朱婷、张常宁等主力回归,下次对阵荷兰,排名会发生怎样的变化?
  18. 【C++】面试题目,整理自牛客网
  19. 读王坚博士的《在线》有感
  20. 轩逸车联网功能怎么用_十四代轩逸,一起看看车联网功能

热门文章

  1. 一个网工的十年奋斗史 - 工作篇
  2. C/C++程序员是什么让你有如此优势?音视频开发该怎么学?
  3. UVA12716 LA6657 GCD XOR【GCD+位运算+前缀和】
  4. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java科研信息管理503pp
  5. 可靠性指标中MTTF MTBF MTTR
  6. 详解与重构hyman《Android SurfaceView实战 打造抽奖转盘》
  7. 红帽linux 下qt 5.13.1 编译 mysql80驱动(内含升级gcc版本)
  8. 问什么说我的计算机主机名无效,为什么arcgis的许可管理器 修改为主机时,总是说我输入的是无效主机名...
  9. USR-TCP232-E2串口转以太网模块的使用方法
  10. 如何从零开始学python_《如》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...