文章目录

  • 单行和多行注释
  • 文档注释(Java特有)
  • Annotation(注解)的理解
  • 常见的Annotation示例
  • IDEA注释注解快捷键及模板
  • 自定义 Annotation
  • JDK 中的元注解

单行和多行注释

注释的内容不参与编译,即编译以后的.class的字节码文件中不包含注释的内容。

作用:
①对程序进行解释说明,增强可读性。
②调试所写的代码。(将某代码注释来debug)

格式:
单行注释:以//开头
多行注释:注释内容用/**/一对包住

class HelloJava{/*多行注释:如下的main方法是程序的入口!main的格式是固定的!*/public static void main(String[] args){//单行注释:如下的语句表示输出到控制台。System.out.println("Hello Java !!!");}
}

文档注释(Java特有)

注释内容可以被JDK提供的工具javadoc解析,生成以网页文件形式展现的该程序的说明文档。

/**
文档注释:
@author Yeman
@version v1.0
*/public class HelloJava{/*多行注释:如下的main方法是程序的入口!main的格式是固定的!*//**文档注释:如下的main方法是程序的入口!*/ public static void main(String[] args){//单行注释:如下的语句表示输出到控制台。System.out.println("Hello Java!!!");}
}

Annotation(注解)的理解

从 JDK 5.0 开始, Java 增加了对元数据(MetaData) 的支持,也就是Annotation(注解)。

Annotation 其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用 Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。

Annotation 可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明,这些信息被保存在 Annotation 的 “name=value” 对中。

在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。

未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是基于注解,注解是一种趋势,一定程度上可以说:框架 = 注解 + 反射 + 设计模式


常见的Annotation示例

示例一:生成文档相关的注解
@author 开发该类模块的作者,多个作者之间使用","分隔开
@version 该类模块的版本
@see 参考转向,也就是相关主题
@since 从哪个版本开始增加的
@param 对方法中某参数的说明,如果没有参数就不能写
@return 对方法返回值的说明,如果方法的返回值类型是void就不能写
@exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写
其中
@param @return@exception 这三个标记都是只用于方法的
@param的格式要求:@param 形参名 形参类型 形参说明
@return 的格式要求:@return 返回值类型 返回值说明
@exception 的格式要求:@exception 异常类型 异常说明
@param@exception可以并列多个

/*** @Author: Yeman* @Date: 2021-09-10-11:13* @Description:*/
public class AnnotationTest {/*** 程序的主入口* @param args*/public static void main(String[] args) {System.out.println(getArea(3));}/*** 求圆的面积方法* @param radius double 圆的半径* @return double 圆的面积*/public static double getArea(double radius){return Math.PI * radius * radius;}
}

示例二:在编译时进行格式检查(JDK内置的三个基本注解)
@Override: 重写父类中的方法,该注解只能用于方法
@Deprecated: 用于表示所修饰的元素(类、方法等)已过时
@SuppressWarnings: 抑制编译器警告

public class AnnotationTest{public static void main(String[] args) {@SuppressWarnings("unused")int a = 10;}@Deprecatedpublic void print(){System.out.println("过时的方法");}@Overridepublic String toString() {return "重写的toString方法()";}
}

示例三:跟踪代码依赖性,实现替代配置文件功能
Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署。spring框架中关于“事务”的管理等。


IDEA注释注解快捷键及模板

关于IDEA中注释和注解快捷键及模板可以参见:《 IDEA注释注解快捷键及模板》


自定义 Annotation

定义新的 Annotation 类型使用 @interface 关键字。自定义注解自动继承了java.lang.annotation.Annotation接口

Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型,称为配置参数。类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型及以上所有类型的数组。

可以在定义 Annotation 的成员变量时为其指定初始值, 指定成员变量的初始值可使用 default 关键字。

如果只有一个参数成员,建议使用参数名为value。
如果定义的注解含有配置参数,则使用时必须指定参数值,除非它有默认值。格式是“参数名 = 参数值”,若只有一个参数成员,且名称为value,可以省略“value=”。
没有成员定义的 Annotation 称为标记; 包含成员变量的 Annotation 称为元数据 Annotation。

自定义注解必须配上注解的信息处理流程才有意义,以下示例无意义,只是作为自定义的说明。

@interface MyAnnotation {String value() default "默认初始值";
}@MyAnnotation(value = "赋值")
public class AnnotationTest {public static void main(String[] args) {}
}

JDK 中的元注解

元注解:对注解进行解释说明的注解,修饰其他 Annotation 定义。

JDK5.0提供了4个标准的meta-annotation类型,分别是:
@Retention
@Target
@Documented
@Inherited

1.@Retention: 只能用于修饰 Annotation 定义, 用于指定该 Annotation 的生命周期,@Rentention 包含一个 RetentionPolicy 类型的成员变量,使用@Rentention 时必须为该 value 成员变量指定值:
RetentionPolicy.SOURCE:只在源文件中有效(即源文件保留),编译器则丢弃这种策略的注解;
RetentionPolicy.CLASS:在class文件中有效(即class保留) , 当运行 Java 程序时, JVM 不会保留注解,这是默认值;
RetentionPolicy.RUNTIME:在运行时有效(即运行时保留),当运行 Java 程序时, JVM 会保留该注解,程序可以通过反射获取该注释。

@Retention(RetentionPolicy.SOURCE)
@interface MyAnnotation1{ }

2.@Target: 用于修饰 Annotation 定义,用于指定被修饰的 Annotation 能用于修饰哪些程序元素。 @Target 也包含一个名为 value 的成员变量。

@Target({ElementType.CONSTRUCTOR,ElementType.METHOD,ElementType.TYPE})

若不使用,则默认自定义的Annotation可以用于所以程序元素。

3.@Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被javadoc工具提取成文档,默认情况下,javadoc是不包括注解的。
定义为Documented的注解必须设置Retention值为RUNTIME。

4.@Inherited: 被它修饰的 Annotation 将具有继承性。如果某个类使用了被@Inherited 修饰的 Annotation,则其子类将自动具有该注解。

5.@Repeatable:可重复注解,成员值为MyAnnotations. class。MyAnnotation的Target等其他元注解和Retention MyAnnotations都要相同。

6.JDK1.8之后,关于元注解@Target的参数类型ElementType枚举值多了两个:
TYPE_PARAMETERTYPE_USE。在Java 8之前,注解只能是在声明的地方所使用,Java8开始,注解可以应用在任何地方。
ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)
ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中

让别人和自己看懂自己的程序代码?一文掌握Java单行多行、文档注释以及注解(Annotation)超详细的理解使用,IDEA注释注解快捷键和模板,提高程序代码更有可读性相关推荐

  1. mybatis-generator生成带中文注释POJO类的超详细教程含代码和图解

    mybatis-generator生成带中文注释POJO类的超详细教程含代码和图解 mybatis-generator自动生成带中文注释POJO类和增删改查,idea和eclipes都可以使用 MyC ...

  2. 为什么不敢和别人竞争_看懂这个自我评价发展曲线,你就明白,为什么青春期孩子如此叛逆...

    青春期是让很多父母特别头疼的一个时间段. 当孩子进入青春期后,父母发现孩子就像变了一个人一样,打不得.说不得,说重了不行,表扬夸奖也不行.无论父母采取何种行为,总是会受到孩子的叛逆反抗.这让父母感到特 ...

  3. java最大子序列和问题_一文看懂《最大子序列和问题》(内含Java,Python,JS代码)...

    最大子序列和是一道经典的算法题, leetcode 也有原题<53.maximum-sum-subarray>,今天我们就来彻底攻克它. 题目描述 求取数组中最大连续子序列和,例如给定数组 ...

  4. 超详细解读:神经语义解析的结构化表示学习 | 附代码分析

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...

  5. Java Web入门之JSTL标签的解析及使用(超详细必看)

    创作不易 觉得有帮助或者想要实战源码可以点赞关注收藏后评论区留言 文章目录 前言 一.表达式标签 二.URL相关标签 三.流程控制标签 四.循环标签 总结 前言 JSTL叫做标准标签库 但实际上它是由 ...

  6. 超详细讲解无迹卡尔曼(UKF)滤波(个人整理结合代码分析)

    目录 1.用来做什么? 2.线性卡尔曼滤波 3.扩展卡尔曼滤波 4.无迹卡尔曼滤波 1.用来做什么? --针对系统的不确定性:1.不存在完美的数学模型 2.系统的扰动不可控.也很难建模 3.测量传感器 ...

  7. Java~链表反转/链表逆置的多种方法(超详细,含完整代码)

    单链表的反转,有一个单链表,我们要如何对他进行反转呢?这里我们以leetcode--206为例子 附上题目链接力扣https://leetcode-cn.com/problems/reverse-li ...

  8. python实例豆瓣音乐代码_Python爬虫实战(3)-爬取豆瓣音乐Top250数据(超详细

    前言 首先我们先来回忆一下上两篇爬虫实战文章: 第一篇:讲到了requests和bs4和一些网页基本操作. 第二篇:用到了正则表达式-re模块 今天我们用lxml库和xpath语法来爬虫实战. 1.安 ...

  9. 小程序文本溢出显示省略号(单行/多行)

    1.单行:外部容器应加overflow: hidden;否则不显示省略号 .text {font-size: 38rpx; overflow: hidden; white-space: nowrap; ...

最新文章

  1. 调查报告:工人们并不担心将来会被AI取代
  2. 算法------四数相加 II (java 版本)
  3. UITableView 学习笔记
  4. [Linux学习]Linux键盘布局设置
  5. 考研数学:【以错补错】 降低做题出错率
  6. 【C++ Priemr | 15】面向对象程序设计
  7. web项目接到请求之后执行sql特别慢_小米开源!SQL优化工具,人工智能帮你 Rewrite...
  8. Mosquito的优化——订阅树优化(八)
  9. 微信小程序云开发用户身份登录_你必须要掌握的微信小程序云开发
  10. python处理word或者pdf文件_利用python程序生成word和PDF文档的方法
  11. 相似性度量:机器学习距离公式总结
  12. JavaSE_1   基本概念
  13. c语言中如何用字母代替加减乘除的符号,c语言加减乘除代码
  14. 阿里巴巴分布式调度引擎tbschedule实战二源码环境搭建
  15. matlab求极限分布,中心极限定理的Matlab演示
  16. linux基本权限例子,Linux-3 文件权限-基本权限
  17. 金融统计分析python论文_金融统计分析论文
  18. 装ubuntu系统U盘制作启动盘
  19. Vue 组件中的data为什么是一个函数?
  20. Outlook收件箱总显示有未读邮件问题

热门文章

  1. Java并发性-任务反馈
  2. 在下一个项目中不使用JavaDoc的5大原因
  3. 当集合a为空集时a的取值范围_高中数学必修一第一章集合分节练习和章末测试题含答案[1] 2...
  4. Linux 查看文件位置/查看文件路径的命令
  5. Linux 命令之 find -- 查找文件和目录/搜索文件和目录
  6. zip直链生成网站_安装网站程序
  7. vue设置标签自定义属性_Vue组件化开发之插槽
  8. php soap传值,在SOAP调用中传递PHP数组
  9. 发送结构化数据Client端
  10. php 异步post,php – 使用POST的异步cURL